From 93dad9b7379196e2d15e9101c1b75ab43ad3afbb Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 11 Feb 2016 22:45:40 +0100 Subject: pulled translations from transifex --- src/main/res/values-cs/strings.xml | 12 + src/main/res/values-ko/strings.xml | 140 +++++++++- src/main/res/values-pl/strings.xml | 80 +++++- src/main/res/values-sr/strings.xml | 5 + src/main/res/values-vi/strings.xml | 547 ++++++++++++++++++++++++++++++++++++- 5 files changed, 768 insertions(+), 16 deletions(-) diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index c64b8d26..aeaf7f69 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -240,6 +240,7 @@ Upravit jméno konference Konference nenalezena + Došlo k neznámé chybě Odejít Kontakt přidán do seznamu Opět přidat @@ -297,6 +298,8 @@ Další Jméno konference Pro identifikaci konferencí použít téma místnosti místo jejího JID + Automaticky vstupovat do konferencí + Používat autojoin nastavení v záložkách konferencí OTR otisk zkopírován do schránky! OMEMO otisk zkopírován do schránky! Vstup do konference byl zakázán @@ -498,9 +501,15 @@ Při vypnuté obrazovce označí váš stav jako pryč Nedostupný při vypnutém zvuku Při tichém módu označí váš stav jako nedostupný + Rozšířené možnosti připojení + Zobrazovat hodnoty hostname a port při nastavování účtu + xmpp.server.cz Přidat účet s certifikátem Nelze načíst certifikát Nechat prázdné pro ověření s certifikátem + Nastavení archivace + Získávání nastavení archivace. Chvíli strpení... + Získání nastavení archivace se nezdařilo Captcha text Captcha vyžadována opište text z obrázku @@ -524,6 +533,7 @@ %d zprávy %d zpráv + Načíst více zpráv Soubor sdílen s %s Obrázek sdílen s %s Conversations vyžaduje přístup k externímu úložišti @@ -550,4 +560,6 @@ Tento přístroj provádí agresivní optimalizace využití baterie pro konverzace. Ty mohou způsobit zpoždění upozornění nebo ztrátu zpráv.\nnyní budete vyzváni k jejich vypnutí. Vypnout Vybraný obsah je příliš dlouhý + (Žádné aktivované účty) + Toto pole je vyžadováno diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml index 4c00d81f..46db5168 100644 --- a/src/main/res/values-ko/strings.xml +++ b/src/main/res/values-ko/strings.xml @@ -9,6 +9,7 @@ 안전한 대화 계정 추가 이름 편집 + 주소록에 추가 명단에서 삭제 연락처 연락처 차단 해제 @@ -27,6 +28,8 @@ %d 분 전 읽지 않은 대화 보내는중... + 메세지 복호화중입니다. 기다리세요... + OpenPGP로 암호화된 메세지 사용중인 별명입니다 관리자 소유자 @@ -72,8 +75,12 @@ 대화 기록 삭제 이 대화의 모든 메세지를 삭제하시겠습니까? 경고: 이것은 다른 기기나 서버에 있는 메세지에는 영향을 미치지 않습니다. 메세지 삭제 + 나중에 이 대화 끝내기 연락할 프레즌스 선택 + 암호화하지 않은 메세지 전송 OTR 암호화된 메세지 전송 + OMEMO로 암호화된 메세지 + v\\OMEMO로 암호화된 메세지 전송 OpenPGP 암호화된 메세지 전송 닉네임이 변경되었습니다 암호화하지 않고 전송 @@ -82,12 +89,14 @@ Conversations는 메세지를 암호화 및 복호화하고 공개 키를 관리하기 위해 OpenKeychain이라는 제 3자 앱을 활용합니다. OpenKeychain은 GPLv3 라이센스를 사용하며 F-Droid와 Google Play에서 구하실 수 있습니다. (이후 Conversations를 재시작하세요) 재시작 설치 + OpenKeychain을 설치하세요 제공중... 대기중... OpenPGP 키가 발견되지 않음 당신의 연락처가 그들의 공개 키를 선언하지 않고 있기 때문에 Conversations는 당신의 메세지를 암호화할 수 없습니다. OpenPGP를 설정하도록 당신의 연락처에게 물어보세요. OpenPGP 키가 발견되지 않음 당신의 연락처가 그들의 공개 키를 선언하지 않고 있기 때문에 Conversations는 당신의 메세지를 암호화할 수 없습니다. OpenPGP를 설정하도록 당신의 연락처에게 물어보세요. + 암호화된 메세지가 도착했습니다. 터치하여 복호화하세요. 일반 XMPP 자원 이 클라이언트가 자신을 알아보는 이름 @@ -142,8 +151,10 @@ 서버가 등록을 지원하지 않습니다 보안 오류 호환되지 않는 서버 + 암호화되지 않음 OTR OpenPGP + OMEMO 계정 편집 계정 삭제 임시로 해제 @@ -162,6 +173,7 @@ 암호가 일치하지 않습니다 올바른 Jabber ID가 아닙니다 메모리 부족. 이미지 용량이 너무 큽니다 + 주소록에 %s를 추가하시겠습니까? 접속중 대화 가능 자리 비움 @@ -177,6 +189,8 @@ XEP-0191: Blocking Command XEP-0237: Roster Versioning XEP-0198: Stream Management + XEP-0163: PEP (Avatars / OMEMO) + XEP-0363: HTTP 파일 업로드 가능 불가 공개 키 선언 누락 @@ -189,22 +203,33 @@ %d 일 전까지 접속했었음 접속한적 없음 암호화된 메세지. 복호화하기 위해 OpenKeychain을 설치하세요. - 알 수 없는 OTR 지문 + 알 수 없는 OTR 핑거프린트 OpenPGP 암호화 메세지 발견 접수 실패 - 당신의 지문 - OTR 지문 + 당신의 핑거프린트 + OTR 핑거프린트 + OMEMO 핑거프린트 + v\\OMEMO 핑거프린트 + 메세지의 OMEMO 핑거프린트 + 메세지의 v\\OMEMO 핑거프린트 + OMEMO 핑거프린트 소유 + 다른 기기들 + OMEMO 핑거프린트 신뢰 + 키 가져오는 중... + 완료 검증 복호화 회의 검색 연락처 생성 + 연락처 입력 회의 참석 연락처 삭제 연락처 정보 보기 연락처 차단 연락처 차단 해제 만들기 + 선택 이미 존재하는 연락처입니다 참석 회의 주소 @@ -245,8 +270,8 @@ 연락처로부터 프레즌스 업데이트 찾을 수 없음 먼저 연락처로부터 프레즌스 업데이트를 요청하세요. 이는 당신의 연락처가 어떤 클라이언트를 사용하는지 결정하는 데 사용됩니다. 지금 요청 - 지문 삭제 - 이 지문을 삭제하시겠습니까? + 핑거프린트 삭제 + 이 핑거프린트를 삭제하시겠습니까? 무시 경고: 상호간의 프레즌스 업데이트 없이 이것을 보내면 예기치 못한 문제를 발생시킬 수 있습니다. 당신의 프레즌스 구독을 검증하기 위해 연락처 상세 정보로 가세요. 암호화 설정 @@ -272,16 +297,20 @@ 기타 회의 이름 회의를 식별하기 위해 JID 대신 방 제목을 사용 - OTR 지문이 클립보드에 복사되었습니다 + OTR 핑거프린트가 클립보드에 복사되었습니다 + OMEMO 핑거프린트가 클립보드에 복사되었습니다 당신은 이 회의에서 금지되었습니다 이 회의는 멤버 전용입니다 당신은 이 회의에서 추방되었습니다 using account %s + HTTP 호스트에서 %s 확인 중 접속중이 아닙니다. 다시 시도하세요. + %s 크기 확인 메세지 설정 텍스트 복사 원본 URL 복사 다시 보내기 + 파일 URL 메세지 텍스트 URL이 클립보드에 복사되었습니다 메세지가 클립보드에 복사되었습니다 @@ -291,7 +320,7 @@ 차단 목록 보기 계정 정보 OTR 검증 - Remote Fingerprint + 원격 핑거프린트 스캔 Socialist Millionaire Protocol 힌트 혹은 질문 @@ -309,6 +338,9 @@ Conversations 포어그라운드에서 서비스 유지 운영체제가 접속을 해제하지 못하도록 예방합니다 + 내보내기 기록 + 기록을 SD 카드에 쓰기 + 기록을 SD 카드에 쓰는 중 파일 선택 수신중 %1$s (%2$d%% 완료) %s 다운로드 @@ -321,9 +353,9 @@ 파일 전송 실패 파일이 삭제되었습니다 파일을 열기 위한 앱이 발견되지 않았습니다 - 지문을 검증할 수 없습니다 + 핑거프린트를 검증할 수 없습니다 수동 검증 - 연락처의 OTR 지문을 검증하시겠습니까? + 연락처의 OTR 핑거프린트를 검증하시겠습니까? 동적 태그 표시 연락처 밑에 읽기 전용 태그 표시 알림 사용 @@ -334,7 +366,18 @@ 비밀 접수됨 초기화 계정 아바타 - OTR 지문을 클립보드에 복사 + OTR 핑거프린트를 클립보드에 복사 + OMEMO 핑거프린트를 클립보드에 복사 + OMEMO 키 다시 생성 + PEP로부터 다른 기기들 제거 + 기기 제거 + OMEMO 선언으로부터 모든 기기를 지우시겠습니까? 다음에 기기들이 접속할 때, 기기들이 스스로 다시 선언하지만, 그 동안에 보내진 메세지는 받지 못할수도 있습니다. + 키 제거 + 이 키를 제거하시겠습니까? + 이것은 되돌릴 수 없으며 훼손된 것으로 간주됩니다. 이것으로는 다시는 세션을 만들 수 없게 됩니다. + 이 연락처에 사용할 수 있는 키가 없습니다. \n서버로부터 새로운 키를 가져올 수 없습니다. 아마 연락처의 서버에 오류가 있는 것 같습니다. + 이 연락처에 사용할 수 있는 키가 없습니다. 당신이 그들의 키 중에서 어떤 것이든 제거했다면, 그들이 새로운 키를 만들어야 합니다. + 오류 서버로부터 기록 가져오는중 서버에 더이상 기록이 없습니다 업데이트중... @@ -342,11 +385,11 @@ 암호를 변경할 수 없습니다 암호화된 대화를 시작하기 위해 메세지 보내기 질문하기 - 만약 당신과 당신의 연락처가 다른 사람은 모르는 비밀을 공유하고 있다면, 그 비밀을 서로의 지문을 검증하는 데 사용할 수 있습니다. 대소문자가 구분된 대답을 할 연락처에게 힌트나 질문을 주세요. - 당신의 연락처는 당신의 지문을 검증하고자 공유된 비밀을 확인하려고 합니다. 당신의 연락처는 그 비밀에 관한 다음과 같은 힌트 혹은 질문을 제공했습니다. + 만약 당신과 당신의 연락처가 다른 사람은 모르는 비밀을 공유하고 있다면, 그 비밀을 서로의 핑거프린트를 검증하는 데 사용할 수 있습니다. 대소문자가 구분된 대답을 할 연락처에게 힌트나 질문을 주세요. + 당신의 연락처는 당신의 핑거프린트를 검증하고자 공유된 비밀을 확인하려고 합니다. 당신의 연락처는 그 비밀에 관한 다음과 같은 힌트 혹은 질문을 제공했습니다. 힌트를 반드시 입력해야 합니다 공유된 비밀을 반드시 입력해야 합니다 - 아래에 보이는 지문을 당신의 연락처의 지문과 세심하게 비교하세요. 당신은 암호화된 이메일이나 전화와 같은 믿을만한 통신수단으로 이것을 주고 받을 수 있습니다. + 아래에 보이는 핑거프린트를 당신의 연락처의 핑거프린트와 세심하게 비교하세요. 당신은 암호화된 이메일이나 전화와 같은 믿을만한 통신수단으로 이것을 주고 받을 수 있습니다. 암호 변경 현재 암호 새 암호 @@ -372,7 +415,10 @@ 공개적으로 접근 가능한 회의 멤버 전용 사설 회의 회의 설정 + 멤버 전용 (사설) 익명 아님 + 중재됨 + 당신은 참여하고 있지 않습니다 회의 설정 변경됨 회의 설정을 변경할 수 없습니다 안함 @@ -400,6 +446,7 @@ %s 제공중 오프라인 숨기기 계정 해제 + %s 이(가) 입력중입니다... %s 이(가) 입력을 중단했습니다 입력 알림 새 메세지를 작성할 때 이를 연락처에게 알립니다 @@ -429,4 +476,71 @@ 없음 최근 사용된 항목 빠른 동작 선택 + 연락처 또는 그룹 검색 + 개인 메세지 전송 + %s 이(가) 회의에서 나갔습니다. + 사용자 이름 + 사용자 이름 + 이것은 올바른 사용자 이름이 아닙니다 + 다운로드 실패: 서버가 발견되지 않음 + 다운로드 실패: 파일이 발견되지 않음 + 다운도륻 실패: 호스트에 접속할 수 없음 + 하얀색 배경 사용 + 받은 메세지를 하얀색 배경에 검은색 글씨로 표시 + Tor 네트워크 사용할 수 없음 + 손상됨 + 프레즌스 설정 + 화면이 꺼져있을 경우 자리 비움으로 표시 + 화면이 꺼져있을 경우에 자리 비움으로 상태를 표시함 + 음소거 모드에서는 사용할 수 없음 + 기기가 음소거 모드일때는 사용할 수 없음으로 상태를 표시함 + 인증서가 있는 계정 추가 + 인증서를 분석할 수 없음 + Captcha 텍스트 + Captcha가 필요함 + 이미지로부터 텍스트 입력 + 인증서 체인을 신뢰할 수 없습니다 + Jabber ID가 인증서와 일치하지 않습니다 + 인증서 갱신 + OMEMO key를 가져오는 도중 오류가 발생했습니다 + OMEMO 키와 인증서 검증됨 + 기기가 선택된 클라이언트 인증서를 지원하지 않습니다 + 접속 옵션 + Tor를 통해 접속 + 모든 연결을 Tor 네트워크를 통하도록 유도함. Orbot이 필요합니다 + 호스트 이름 + 포트 + 서버 또는 .onion 주소 + 올바른 포트 번호가 아닙니다 + 올바른 호스트 이름이 아닙니다 + %2$d 중 %1$d 계정이 연결되었습니다 + + %d 메세지 + + 파일을 %s와 공유함 + 이미지를 %s와 공유함 + Conversations는 외부 저장소로의 접근을 필요로 합니다 + 연락처와 동기화 + Conversations는 XMPP 명단과 연락처 명단을 대조시켜서 이름과 아바타를 표시하고자 합니다.\n\nConversations는 당신의 서버에 업로드하지 않고 기기 내부적으로만 연락처를 읽고 대조를 할 것입니다.\n\n이제 연락처에 접근할 권한을 당신에게 물어볼 것입니다. + 인증서 정보 + 제목 + 발행자 + 이름 + 단체 + SHA1 + (사용할 수 없음) + 인증서가 발견되지 않았습니다 + 모든 메세지를 알림 + 중요 표시를 했을 때만 알림 + 알림 해제됨 + 알림 일시중지됨 + 사진 압축 + 사진의 크기를 줄이고 압축함 + 항상 + 자동 + 배터리 최적화 사용됨 + 당신의 기기는 메세지를 받지 못하게 되거나 알림을 지연시킬 수도 있는 고강도의 배터리 최적화를 Conversations에 하고 있습니다.\n배터리 최적화를 해제하는 것을 추천합니다. + 당신의 기기는 메세지를 받지 못하게 되거나 알림을 지연시킬 수도 있는 고강도의 배터리 최적화를 Conversations에 하고 있습니다.\n이것을 해제할 것인지 물어볼 것입니다. + 해제 + 선택된 영역이 너무 큽니다 diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 518a4a3a..240eed92 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -9,6 +9,7 @@ Konwersacja szyfrowana Dodaj konto Edytuj nazwę + Dodaj do kontaktów Usuń z rostera Zablokuj kontakt Odblokuj kontakt @@ -27,6 +28,8 @@ %d minut temu nieprzeczytanych konwersacji wysyłanie... + Odszyfrowywanie wiadomości. To zajmie tylko chwilę... + Wiadomość zaszyfrowana OpenPGP Nazwa jest już w użyciu Admin Właściciel @@ -63,7 +66,7 @@ Nie można połączyć się z wieloma kontami Dotknij tutaj aby zarządzać swoimi kontami Dołącz plik - Kontakt nie jest na twoim rosterze. Czy chcesz go dodać? + Kontakt nie należy do Twojej listy kontaktów. Czy chcesz go dodać? Dodaj kontakt wysyłanie nie powiodło się odrzucono @@ -72,24 +75,28 @@ Wyczyść historię konwersacji Czy na pewno usunąć wszystkie wiadomości powiązane z konwersacją?\n\nUwaga: Działanie nie wpływa na wiadomości przechowywane na innych urządzeniach lub serwerach. Usuń wiadomości + po czym zakończ tę rozmowę Wybierz widoczność dla kontaktu Wyślij wiadomość bez szyfrowania Wyślij zaszyfrowaną wiadomość (OTR) Wyślij wiadomość zaszyfrowaną OMEMO + Wyślij wiadomość zaszyfrowaną v\\OMEMO Wyślij zaszyfrowaną wiadomość (OpenPGP) - Twoja nazwa została zmieniona + Twój nick został zmieniony Wyślij bez szyfrowania Nie można odszyfrować. Sprawdź poprawność klucza prywatnego. OpenKeychain Conversations używa zewnętrznej aplikacji OpenKeychain do szyfrowania wiadomości i zarządzania kluczami publicznymi.\n\nOpenKeychain rozpowszechniany jest na licencji GPLv3 przez F-Droid lub Google Play.\n\n(Zrestartuj Conversations po instalacji). Zrestartuj Zainstaluj + Proszę zainstalować OpenKeychain oferowanie... oczekiwanie... Nie znaleziono klucza OpenPGP Conversations nie może zaszyfrować wiadomości, ponieważ kontakt nie udostępnia klucza publicznego.\n\nZasugeruj rozmówcy instalację OpenPGP. Nie znaleziono kluczy OpenPGP Conversations nie może zaszyfrować wiadomości, ponieważ kontakty nie udostępniają kluczy publicznych.\n\nZasugeruj rozmówcom instalację OpenPGP. + Odebrano zaszyfrowaną wiadomość. Dotknij by odszyfrować Główne Zasób XMPP Nazwa identyfikująca urządzenie @@ -166,6 +173,7 @@ Hasła są niezgodne Wprowadzono niepoprawny Jabber ID Brak pamięci, obraz jest za duży + Czy chcesz dodać %s do listy kontaktów? dostępny chętny do rozmowy zaraz wracam @@ -201,22 +209,27 @@ Twój odcisk klucza Odcisk klucza OTR Odcisk OMEMO + Odcisk v\\OMEMO Odcisk OMEMO wiadomości + Odcisk v\\OMEMO wiadomości Własny odcisk OMEMO Pozostałe urządzenia Zaufane odciski OMEMO + Pobieranie kluczy... Ukończono Weryfikuj Odszyfruj Konferencje Szukaj Utwórz kontakt + Wpisz kontakt Dołącz do konferencji Usuń kontakt Szczegóły kontaktu Zablokuj kontakt Odblokuj kontakt Utwórz + Wybierz Kontakt już istnieje Dołącz Adres konferencji @@ -325,6 +338,9 @@ Conversations Usługa na pierwszym planie Uniemożliwia systemowi przerwanie połączenia + Wyeksportuj historię rozmów + Zapisz historię na karcie SD + Zapisywanie historii na karcie SD... Wybierz plik Odbieranie %1$s (ukończono %2$d%%) Pobierz %s @@ -359,6 +375,7 @@ Skasuj klucz Czy na pewno chcesz skasować usunąć odcisk klucza? Zostanie bez odwołania uznane za zdradzone, i nigdy więcej nie będzie można stworzyć z nim sesji. + Nie ma dostępnych kluczy dl atego kontaktu.\nPobieranie nowych kluczy z serwera nie powiodło się. Byćmoże jest coś nie tak z Twoim serwerem kontaktów? Nie ma dostępnych żadnych użytecznych kluczy dla tego kontaktu. Jeśli usunąłeś jakieś jego klucze, kontakt będzie musiał wygenerować nowe. Błąd Pobieranie historii z serwera @@ -429,6 +446,7 @@ Oferowanie %s Ukryj niedostępnych Wyłącz konto + %s pisze... %s przestał(a) pisać Powiadomienia pisania Powiadamiaj rozmówcę, kiedy rozpoczynasz nową wiadomość @@ -473,5 +491,63 @@ Pobieranie nieudane: Nie można połączyć z hostem Białe tło Pokazuj otrzymane wiadomości jako czarny tekst na białym tle + Sieć TOR jest niedostepna Zepsute + Ustawienia obecności + Status \"Oddalony\" gdy wyświetlacz jest wyłączony + Oznacza Twój zasób jako \"Oddalony\", gdy wyświetlacz jest wyłączony + Niedostepne w trybie cichym + Oznacza Twój zasób jako \"Nieobecny\" gdy urządzenie jest w trybie cichym + Dodaj konto za pomocą certyfikatu + Nie mogę odczytać certyfikatu + Pozostaw puste by autoryzować za pomocą certyfikatu + Captcha + Captcha wymagana + przepisz tekst z obrazka + Łańcuch certyfikatu nie jest zaufany + Jabber ID nie odpowiada certyfikatowi + Odnów certyfikat + Błąd pobierania klucza OMEMO! + Zweryfikowano klucz OMEMO z certyfikatem + Twoje urządzenie nie wspiera wyboru certyfikatów klienckich + Opcje połączenia + Połącz przez sieć TOR + Tuneluj wszystkie połączenia przez sieć TOR. Wymaga zainstalowania aplikacji \"Orbot\" + Nazwa hosta + Port + Adres serwera lub \".onion\" adres + To nie jest prawidłowy numer portu + To nie jest prawidłowa nazwa hosta + %1$d z %2$d kont połączonych + + %d wiadomość + %d wiadomości + %d wiadomości + + Dzielony plik z %s + Dzielony obraz z %s + Conversations potrzebuje dostęp do zewnętrznego magazynu + Synchronizuj z kontaktami + Conversations chce dopasować Twoje kontakty XMPP z listą kontaktów w telefonie, by uzupełnić ich pełne imiona oraz awatary.\nConversations jedynie przeczyta Twoje kontakty i dopasuje je lokalnie, bez wysyłania na Twój serwer.\n\nZostaniesz teraz poproszony o przydzielenie pozwolenia na odczyt Twoich kontaktów. + Informacja o certyfikacie + Temat + Wystawca + Nazwa + Organizacja + SHA1 + (Niedostępne) + Nie znaleziono certyfikatu + Powiadom o wszystkich wiadomościach + Powiadom tylko gdy wspomniano + Powiadomienia wyłączone + Powiadomienia wstrzymane + Kompresuj obrazki + Zmień rozmiar i kompresuj obrazki + Zawsze + Automatycznie + Optymalizacje zużycia baterii włączone + Twoje urządzenie wykonuje poważnie optymalizacje zużycia baterii przez Conversations, które mogą powodować opóźnienie powiadomień lub nawet utratę wiadomości.\nZaleca się ich wyłączenie. + Twoje urządzenie wykonuje poważnie optymalizacje zużycia baterii przez Conversations, które mogą powodować opóźnienie powiadomień lub nawet utratę wiadomości.\nZostaniesz teraz poproszony o ich wyłączenie + Wyłącz + Zaznaczony obszar jest zbyt duży diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index 43e8fc22..17a0bbdf 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -240,6 +240,7 @@ Ви Уреди предмет групног ћаскања Групно ћаскање није нађено + Примљена је непозната грешка Напусти Контакт вас је додао на списак контаката Додај га @@ -498,6 +499,7 @@ Означава ваш ресурс одсутним кад је екран искључен Недоступан у тихом режиму Означава ваш ресурс недоступним кад је уређај у тихом режиму + xmpp.primer.com Додај налог сертификатом Не могу да рашчланим сертификат Оставите празно за аутентификацију сертификатом @@ -524,6 +526,7 @@ %d поруке %d порука + Учитај још порука Подељен фајл са %s Подељена слика са %s Конверзацији је потребан приступ спољашњем складишту @@ -550,4 +553,6 @@ Ваш уређај користи оптимизацију потрошње батерије за Конверзацију што може да доведе до застоја обавештења или чак губитка порука.\n\nСада ћете бити упитани да то искључите. Искључи Назначена површина је превелика + (Нема активираних налога) + Ово поље је захтевано diff --git a/src/main/res/values-vi/strings.xml b/src/main/res/values-vi/strings.xml index c757504a..92fa1133 100644 --- a/src/main/res/values-vi/strings.xml +++ b/src/main/res/values-vi/strings.xml @@ -1,2 +1,547 @@ - + + Cài đặt + Hội thoại mới + Quản lý tài khoản + Kết thúc hội thoại + Thông tin liên hệ + Chi tiết diễn đàn + Bảo mật hội thoại + Thêm tài khoản + Chỉnh sửa tên + Thêm vào danh bạ + Xoá khỏi danh sách bạn bè + Chặn liên hệ + Bỏ chặn liên hệ + Chặn miền + Bỏ chặn miền + Quản lý tài khoản + Cài đặt + Chi tiết diễn đàn + Chi tiết liên hệ + Chia sẻ qua Conversation + Khởi chạy Conversation + Chọn liên hệ + Danh sách chặn + mới đây + 1 phút trước + %d phút trước + Các hội thoại chưa đọc + đang gửi... + Đang giải mã tin nhắn. Xin chờ... + Tin nhắn mã hoá bằng OpenPGP + Biệt danh đã được sử dụng + Quản trị viên + Chủ nhân + Điều phối viên + Thành viên + Khách + Bạn có muốn xoá %s khỏi danh sách bạn bè? Hội thoại gắn với liên hệ này sẽ không bị xoá. + Bạn có muốn chặn %s gửi tin nhắn cho bạn? + Bạn có muốn bỏ chặn %s và cho phép họ gửi tin nhắn cho bạn? + Chặn tất cả liên hệ từ %s? + Bỏ chặn tất cả liên hệ từ %s? + Đã chặn liên hệ + Bạn có muốn xoá đánh dấu %s? Hội thoại gắn với đánh dấu này sẽ không bị xoá. + Đăng ký tài khoản mới trên máy chủ + Đổi mật k trên máy chủ + Chia sẻ với... + Khởi chạy Conversation + Mời liên hệ + Danh bạ + Huỷ + Đặt + Thêm + Chỉnh sửa + Xoá + Chặn + Bỏ chặn + Lưu + OK + Conversations đã đột ngột dừng + Bằng việc gửi báo cáo hoạt động, bạn đang hỗ trợ nhóm phát triển của Conversations\nCảnh báo: Thao tác này sẽ sử dụng tài khoản XMPP của bạn để gửi báo cáo hoạt động đến nhà phát triển. + Gửi ngay + Đừng hỏi lại nữa + Không thể kết nối đến tài khoản + Không thể kết nối đến nhiều tài khoản + Chạm vào đây để quản lý các tài khoản + Đính kèm tập tin + Liên hệ này không có trong danh sách bạn bè. Bạn có muốn thêm nó vào? + Thêm liên hệ + thất bại khi chuyển + bị từ chối + Đang chuẩn bị hình để chuyển + Xoá lịch sử + Xoá lịch sử hội thoại + Bạn có muốn xoá toàn bộ tin nhắn trong hội thoại này?\n\nCảnh báo: Thao tác này sẽ không ảnh hưởng đến tin nhắn đã lưu trên các thiết bị hoặc máy chủ khác. + Xoá tin nhắn + Dừng hội thoại này sau đó + Chọn sự hiện diện đối với liên hệ + Gửi tin nhắn không mã hoá + Gửi tin nhắn mã hoá OTR + Gửi tin nhắn mã hoá OMEMO + Gửi tin nhắn mã hoá v\\OMEMO + Gửi tin nhắn mã hoá OpenPGP + Biệt danh của bạn đã được đổi + Gửi dạng không mã hoá + Giải mã thất bại. Có lẽ bạn không có đúng khoá cá nhân. + OpenKeychain + Conversations dùng ứng dụng bên thứ ba gọi là OpenKeychain để mã hoá và giải mã tin nhắn đồng thời quản lý khoá công cộng của bạn.\n\nOpenKeychain được cấp giấy phép GPLv3 và có thể tải về từ F-Droid cũng như Google Play.\n\n(Xin khởi chạy lại Conversations sau đó.) + Khởi chạy lại + Cài đặt + Xin cài đặt OpenKeychain + đang đề xuất... + đang chờ... + Không tìm thấy khoá OpenPGP + Conversations không thể mã hoá tin nhắn vì liên hệ của bạn không thông báo khoá công cộng của anh/chị ấy.\n\nHãy yêu cầu liên hệ đó cài đặt OpenPGP. + Không tìm thấy các khoá OpenPGP + Conversations không thể mã hoá tin nhắn vì các liên hệ của bạn không thông báo khoá công cộng của họ.\n\nHãy yêu cầu họ cài đặt OpenPGP. + Đã nhận tin nhắn được mã hoá. Chạm để giải mã. + Tổng quan + Ứng dụng XMPP + Tên của máy trạm này được tự đặt là + Chấp thuận các tập tin + Tự động chấp thuận các tập tin nhỏ hơn... + Cài đặt thông báo + Thông báo + Thông báo khi có tin nhắn mới + Rung + Rung khi có tin nhắn mới + Âm báo + Chơi nhạc chuông cùng với thông báo + Thời gian gia hạn thông báo + Tắt thông báo trong một thời gian ngắn sau khi nhận được bản sao giấy than + Tuỳ chọn nâng cao + Không bao giờ gửi báo cáo dừng chạy + Bằng việc gửi báo cáo hoạt động, bạn đang hỗ trợ nhóm phát triển của Conversations + Xác nhận tin nhắn + Báo cho liên hệ của bạn biết khi bạn đã nhận và đọc tin nhắn + Tuỳ chọn UI + OpenKeychain đã báo cáo một lỗi + Tập tin giải mã lỗi I/O + Chấp thuận + Đã có lỗi xảy ra + Trao quyền cập nhật hiện diện + Ưu tiên trao quyền và hỏi đăng ký hiện diện cho các liên hệ bạn đã tạo + Đăng ký + Tài khoản của bạn + Các khoá + Gửi cập nhật hiện diện + Nhận cập nhật hiện diện + Hỏi cập nhật hiện diện + Chọn hình + Chụp hình + Ưu tiên trao quyền yêu cầu đăng ký + Tập tin bạn chọn không phải là hình ảnh + Lỗi khi chuyển đổi tập tin hình ảnh + Không tìm thấy tập tin + Lỗi I/O tổng quát. Có lẽ đã hết dung lượng lưu trữ? + Ứng dụng mà bạn dùng để chọn hình này không cung cấp đủ quyền truy cập để đọc tập tin.\n\nHãy sử dụng trình quản lý tập tin khác để chọn hình + Không rõ + Tạm thời tắt + Trực tuyến + Đang kết nối\u2026 + Ngoại tuyến + Chưa xác minh + Không tìm thấy máy chủ + Không có kết nối mạng + Đăng ký thất bại + Tên người dùng đã được sử dụng + Đăng ký hoàn tất + Máy chủ không hỗ trợ việc đăng ký + Lỗi bảo mật + Máy chủ không tương thích + Không mã hoá + OTR + OpenPGP + OMEMO + Chỉnh sửa tài khoản + Xoá tài khoản + Tạm thời tắt + Đăng ảnh đại diện + Đăng khoá công cộng OpenPGP + Bật tài khoản + Bạn chắc chứ? + Nếu xoá tài khoản, toàn bộ lịch sử hội thoại của bạn sẽ bị mất + Ghi âm + ID Jabber + Mật khẩu + username@example.com + Xác nhận mật khẩu + Mật khẩu + Xác nhận mật khẩu + Mật khẩu không trùng khớp + ID Jabber này không hợp lệ + Hết bộ nhớ. Ảnh quá lớn + Bạn có muốn thêm %s vào danh bạ? + trực tuyến + rảnh để trò chuyện + vắng mặt + vắng mặt mở rộng + đừng làm phiền + ngoại tuyến + Diễn đàn + Các thành viên khác + Thông tin máy chủ + XEP-0313: MAM + XEP-0280: Message Carbons + XEP-0352: Biểu thị trạng thái máy trạm + XEP-0191: Blocking Command + XEP-0237: Phiên bản hoá danh sách bạn bè + XEP-0198: Stream Management + XEP-0163: PEP (Avatars / OMEMO) + XEP-0363: HTTP File Upload + sẵn sàng + không sẵn sàng + Thông báo khoá công cộng bị thất lạc + thấy lần cuối vừa đây + thấy lần cuối 1 phút trước + thấy lần cuối %d phút trước + thấy lần cuối 1 tiếng trước + thấy lần cuối %d tiếng trước + thấy lần cuối 1 ngày trước + thấy lần cuối %d ngày trước + chưa từng gặp + Tin nhắn được mã hoá. Xin cài đặt OpenKeychain để giải mã. + Dấu vân tay OTR lạ + Đã tìm thấy các tin nhắn mã hoá OpenPGP + Tiếp nhận thất bại + Dấu vân tay của bạn + Dấu vân tay OTR + Dấu vân tay OMEMO + Dấu vân tay v\\OMEMO + Dấu vân tay OMEMO của tin nhắn + Dấu vân tay v\\OMEMO của tin nhắn + Dấu vân tay OMEMO thiết bị + Các thiết bị khác + Tin tưởng các dấu vân tay OMEMO + Đang nhận khoá... + Xong + Xác minh + Giải mã + Các diễn đàn + Tìm kiếm + Tạo liên hệ + Nhập liên hệ + Tham gia diễn đàn + Xoá liên hệ + Xem chi tiết liên hệ + Chặn liên hệ + Bỏ chặn liên hệ + Tạo + Chọn + Đã có liên hệ này rồi + Tham gia + Địa chỉ diễn đàn + room@conference.example.com + Lưu thành đánh dấu + Xoá đánh dấu + Đã có đánh dấu này rồi + Bạn + Chỉnh sửa tiêu đề diễn đàn + Không tìm thấy diễn đàn + Rời khỏi + Liên hệ đã thêm bạn vào danh bạ + Thêm họ vào + %s đã đọc đến điểm này + Đăng + Chạm ảnh đại diện để chọn hình từ bộ sưu tập + Xin chú ý: Ai đã đăng ký nhận cập nhật hiện diện của bạn sẽ có quyền xem hình này. + Đang đăng... + Máy chủ đã từ chối đăng tải của bạn + Đã xảy ra lỗi khi chuyển đổi hình của bạn + Không thể lưu ảnh đại diện vào ổ đĩa + (Hoặc nhấn giữ để chuyển về mặc định) + Máy chủ của bạn không hỗ trợ việc đăng tải ảnh đại diện + đã thì thầm + đến %s + Gửi tin nhắn riêng tư đến %s + Kết nối + Đã có tài khoản này rồi + Tiếp theo + Đã thiết lập phiên hiện thời + Thông tin thêm + Bỏ qua + Tắt thông báo + Tắt thông báo cho hội thoại này + Bật + Diễn đàn yêu cầu mật khẩu + Nhập mật khẩu + Đang mất cập nhật hiện diện từ liên hệ + Xin yêu cầu cập nhật hiện diện từ liên hệ của bạn trước.\n\nNó sẽ được dùng để xác định (các) liên hệ hiện đang sử dụng máy trạm nào. + Yêu cầu ngay + Xoá dấu vân tay + Có chắc là bạn muốn xoá dấu vân tay này? + Bỏ qua + Cảnh báo: Gửi mà không có cập nhật hiện diện của nhau có thể gây ra vấn đề khó lường.\n\nVào chi tiết liên hệ để xác minh đăng ký hiện diện của bạn. + Cài đặt mã hoá + Bắt buộc mã hoá hai đầu + Luôn gửi tin nhắn được mã hoá (ngoại trừ trong diễn đàn) + Đừng lưu tin nhắn được mã hoá + Cảnh báo: Có thể làm mất tin nhắn + Tuỳ chọn chuyên sâu + Xin hãy cẩn trọng với chúng + Thông tin về Conversations + Thông tin bản dựng và giấy phép + Giờ yên lặng + Thời gian bắt đầu + Thời gian kết thúc + Bật giờ yên lặng + Thông báo sẽ được tắt trong giờ yên lặng + Tăng kích cỡ chữ + Dùng cỡ chữ lớn hơn trên toàn ứng dụng + Nút gửi biểu thị trạng thái + Yêu cầu thông báo nhận tin nhắn + Các tin nhắn đã nhận sẽ được đánh dấu kiểm màu xanh lá nếu được hỗ trợ + Tô màu nút gửi để biểu thị trạng thái của liên hệ + Khác + Tên diễn đàn + Dùng tiêu đề của phòng thay cho JID để định danh diễn đàn + Đã chép dấu vân tay OTR vào clipboard! + Đã chép dấu vân tay OMEMO vào clipboard! + Bạn đã bị cấm tham gia diễn đàn này + Diễn đàn này chỉ dành cho thành viên + Bạn đã bị đuổi khỏi diễn đàn này + đang dùng tài khoản %s + Đang kiểm tra %s trên máy chủ HTTTP + Bạn chưa kết nối mạng. Xin thử lại sau + Kiểm tra kích cỡ %s + Tuỳ chọn tin nhắn + Sao chép văn bản + Sao chép URL gốc + Gửi lại + URL tập tin + Văn bản tin nhắn + Đã chép URL vào clipboard + Đã chép tin nhắn vào clipboard + Thất bại khi chuyển hình + Quét mã QR + Hiện mã QR + Quét danh sách chặn + Chi tiết tài khoản + Xác minh OTR + Dấu vân tay từ xa + quét + Giao thức Socialist Millionaire + Gợi ý hoặc Câu hỏi + Bí mật đã chia sẻ + Xác nhận + Đang diễn ra + Hồi đáp + Đã thất bại + Bí mật không trùng khớp + Thử lại + Kết thúc + Đã xác minh! + Liên hệ đã yêu cầu xác minh SMP + Không tìm thấy phiên OTR hợp lệ nào! + Conversations + Giữ dịch vụ luôn chạy + Ngăn hệ điều hành ngắt kết nối của bạn + Xuất nhật ký + Chép nhật ký vào thẻ SD + Đang chép nhật ký vào thẻ SD + Chọn tập tin + Đang nhận %1$s (đã hoàn tất %2$d%%) + Tải về %s + tập tin + Mở %s + đang gửi (đã hoàn tất %1$d%%) + Đang chuẩn bị tập tin để chuyển + Đã đề xuất tải về %s + Huỷ chuyển tập tin + chuyển tập tin đã thất bại + Đã xoá tập tin + Không tìm thấy ứng dụng nào để mở tập tin + Không thể xác minh dấu vân tay + Xác minh thủ công + Có chắc là bạn muốn xác minh dấu vân tay OTR của liên hệ không? + Hiện các nhãn động + Hiện nhãn chỉ đọc bên dưới các liên hệ + Bật thông báo + Tạo diễn đàn với... + Không tìm thấy máy chủ diễn đàn nào + Tạo diễn đàn thất bại! + Đã tạo diễn đàn! + Đã chấp thuận bí mật! + Cài lại + Ảnh đại diện tài khoản + Sao chép dấu vân tay OTR vào clipboard + Sao chép dấu vân tay OMEMO vào clipboard + Tạo lại khoá OMEMO + Xoá các thiết bị khác khỏi PEP + Xoá các thiết bị + Có chắc là bạn muốn xoá toàn bộ các thiết bị khác khỏi thông báo OMEMO? Lần sau khi kết nối, các thiết bị sẽ tự thông báo lại nhưng có khả năng chúng sẽ không nhận được tin nhắn đã gửi trong khoảng thời gian đó. + Xoá khoá + Có chắc là bạn muốn xoá khoá này không? + Nó sẽ bị xem là hỏng mãi mãi và bạn sẽ không thể dựng một phiên khác với nó nữa. + Không có khoá nào dùng được cho liên hệ này.\nViệc nhận khoá mới từ máy chủ cũng thất bại. Có lẽ là máy chủ dành cho các liên hệ đã gặp sự cố gì đó. + Không còn khoá nào sẵn có cho liên hệ này. Nếu bạn đã xoá bất kỳ khoá nào, họ phải tạo khoá mới. + Lỗi + Đang nhận lịch sử từ máy chủ + Không còn lịch sử nào trên máy chủ + Đang cập nhật... + Đã đổi mật khẩu! + Không thể đổi mật khẩu + Gửi tin nhắn để bắt đầu chat có mã hoá + Đưa câu hỏi + Nếu bạn và liên hệ có một bí mật chung mà không ai khác biết (như là một câu nói đùa hoặc chỉ đơn giản là bữa trưa trong lần gặp gần đây nhất), bạn có thể dùng bí mật đó để xác minh dấu vân tay của nhau.\n\nBạn đưa ra gợi ý hoặc câu hỏi cho liên hệ và họ sẽ phải nhập câu trả lời có tính cả viết hoa viết thường. + Liên hệ muốn xác minh dấu vân tay của bạn bằng một bí mật đã chia sẻ. Liên hệ đã cung cấp gợi ý hoặc câu hỏi cho bí mật sau đây. + Không được để trống gợi ý + Không được để trống bí mật đã chia sẻ + So sánh cẩn thận dấu vân tay dưới đây với dấu của liên hệ.\nBạn có thể dùng bất kỳ phương tiện giao tiếp đáng tin cậy nào như email được mã hoá hoặc điện thoại để trao đổi vân tay. + Đổi mật khẩu + Mật khẩu hiện tại + Mật khẩu mới + Không được để trống mật khẩu + Bật toàn bộ tài khoản + Tắt toàn bộ tài khoản + Thực hiện thao tác với + Không có quan hệ gì + Không có phận sự gì + Kẻ bị ruồng bỏ + Thành viên + Chế độ nâng cao + Trao quyền thành viên + Huỷ quyền thành viên + Trao quyền quản trị + Huỷ quyền quản trị + Xoá khỏi diễn đàn + Không thể đổi mối quan hệ của %s + Cấm khỏi diễn đàn + Bạn đang cố loại bỏ %s ra khỏi một diễn đàn công cộng. Biện pháp duy nhất là cấm người dùng đó mãi mãi. + Cấm ngay + Không thể đổi phận sự của %s + Diễn đàn công cộng + Diễn đàn riêng, chỉ dành cho thành viên + Tuỳ chọn diễn đàn + Riêng, chỉ dành cho thành viên + Không ẩn danh + Đã điều phối + Hiện bạn chưa tham gia + Tuỳ chọn diễn đàn đã chỉnh sửa! + Không thể chỉnh sửa tuỳ chọn diễn đàn + Chưa từng + 30 phút + 1 tiếng + 2 tiếng + 8 tiếng + Cho đến thông báo tiếp theo + Tuỳ chọn nhập liệu + Bấm Enter để gửi + Bấm nút Enter để gửi tin nhắn + Hiện nút Enter + Đổi nút biểu tượng cảm xúc thành nút Enter + âm thanh + video + hình ảnh + tài liệu PDF + Ứng dụng Android + Liên hệ + Đã nhận %s + Tắt dịch vụ luôn chạy + Chạm để mở Conversations + Đã đăng tải ảnh đại diện! + Đang gửi %s + Đang đề xuất %s + Ẩn ngoại tuyến + Tắt tài khoản + %s đang gõ... + %s đã ngừng gõ + Thông báo đang gõ + Báo cho liên hệ biết khi bạn đang viết tin nhắn mới + Gửi vị trí + Hiện vị trí + Không thấy ứng dụng nào có thể hiện vị trí + Vị trí + Vị trí đã nhận + Đã đóng cuộc hội thoại + Đã rời khỏi diễn đàn + Đừng tin các CA hệ thống + Tất cả chứng nhận phải được phê duyệt thủ công + Xoá các chứng nhận + Xoá thủ công các chứng nhận đã phê duyệt + Không có chứng nhận được phê duyệt thủ công + Xoá các chứng nhận + Xoá lựa chọn + Huỷ + + Đã xoá %d chứng nhận + + + Chọn %d liên hệ + + Thay nút gửi với thao tác nhanh + Thao tác nhanh + Không có + Dùng gần đây nhất + Chọn thao tác nhanh + Tìm các liên hệ và nhóm + Gửi tin nhắn cá nhân + %s đã rời khỏi diễn đàn! + Tên người dùng + Tên người dùng + Đây không phải là tên người dùng hợp lệ + Tải xuống thất bại: Không thấy máy chủ + Tải xuống thất bại: Không thấy tập tin + Tải xuống thất bại: Không thể kết nối đến máy chủ + Dùng nền trắng + Hiện các tin nhắn nhận được dưới dạng chữ đen trên nền trắng + Mạng Tor chưa sẵn sàng + Bị hỏng + Cài đặt sự hiện diện + Vắng mặt khi màn hình tắt + Hiện ứng dụng là \'vắng mặt\' khi màn hình tắt + Không sẵn sàng trong chế độ yên lặng + Hiện ứng dụng là \'không sẵn sàng\' khi thiết bị ở chế độ yên lặng + Thêm tài khoản với chứng nhận + Không thể phân tích chứng nhận + Bỏ trống để xác minh với chứng nhận + Các ký tự xác minh + Yêu cầu hình xác minh + nhập văn bản từ hình + Chuỗi chứng nhận không được tin tưởng + ID Jabber không khớp với chứng nhận + Gia hạn chứng nhận + Lỗi nhập khoá OMEMO! + Khoá OMEMO đã xác minh với chứng nhận! + Thiết bị không hỗ trợ chọn lựa các chứng chỉ của máy trạm! + Tuỳ chọn hội thoại + Kết nối đến Tor + Chuyển toàn bộ kết nối thông qua mạng Tor. Cần có Orbot + Tên máy chủ + Cổng + Máy chủ- hoặc địa chỉ .onion- + Đây không phải là số cổng hợp lệ + Đây không phải là tên máy chủ hợp lệ + %1$d trên %2$d tài khoản đã kết nối + + %dv tin nhắn + + Chia sẻ tập tin với %s + Chia sẻ hình với %s + Conversations cần quyền truy cập ổ nhớ ngoài + Đồng bộ với danh bạ + Conversations muốn so sánh danh sách bạn bè XMPP với danh bạ của bạn để hiện tên đầy đủ và ảnh đại diện của họ.\n\nConversations sẽ chỉ đọc danh bạ và so sánh trên thiết bị chứ không tải lên máy chủ.\n\nBây giờ, bạn sẽ được hỏi trao quyền truy cập danh bạ. + Thông tin chứng nhận + Tiêu đề + Nhà phát hành + Tên thường + Tổ chức + SHA-1 + (Không sẵn sàng) + Không thấy chứng nhận nào + Thông báo tất cả tin nhắn + Thông báo chỉ khi được làm nổi bật + Đã tắt thông báo + Đã dừng thông báo + Nén hình ảnh + Sửa kích cỡ và các hình ảnh đã nén + Luôn luôn + Tự động + Đã bật tối ưu pin + Thiết bị đang thực hiện tối ưu hoá pin trên Conversations và nó có thể gây trì hoãn thông báo hay thậm chí làm mất tin nhắn.\nBạn nên tắt chế độ đó đi. + Thiết bị đang thực hiện tối ưu hoá pin trên Conversations và nó có thể gây trì hoãn thông báo hay thậm chí làm mất tin nhắn.\n\nBây giờ, bạn sẽ được yêu cầu tắt chế độ đó đi. + Tắt + Khu vực chọn quá lớn + -- cgit v1.2.3 From 32da65f910207f08f50b57ba59af9474eaad75d8 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 12 Feb 2016 11:39:27 +0100 Subject: client side support for XEP-0357: Push Notifications --- build.gradle | 37 +++++----- .../services/PushManagementService.java | 20 ++++++ src/main/java/eu/siacs/conversations/Config.java | 1 - .../siacs/conversations/generator/IqGenerator.java | 16 ++++- .../services/XmppConnectionService.java | 31 +++++++-- .../conversations/ui/EditAccountActivity.java | 13 ++++ .../siacs/conversations/xmpp/XmppConnection.java | 14 ++-- src/main/res/layout/activity_edit_account.xml | 23 ++++++- src/main/res/values/strings.xml | 1 + src/playstore/AndroidManifest.xml | 35 ++++++++++ .../conversations/services/InstanceIdService.java | 15 +++++ .../services/PushManagementService.java | 78 ++++++++++++++++++++++ .../services/PushMessageReceiver.java | 20 ++++++ 13 files changed, 267 insertions(+), 37 deletions(-) create mode 100644 src/free/java/eu/siacs/conversations/services/PushManagementService.java create mode 100644 src/playstore/AndroidManifest.xml create mode 100644 src/playstore/java/eu/siacs/conversations/services/InstanceIdService.java create mode 100644 src/playstore/java/eu/siacs/conversations/services/PushManagementService.java create mode 100644 src/playstore/java/eu/siacs/conversations/services/PushMessageReceiver.java diff --git a/build.gradle b/build.gradle index 85be3305..4221d44e 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:1.3.1' + classpath 'com.google.gms:google-services:1.5.0' } } @@ -21,12 +22,17 @@ allprojects { } apply plugin: 'com.android.application' +apply plugin: 'com.google.gms.google-services' repositories { jcenter() mavenCentral() } +configurations { + playstoreCompile +} + dependencies { compile project(':libs:MemorizingTrustManager') compile 'org.sufficientlysecure:openpgp-api:10.0' @@ -44,6 +50,7 @@ dependencies { compile 'com.kyleduo.switchbutton:library:1.2.8' compile 'org.whispersystems:axolotl-android:1.3.4' compile 'com.makeramen:roundedimageview:2.2.0' + playstoreCompile 'com.google.android.gms:play-services-gcm:8.3.0' } android { @@ -55,7 +62,7 @@ android { targetSdkVersion 23 versionCode 123 versionName "1.9.4" - project.ext.set(archivesBaseName, archivesBaseName + "-" + versionName); + archivesBaseName += "-$versionName" } compileOptions { @@ -63,15 +70,10 @@ android { targetCompatibility JavaVersion.VERSION_1_7 } - // - // To sign release builds, create the file `gradle.properties` in - // $HOME/.gradle or in your project directory with this content: - // - // mStoreFile=/path/to/key.store - // mStorePassword=xxx - // mKeyAlias=alias - // mKeyPassword=xxx - // + productFlavors { + playstore + free + } if (project.hasProperty('mStoreFile') && project.hasProperty('mStorePassword') && project.hasProperty('mKeyAlias') && @@ -89,16 +91,6 @@ android { buildTypes.release.signingConfig = null } - applicationVariants.all { variant -> - if (variant.name.equals('release')) { - variant.outputs.each { output -> - if (output.zipAlign != null) { - output.zipAlign.outputFile = new File(output.outputFile.parent, rootProject.name + "-${variant.versionName}.apk") - } - } - } - } - lintOptions { disable 'ExtraTranslation', 'MissingTranslation', 'InvalidPackage', 'MissingQuantity', 'AppCompatResource' } @@ -116,4 +108,9 @@ android { } } + + packagingOptions { + exclude 'META-INF/BCKEY.DSA' + exclude 'META-INF/BCKEY.SF' + } } diff --git a/src/free/java/eu/siacs/conversations/services/PushManagementService.java b/src/free/java/eu/siacs/conversations/services/PushManagementService.java new file mode 100644 index 00000000..48c576ce --- /dev/null +++ b/src/free/java/eu/siacs/conversations/services/PushManagementService.java @@ -0,0 +1,20 @@ +package eu.siacs.conversations.services; + +import eu.siacs.conversations.entities.Account; + +public class PushManagementService { + + protected final XmppConnectionService mXmppConnectionService; + + public PushManagementService(XmppConnectionService service) { + this.mXmppConnectionService = service; + } + + public void registerPushTokenOnServer(Account account) { + //stub implementation. only affects playstore flavor + } + + public boolean available() { + return false; + } +} diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 3d32a2cb..056dd7f0 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -109,6 +109,5 @@ public final class Config { }; private Config() { - } } diff --git a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java index 345f68ae..dc9472c5 100644 --- a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java @@ -289,7 +289,7 @@ public class IqGenerator extends AbstractGenerator { public IqPacket requestHttpUploadSlot(Jid host, DownloadableFile file, String mime) { IqPacket packet = new IqPacket(IqPacket.TYPE.GET); packet.setTo(host); - Element request = packet.addChild("request",Xmlns.HTTP_UPLOAD); + Element request = packet.addChild("request", Xmlns.HTTP_UPLOAD); request.addChild("filename").setContent(file.getName()); request.addChild("size").setContent(String.valueOf(file.getExpectedSize())); if (mime != null) { @@ -307,4 +307,18 @@ public class IqGenerator extends AbstractGenerator { return register; } + + public IqPacket pushTokenToAppServer(Jid appServer, String token, String deviceId) { + IqPacket packet = new IqPacket(IqPacket.TYPE.SET); + packet.setTo(appServer); + Element command = packet.addChild("command", "http://jabber.org/protocol/commands"); + command.setAttribute("node","register-push-gcm"); + command.setAttribute("action","execute"); + Data data = new Data(); + data.put("token", token); + data.put("device-id", deviceId); + data.submit(); + command.addChild(data); + return packet; + } } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 9c2aa50c..e985fe07 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -73,7 +73,6 @@ import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.entities.MucOptions; import eu.siacs.conversations.entities.MucOptions.OnRenameListener; import eu.siacs.conversations.entities.Presence; -import eu.siacs.conversations.entities.Presences; import eu.siacs.conversations.entities.Roster; import eu.siacs.conversations.entities.ServiceDiscoveryResult; import eu.siacs.conversations.entities.Transferable; @@ -127,6 +126,8 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa public static final String ACTION_TRY_AGAIN = "try_again"; public static final String ACTION_DISABLE_ACCOUNT = "disable_account"; private static final String ACTION_MERGE_PHONE_CONTACTS = "merge_phone_contacts"; + public static final String ACTION_GCM_TOKEN_REFRESH = "gcm_token_refresh"; + public static final String ACTION_GCM_MESSAGE_RECEIVED = "gcm_message_received"; private final SerialSingleThreadExecutor mFileAddingExecutor = new SerialSingleThreadExecutor(); private final SerialSingleThreadExecutor mDatabaseExecutor = new SerialSingleThreadExecutor(); private final IBinder mBinder = new XmppConnectionBinder(); @@ -198,6 +199,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa this); private AvatarService mAvatarService = new AvatarService(this); private MessageArchiveService mMessageArchiveService = new MessageArchiveService(this); + private PushManagementService mPushManagementService = new PushManagementService(this); private OnConversationUpdate mOnConversationUpdate = null; private final FileObserver fileObserver = new FileObserver( FileBackend.getConversationsImageDirectory()) { @@ -265,7 +267,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa private OnStatusChanged statusListener = new OnStatusChanged() { @Override - public void onStatusChanged(Account account) { + public void onStatusChanged(final Account account) { XmppConnection connection = account.getXmppConnection(); if (mOnAccountUpdate != null) { mOnAccountUpdate.onAccountUpdate(); @@ -296,6 +298,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } account.pendingConferenceJoins.clear(); scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode()); + + if (mPushManagementService.pushAvailable(account)) { + mPushManagementService.registerPushTokenOnServer(account); + } + } else if (account.getStatus() == Account.State.OFFLINE) { resetSendingToWaiting(account); if (!account.isOptionSet(Account.OPTION_DISABLED)) { @@ -512,6 +519,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa refreshAllPresences(); } break; + case ACTION_GCM_TOKEN_REFRESH: + refreshAllGcmTokens(); + break; + case ACTION_GCM_MESSAGE_RECEIVED: + Log.d(Config.LOGTAG,"gcm push message arrived in service. extras="+intent.getExtras()); } } this.wakeLock.acquire(); @@ -572,7 +584,6 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa reconnectAccount(account, true, interactive); } } - } if (mOnAccountUpdate != null) { mOnAccountUpdate.onAccountUpdate(); @@ -2845,6 +2856,14 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } } + private void refreshAllGcmTokens() { + for(Account account : getAccounts()) { + if (account.isOnlineAndConnected() && mPushManagementService.pushAvailable(account)) { + mPushManagementService.registerPushTokenOnServer(account); + } + } + } + public void sendOfflinePresence(final Account account) { sendPresencePacket(account, mPresenceGenerator.sendOfflinePresence(account)); } @@ -3005,7 +3024,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa databaseBackend.insertDiscoveryResult(disco); injectServiceDiscorveryResult(account.getRoster(), presence.getHash(), presence.getVer(), disco); } else { - Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": mismatch in caps for contact " + jid+" "+presence.getVer()+" vs "+disco.getVer()); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": mismatch in caps for contact " + jid + " " + presence.getVer() + " vs " + disco.getVer()); } } account.inProgressDiscoFetches.remove(key); @@ -3041,6 +3060,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa }); } + public PushManagementService getPushManagementService() { + return mPushManagementService; + } + public interface OnMamPreferencesFetched { void onPreferencesFetched(Element prefs); void onPreferencesFetchFailed(); diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java index d30fbda2..cfa1889a 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java @@ -29,6 +29,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TableLayout; +import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; @@ -77,6 +78,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate private TextView mServerInfoBlocking; private TextView mServerInfoPep; private TextView mServerInfoHttpUpload; + private TextView mServerInfoPush; private TextView mSessionEst; private TextView mOtrFingerprint; private TextView mAxolotlFingerprint; @@ -223,6 +225,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate } }; private Toast mFetchingMamPrefsToast; + private TableRow mPushRow; public void refreshUiReal() { invalidateOptionsMenu(); @@ -422,6 +425,8 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate this.mServerInfoSm = (TextView) findViewById(R.id.server_info_sm); this.mServerInfoPep = (TextView) findViewById(R.id.server_info_pep); this.mServerInfoHttpUpload = (TextView) findViewById(R.id.server_info_http_upload); + this.mPushRow = (TableRow) findViewById(R.id.push_row); + this.mServerInfoPush = (TextView) findViewById(R.id.server_info_push); this.mOtrFingerprint = (TextView) findViewById(R.id.otr_fingerprint); this.mOtrFingerprintBox = (RelativeLayout) findViewById(R.id.otr_fingerprint_box); this.mOtrFingerprintToClipboardButton = (ImageButton) findViewById(R.id.action_copy_to_clipboard); @@ -680,6 +685,14 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate } else { this.mServerInfoHttpUpload.setText(R.string.server_info_unavailable); } + + this.mPushRow.setVisibility(xmppConnectionService.getPushManagementService().available() ? View.VISIBLE : View.GONE); + + if (features.push()) { + this.mServerInfoPush.setText(R.string.server_info_available); + } else { + this.mServerInfoPush.setText(R.string.server_info_unavailable); + } final String otrFingerprint = this.mAccount.getOtrFingerprint(); if (otrFingerprint != null) { this.mOtrFingerprintBox.setVisibility(View.VISIBLE); diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 8b7eae39..3a9c87a3 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -1495,17 +1495,13 @@ public class XmppConnection implements Runnable { } public boolean mam() { - if (hasDiscoFeature(account.getJid().toBareJid(), "urn:xmpp:mam:0")) { - return true; - } else { - return hasDiscoFeature(account.getServer(), "urn:xmpp:mam:0"); - } + return hasDiscoFeature(account.getJid().toBareJid(), "urn:xmpp:mam:0") + || hasDiscoFeature(account.getServer(), "urn:xmpp:mam:0"); } - public boolean advancedStreamFeaturesLoaded() { - synchronized (XmppConnection.this.disco) { - return disco.containsKey(account.getServer()); - } + public boolean push() { + return hasDiscoFeature(account.getJid().toBareJid(), "urn:xmpp:push:0") + || hasDiscoFeature(account.getServer(), "urn:xmpp:push:0"); } public boolean rosterVersioning() { diff --git a/src/main/res/layout/activity_edit_account.xml b/src/main/res/layout/activity_edit_account.xml index ed935819..d308b4ce 100644 --- a/src/main/res/layout/activity_edit_account.xml +++ b/src/main/res/layout/activity_edit_account.xml @@ -399,6 +399,26 @@ android:textSize="?attr/TextSizeBody" tools:ignore="RtlHardcoded"/> + + + + + + @@ -416,8 +436,7 @@ android:layout_height="wrap_content" android:layout_gravity="right" android:textColor="@color/black87" - android:textSize="?attr/TextSizeBody" - tools:ignore="RtlHardcoded"/> + android:textSize="?attr/TextSizeBody"/> diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 8da14a4a..0b726ae7 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -193,6 +193,7 @@ XEP-0198: Stream Management XEP-0163: PEP (Avatars / OMEMO) XEP-0363: HTTP File Upload + XEP-0357: Push available unavailable Missing public key announcements diff --git a/src/playstore/AndroidManifest.xml b/src/playstore/AndroidManifest.xml new file mode 100644 index 00000000..a1b91be3 --- /dev/null +++ b/src/playstore/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/playstore/java/eu/siacs/conversations/services/InstanceIdService.java b/src/playstore/java/eu/siacs/conversations/services/InstanceIdService.java new file mode 100644 index 00000000..dc080430 --- /dev/null +++ b/src/playstore/java/eu/siacs/conversations/services/InstanceIdService.java @@ -0,0 +1,15 @@ +package eu.siacs.conversations.services; + +import android.content.Intent; + +import com.google.android.gms.iid.InstanceIDListenerService; + +public class InstanceIdService extends InstanceIDListenerService { + + @Override + public void onTokenRefresh() { + Intent intent = new Intent(this, XmppConnectionService.class); + intent.setAction(XmppConnectionService.ACTION_GCM_TOKEN_REFRESH); + startService(intent); + } +} diff --git a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java new file mode 100644 index 00000000..d65170ee --- /dev/null +++ b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java @@ -0,0 +1,78 @@ +package eu.siacs.conversations.services; + +import android.provider.Settings; +import android.util.Log; + +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; +import com.google.android.gms.gcm.GoogleCloudMessaging; +import com.google.android.gms.iid.InstanceID; + +import java.io.IOException; + +import eu.siacs.conversations.Config; +import eu.siacs.conversations.R; +import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.xmpp.OnIqPacketReceived; +import eu.siacs.conversations.xmpp.jid.InvalidJidException; +import eu.siacs.conversations.xmpp.jid.Jid; +import eu.siacs.conversations.xmpp.stanzas.IqPacket; + +public class PushManagementService { + + private static final String APP_SERVER = "push.conversations.im"; + + protected final XmppConnectionService mXmppConnectionService; + + public PushManagementService(XmppConnectionService service) { + this.mXmppConnectionService = service; + } + + public void registerPushTokenOnServer(final Account account) { + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": has push support"); + retrieveGcmInstanceToken(new OnGcmInstanceTokenRetrieved() { + @Override + public void onGcmInstanceTokenRetrieved(String token) { + try { + final String deviceId = Settings.Secure.getString(mXmppConnectionService.getContentResolver(), Settings.Secure.ANDROID_ID); + IqPacket packet = mXmppConnectionService.getIqGenerator().pushTokenToAppServer(Jid.fromString(APP_SERVER), token, deviceId); + mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() { + @Override + public void onIqPacketReceived(Account account, IqPacket packet) { + Log.d(Config.LOGTAG, "push to app server result: " + packet.toString()); + } + }); + } catch (InvalidJidException ignored) { + + } + } + }); + } + + private void retrieveGcmInstanceToken(final OnGcmInstanceTokenRetrieved instanceTokenRetrieved) { + new Thread(new Runnable() { + @Override + public void run() { + InstanceID instanceID = InstanceID.getInstance(mXmppConnectionService); + try { + String token = instanceID.getToken(mXmppConnectionService.getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); + instanceTokenRetrieved.onGcmInstanceTokenRetrieved(token); + } catch (IOException e) { + } + } + }).start(); + + } + + public boolean available() { + return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mXmppConnectionService) == ConnectionResult.SUCCESS; + } + + public boolean pushAvailable(Account account) { + return account.getXmppConnection().getFeatures().push() && available(); + } + + interface OnGcmInstanceTokenRetrieved { + void onGcmInstanceTokenRetrieved(String token); + } +} diff --git a/src/playstore/java/eu/siacs/conversations/services/PushMessageReceiver.java b/src/playstore/java/eu/siacs/conversations/services/PushMessageReceiver.java new file mode 100644 index 00000000..37c95e13 --- /dev/null +++ b/src/playstore/java/eu/siacs/conversations/services/PushMessageReceiver.java @@ -0,0 +1,20 @@ +package eu.siacs.conversations.services; + +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; + +import com.google.android.gms.gcm.GcmListenerService; + +import eu.siacs.conversations.Config; + +public class PushMessageReceiver extends GcmListenerService { + + @Override + public void onMessageReceived(String from, Bundle data) { + Intent intent = new Intent(this, XmppConnectionService.class); + intent.setAction(XmppConnectionService.ACTION_GCM_MESSAGE_RECEIVED); + intent.replaceExtras(data); + startService(intent); + } +} -- cgit v1.2.3 From bac249c8ddb4d1406e3910a7f36b6c07297d8fca Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 12 Feb 2016 12:06:35 +0100 Subject: add play services to travis config --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 2930c250..0b3dd195 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,3 +11,7 @@ android: - build-tools-19.1.0 - android-23 - extra-android-m2repository + - extra-google-m2repository + - extra-google-google_play_services + licenses: + - '.+' -- cgit v1.2.3 From c430848adedabfd8d2cd05bc12a5888ab8d92bcf Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 12 Feb 2016 23:37:42 +0100 Subject: push gcm token on bind instead of every connect --- .../eu/siacs/conversations/services/XmppConnectionService.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index e985fe07..69a59aa0 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -259,6 +259,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa fetchRosterFromServer(account); fetchBookmarks(account); sendPresence(account); + if (mPushManagementService.pushAvailable(account)) { + mPushManagementService.registerPushTokenOnServer(account); + } mMessageArchiveService.executePendingQueries(account); connectMultiModeConversations(account); syncDirtyContacts(account); @@ -298,11 +301,6 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } account.pendingConferenceJoins.clear(); scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode()); - - if (mPushManagementService.pushAvailable(account)) { - mPushManagementService.registerPushTokenOnServer(account); - } - } else if (account.getStatus() == Account.State.OFFLINE) { resetSendingToWaiting(account); if (!account.isOptionSet(Account.OPTION_DISABLED)) { -- cgit v1.2.3 From 6217e33a8766650c94014b4c436a29ac1372c795 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 12 Feb 2016 23:38:30 +0100 Subject: removed gcm plugin from gradle. fixes #1693 --- build.gradle | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 4221d44e..34d63dfa 100644 --- a/build.gradle +++ b/build.gradle @@ -6,8 +6,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.1' - classpath 'com.google.gms:google-services:1.5.0' + classpath 'com.android.tools.build:gradle:1.5.0' } } @@ -22,7 +21,6 @@ allprojects { } apply plugin: 'com.android.application' -apply plugin: 'com.google.gms.google-services' repositories { jcenter() @@ -37,7 +35,7 @@ dependencies { compile project(':libs:MemorizingTrustManager') compile 'org.sufficientlysecure:openpgp-api:10.0' compile 'com.soundcloud.android:android-crop:1.0.1@aar' - compile 'com.android.support:support-v13:23.0.1' + compile 'com.android.support:support-v13:23.1.1' compile 'org.bouncycastle:bcprov-jdk15on:1.52' compile 'org.bouncycastle:bcmail-jdk15on:1.52' compile 'org.jitsi:org.otr4j:0.22' -- cgit v1.2.3 From c7a14092a818262b8479a5bfff45c45689f6e755 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 13 Feb 2016 00:03:57 +0100 Subject: fixed compile bug in free version --- .../siacs/conversations/services/PushManagementService.java | 2 +- .../siacs/conversations/services/XmppConnectionService.java | 4 ++-- .../java/eu/siacs/conversations/ui/EditAccountActivity.java | 2 +- .../siacs/conversations/services/PushManagementService.java | 11 ++++++----- src/playstore/res/values/gcm.xml | 5 +++++ 5 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 src/playstore/res/values/gcm.xml diff --git a/src/free/java/eu/siacs/conversations/services/PushManagementService.java b/src/free/java/eu/siacs/conversations/services/PushManagementService.java index 48c576ce..ff97a5fb 100644 --- a/src/free/java/eu/siacs/conversations/services/PushManagementService.java +++ b/src/free/java/eu/siacs/conversations/services/PushManagementService.java @@ -14,7 +14,7 @@ public class PushManagementService { //stub implementation. only affects playstore flavor } - public boolean available() { + public boolean available(Account account) { return false; } } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 69a59aa0..3ca235ef 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -259,7 +259,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa fetchRosterFromServer(account); fetchBookmarks(account); sendPresence(account); - if (mPushManagementService.pushAvailable(account)) { + if (mPushManagementService.available(account)) { mPushManagementService.registerPushTokenOnServer(account); } mMessageArchiveService.executePendingQueries(account); @@ -2856,7 +2856,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa private void refreshAllGcmTokens() { for(Account account : getAccounts()) { - if (account.isOnlineAndConnected() && mPushManagementService.pushAvailable(account)) { + if (account.isOnlineAndConnected() && mPushManagementService.available(account)) { mPushManagementService.registerPushTokenOnServer(account); } } diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java index cfa1889a..9b6e4076 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java @@ -686,7 +686,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate this.mServerInfoHttpUpload.setText(R.string.server_info_unavailable); } - this.mPushRow.setVisibility(xmppConnectionService.getPushManagementService().available() ? View.VISIBLE : View.GONE); + this.mPushRow.setVisibility(xmppConnectionService.getPushManagementService().available(mAccount) ? View.VISIBLE : View.GONE); if (features.push()) { this.mServerInfoPush.setText(R.string.server_info_available); diff --git a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java index d65170ee..68e824cb 100644 --- a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java +++ b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java @@ -20,7 +20,7 @@ import eu.siacs.conversations.xmpp.stanzas.IqPacket; public class PushManagementService { - private static final String APP_SERVER = "push.conversations.im"; + private static final String APP_SERVER = "push.siacs.eu"; protected final XmppConnectionService mXmppConnectionService; @@ -64,12 +64,13 @@ public class PushManagementService { } - public boolean available() { - return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mXmppConnectionService) == ConnectionResult.SUCCESS; + + public boolean available(Account account) { + return account.getXmppConnection().getFeatures().push() && playServicesAvailable(); } - public boolean pushAvailable(Account account) { - return account.getXmppConnection().getFeatures().push() && available(); + private boolean playServicesAvailable() { + return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mXmppConnectionService) == ConnectionResult.SUCCESS; } interface OnGcmInstanceTokenRetrieved { diff --git a/src/playstore/res/values/gcm.xml b/src/playstore/res/values/gcm.xml new file mode 100644 index 00000000..ee780d77 --- /dev/null +++ b/src/playstore/res/values/gcm.xml @@ -0,0 +1,5 @@ + + + 159709679736 + 1:159709679736:android:a61b47ae910a1ad7 + -- cgit v1.2.3 From 6f9f87192867d676890fed0221fb4279ac9375ec Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 13 Feb 2016 14:20:07 +0100 Subject: send push enable to server. simplified logging --- .../conversations/generator/AbstractGenerator.java | 2 ++ .../siacs/conversations/generator/IqGenerator.java | 13 ++++++++ .../eu/siacs/conversations/xmpp/forms/Data.java | 9 ++++-- .../services/PushManagementService.java | 36 +++++++++++++++++++++- 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java index 5741af53..d5059605 100644 --- a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java @@ -15,6 +15,8 @@ import java.util.TimeZone; import eu.siacs.conversations.crypto.axolotl.AxolotlService; import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.utils.PhoneHelper; +import eu.siacs.conversations.xmpp.jid.Jid; +import eu.siacs.conversations.xmpp.stanzas.IqPacket; public abstract class AbstractGenerator { private final String[] FEATURES = { diff --git a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java index dc9472c5..258897a1 100644 --- a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java @@ -25,6 +25,7 @@ import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.utils.Xmlns; import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xmpp.forms.Data; +import eu.siacs.conversations.xmpp.forms.Field; import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.pep.Avatar; import eu.siacs.conversations.xmpp.stanzas.IqPacket; @@ -321,4 +322,16 @@ public class IqGenerator extends AbstractGenerator { command.addChild(data); return packet; } + + public IqPacket enablePush(Jid jid, String node, String secret) { + IqPacket packet = new IqPacket(IqPacket.TYPE.SET); + Element enable = packet.addChild("enable","urn:xmpp:push:0"); + enable.setAttribute("jid",jid.toString()); + enable.setAttribute("node", node); + Data data = new Data(); + data.setFormType("http://jabber.org/protocol/pubsub#publish-options"); + data.put("secret",secret); + enable.addChild(data); + return packet; + } } diff --git a/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java b/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java index 50a41892..380f0280 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java +++ b/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java @@ -80,8 +80,13 @@ public class Data extends Element { } public String getFormType() { - Field typeFiled = this.getFieldByName("FORM_TYPE"); - return typeFiled == null ? "" : typeFiled.getValue(); + String type = getValue("FORM_TYPE"); + return type == null ? "" : type; + } + + public String getValue(String name) { + Field field = this.getFieldByName(name); + return field == null ? null : field.getValue(); } public String getTitle() { diff --git a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java index 68e824cb..f613fe5b 100644 --- a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java +++ b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java @@ -13,7 +13,9 @@ import java.io.IOException; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xmpp.OnIqPacketReceived; +import eu.siacs.conversations.xmpp.forms.Data; import eu.siacs.conversations.xmpp.jid.InvalidJidException; import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.stanzas.IqPacket; @@ -39,7 +41,25 @@ public class PushManagementService { mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - Log.d(Config.LOGTAG, "push to app server result: " + packet.toString()); + Element command = packet.findChild("command","http://jabber.org/protocol/commands"); + if (packet.getType() == IqPacket.TYPE.RESULT && command != null) { + Element x = command.findChild("x","jabber:x:data"); + if (x != null) { + Data data = Data.parse(x); + try { + String node = data.getValue("node"); + String secret = data.getValue("secret"); + Jid jid = Jid.fromString(data.getValue("jid")); + if (node != null && secret != null) { + enablePushOnServer(account, jid, node, secret); + } + } catch (InvalidJidException e) { + e.printStackTrace(); + } + } + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": invalid response from app server"); + } } }); } catch (InvalidJidException ignored) { @@ -49,6 +69,20 @@ public class PushManagementService { }); } + private void enablePushOnServer(final Account account, final Jid jid, final String node, final String secret) { + IqPacket enable = mXmppConnectionService.getIqGenerator().enablePush(jid, node, secret); + mXmppConnectionService.sendIqPacket(account, enable, new OnIqPacketReceived() { + @Override + public void onIqPacketReceived(Account account, IqPacket packet) { + if (packet.getType() == IqPacket.TYPE.RESULT) { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": successfully enabled push on server"); + } else if (packet.getType() == IqPacket.TYPE.ERROR) { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": enabling push on server failed"); + } + } + }); + } + private void retrieveGcmInstanceToken(final OnGcmInstanceTokenRetrieved instanceTokenRetrieved) { new Thread(new Runnable() { @Override -- cgit v1.2.3 From 251f2479c2df4510690a8ef4be9d4b7d2b9e04f7 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 14 Feb 2016 13:20:23 +0100 Subject: optional mode to close tcp connection when going into background acts only when push is available. disable all non-push accounts to test properly --- src/main/java/eu/siacs/conversations/Config.java | 2 + .../services/XmppConnectionService.java | 32 ++++++++---- .../siacs/conversations/xmpp/XmppConnection.java | 58 ++++++++++++++-------- 3 files changed, 63 insertions(+), 29 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 056dd7f0..4d64c3aa 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -31,6 +31,8 @@ public final class Config { public static final int CARBON_GRACE_PERIOD = 90; public static final int MINI_GRACE_PERIOD = 750; + public static final boolean CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND = false; + public static final int AVATAR_SIZE = 192; public static final Bitmap.CompressFormat AVATAR_FORMAT = Bitmap.CompressFormat.WEBP; diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 3ca235ef..16d7f139 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -303,7 +303,12 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode()); } else if (account.getStatus() == Account.State.OFFLINE) { resetSendingToWaiting(account); - if (!account.isOptionSet(Account.OPTION_DISABLED)) { + final boolean disabled = account.isOptionSet(Account.OPTION_DISABLED); + final boolean pushMode = Config.CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND + && mPushManagementService.available(account) + && checkListeners(); + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": push mode "+Boolean.toString(pushMode)); + if (!disabled && !pushMode) { int timeToReconnect = mRandom.nextInt(20) + 10; scheduleWakeUpCall(timeToReconnect, account.getUuid().hashCode()); } @@ -469,6 +474,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa final String action = intent == null ? null : intent.getAction(); boolean interactive = false; if (action != null) { + Log.d(Config.LOGTAG,"start reason: "+action); switch (action) { case ConnectivityManager.CONNECTIVITY_ACTION: if (hasInternetConnection() && Config.RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE) { @@ -762,18 +768,20 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa disconnect(account, false); } }).start(); - + cancelWakeUpCall(account.getUuid().hashCode()); } } - Context context = getApplicationContext(); - AlarmManager alarmManager = (AlarmManager) context - .getSystemService(Context.ALARM_SERVICE); - Intent intent = new Intent(context, EventReceiver.class); - alarmManager.cancel(PendingIntent.getBroadcast(context, 0, intent, 0)); Log.d(Config.LOGTAG, "good bye"); stopSelf(); } + private void cancelWakeUpCall(int requestCode) { + final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + final Intent intent = new Intent(this, EventReceiver.class); + intent.setAction("ping"); + alarmManager.cancel(PendingIntent.getBroadcast(this, requestCode, intent, 0)); + } + public void scheduleWakeUpCall(int seconds, int requestCode) { final long timeToWake = SystemClock.elapsedRealtime() + (seconds < 0 ? 1 : seconds + 1) * 1000; @@ -1719,8 +1727,14 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa for (Account account : getAccounts()) { if (account.getStatus() == Account.State.ONLINE) { XmppConnection connection = account.getXmppConnection(); - if (connection != null && connection.getFeatures().csi()) { - connection.sendInactive(); + if (connection != null) { + if (connection.getFeatures().csi()) { + connection.sendInactive(); + } + if (Config.CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND && mPushManagementService.available(account)) { + connection.waitForPush(); + cancelWakeUpCall(account.getUuid().hashCode()); + } } } } diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 3a9c87a3..889457ff 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -61,7 +61,6 @@ import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.entities.ServiceDiscoveryResult; import eu.siacs.conversations.generator.IqGenerator; import eu.siacs.conversations.services.XmppConnectionService; -import eu.siacs.conversations.utils.CryptoHelper; import eu.siacs.conversations.utils.DNSHelper; import eu.siacs.conversations.utils.SSLSocketHelper; import eu.siacs.conversations.utils.SocksSocketFactory; @@ -352,13 +351,7 @@ public class XmppConnection implements Runnable { this.changeStatus(Account.State.OFFLINE); this.attempt--; //don't count attempt when reconnecting instantly anyway } finally { - if (socket != null) { - try { - socket.close(); - } catch (IOException e) { - - } - } + forceCloseSocket(); if (wakeLock.isHeld()) { try { wakeLock.release(); @@ -430,13 +423,7 @@ public class XmppConnection implements Runnable { @Override public void run() { - try { - if (socket != null) { - socket.close(); - } - } catch (final IOException ignored) { - - } + forceCloseSocket(); connect(); } @@ -1283,14 +1270,45 @@ public class XmppConnection implements Runnable { } } - public void disconnect(final boolean force) { - Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": disconnecting force="+Boolean.valueOf(force)); - if (force) { + public void waitForPush() { + if (tagWriter.isActive()) { + tagWriter.finish(); + new Thread(new Runnable() { + @Override + public void run() { + try { + while(!tagWriter.finished()) { + Thread.sleep(10); + } + socket.close(); + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": closed tcp without closing stream"); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } else { + forceCloseSocket(); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": closed tcp without closing stream (no waiting)"); + } + } + + private void forceCloseSocket() { + if (socket != null) { try { socket.close(); - } catch(Exception e) { - Log.d(Config.LOGTAG,account.getJid().toBareJid().toString()+": exception during force close ("+e.getMessage()+")"); + } catch (IOException e) { + e.printStackTrace(); } + } + } + + public void disconnect(final boolean force) { + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": disconnecting force="+Boolean.valueOf(force)); + if (force) { + forceCloseSocket(); return; } else { if (tagWriter.isActive()) { -- cgit v1.2.3 From 300326fba3a63fce546d952ac455758ed2cbeca0 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 14 Feb 2016 14:14:53 +0100 Subject: deleted invalid gcm strings --- src/playstore/res/values/gcm.xml | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 src/playstore/res/values/gcm.xml diff --git a/src/playstore/res/values/gcm.xml b/src/playstore/res/values/gcm.xml deleted file mode 100644 index ee780d77..00000000 --- a/src/playstore/res/values/gcm.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 159709679736 - 1:159709679736:android:a61b47ae910a1ad7 - -- cgit v1.2.3 From 92a6e956fd90c71091c9d8348804e5f285382f32 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 14 Feb 2016 15:36:37 +0100 Subject: be more carefull when checking push availability --- .../java/eu/siacs/conversations/services/PushManagementService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java index f613fe5b..fbd768cf 100644 --- a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java +++ b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java @@ -15,6 +15,7 @@ import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xmpp.OnIqPacketReceived; +import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.forms.Data; import eu.siacs.conversations.xmpp.jid.InvalidJidException; import eu.siacs.conversations.xmpp.jid.Jid; @@ -100,7 +101,8 @@ public class PushManagementService { public boolean available(Account account) { - return account.getXmppConnection().getFeatures().push() && playServicesAvailable(); + final XmppConnection connection = account.getXmppConnection(); + return connection != null && connection.getFeatures().push() && playServicesAvailable(); } private boolean playServicesAvailable() { -- cgit v1.2.3 From 356199978eaef303cef7faa90280dafb0425af71 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 14 Feb 2016 18:19:11 +0100 Subject: fixed server info push not showing up when unavailable --- .../eu/siacs/conversations/services/PushManagementService.java | 4 ++++ src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java | 4 ++-- .../eu/siacs/conversations/services/PushManagementService.java | 8 ++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/free/java/eu/siacs/conversations/services/PushManagementService.java b/src/free/java/eu/siacs/conversations/services/PushManagementService.java index ff97a5fb..c6c5d232 100644 --- a/src/free/java/eu/siacs/conversations/services/PushManagementService.java +++ b/src/free/java/eu/siacs/conversations/services/PushManagementService.java @@ -17,4 +17,8 @@ public class PushManagementService { public boolean available(Account account) { return false; } + + public boolean isStub() { + return true; + } } diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java index 9b6e4076..2656966b 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java @@ -686,9 +686,9 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate this.mServerInfoHttpUpload.setText(R.string.server_info_unavailable); } - this.mPushRow.setVisibility(xmppConnectionService.getPushManagementService().available(mAccount) ? View.VISIBLE : View.GONE); + this.mPushRow.setVisibility(xmppConnectionService.getPushManagementService().isStub() ? View.GONE : View.VISIBLE); - if (features.push()) { + if (xmppConnectionService.getPushManagementService().available(mAccount)) { this.mServerInfoPush.setText(R.string.server_info_available); } else { this.mServerInfoPush.setText(R.string.server_info_unavailable); diff --git a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java index fbd768cf..3fdaf832 100644 --- a/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java +++ b/src/playstore/java/eu/siacs/conversations/services/PushManagementService.java @@ -76,9 +76,9 @@ public class PushManagementService { @Override public void onIqPacketReceived(Account account, IqPacket packet) { if (packet.getType() == IqPacket.TYPE.RESULT) { - Log.d(Config.LOGTAG,account.getJid().toBareJid()+": successfully enabled push on server"); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": successfully enabled push on server"); } else if (packet.getType() == IqPacket.TYPE.ERROR) { - Log.d(Config.LOGTAG,account.getJid().toBareJid()+": enabling push on server failed"); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": enabling push on server failed"); } } }); @@ -109,6 +109,10 @@ public class PushManagementService { return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(mXmppConnectionService) == ConnectionResult.SUCCESS; } + public boolean isStub() { + return false; + } + interface OnGcmInstanceTokenRetrieved { void onGcmInstanceTokenRetrieved(String token); } -- cgit v1.2.3 From 8ccb2005b325d1d26d74c682574008553b6879ad Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 14 Feb 2016 23:53:17 +0100 Subject: only show load more messages button when mam is available also update ui after that button has been pressed. fixes #1695 --- src/main/java/eu/siacs/conversations/ui/ConversationActivity.java | 1 + src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index 97774650..5ec2dc97 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -1606,6 +1606,7 @@ public class ConversationActivity extends XmppActivity public void setMessagesLoaded() { if (mConversationFragment != null) { mConversationFragment.setMessagesLoaded(); + mConversationFragment.updateMessages(); } } } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 5874adae..c555ead0 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -62,6 +62,7 @@ import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureClicked; import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureLongClicked; import eu.siacs.conversations.utils.GeoHelper; import eu.siacs.conversations.utils.UIHelper; +import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.chatstate.ChatState; import eu.siacs.conversations.xmpp.jid.Jid; @@ -1014,7 +1015,10 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa protected void updateStatusMessages() { synchronized (this.messageList) { - if (conversation.getLastClearHistory() != 0) { + final XmppConnection connection = conversation.getAccount().getXmppConnection(); + if (conversation.getLastClearHistory() != 0 + && connection != null + && connection.getFeatures().mam()) { this.messageList.add(0, Message.createLoadMoreMessage(conversation)); } if (conversation.getMode() == Conversation.MODE_SINGLE) { -- cgit v1.2.3 From c3f0503a916514dd6c95e249905cea7bc8103b9a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 15 Feb 2016 12:35:35 +0100 Subject: pulled translations from transifex --- src/main/res/values-bg/strings.xml | 12 + src/main/res/values-de/strings.xml | 12 + src/main/res/values-es/strings.xml | 26 +- src/main/res/values-eu/strings.xml | 3 +- src/main/res/values-fr/strings.xml | 2 +- src/main/res/values-ja/strings.xml | 12 + src/main/res/values-pt-rBR/strings.xml | 550 +++++++++++++++++++++++++++++++++ src/main/res/values-ro-rRO/strings.xml | 12 + src/main/res/values-sv/strings.xml | 12 + src/main/res/values-tr-rTR/strings.xml | 12 + src/main/res/values-zh-rCN/strings.xml | 12 + 11 files changed, 656 insertions(+), 9 deletions(-) create mode 100644 src/main/res/values-pt-rBR/strings.xml diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index 01d019a6..b87de768 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -240,6 +240,7 @@ Вие Редактиране на темата на беседата Беседата не е открита + Беше получена непозната грешка Напускане Контактът е добавен във Вашия списък от контакти Добавяне обратно @@ -297,6 +298,8 @@ Други Име на беседата Използване на темата на стаята вместо JID идентификатора за беседите + Автоматично присъединяване към беседите + Спазване на флага за автоматично присъединяване в отметките на беседите Отпечатъкът OTR е копиран! Отпечатъкът OMEMO е копиран! Достъпът Ви до тази беседа беше забранен @@ -496,9 +499,15 @@ Преминава в състояние „отсъстващ“ когато екранът бъде изключен Недостъпен, в тих режим Преминава в състояние „недостъпен“ когато устройството е в тих режим + Разширени настройки на връзката + Показване на настройките за сървър и порт при установка на профил + xmpp.example.com Добавяне на профил със сертификат Неуспешно прочитане на сертификата Оставете празно за удостоверяване със сертификат + Настройки за архивирането + Получаване на настройките за архивирането. Моля, изчакайте… + Неуспешно получаване на настройките за архивирането Текст за проверка Проверката е задължителна въведете текста от изображението @@ -521,6 +530,7 @@ %d съобщение %d съобщения + Зареждане на още съобщения Файлът е споделен с %s Изображението е споделено с %s Conversations се нуждае от достъп до външно място за съхранение @@ -547,4 +557,6 @@ Устройството Ви прилага сериозни оптимизации за използването на батерията върху Conversations, а те може да доведат до забавени известия и дори пропуснати съобщения.\n\nСега ще Ви бъде предложено да ги изключите. Изключване Избраната област е твърде голяма + (Няма активирани профили) + Това поле е задължително diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 5b89e0e5..c7afc348 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -240,6 +240,7 @@ Du Konferenz-Thema bearbeiten Konferenz nicht gefunden + Unbekannter Fehler Verlassen Der Kontakt hat dich zur Kontaktliste hinzugefügt Auch hinzufügen @@ -297,6 +298,8 @@ Sonstiges Konferenz-Name Konferenz-Thema statt Raum-JID als Namen verwenden + Unterhaltung automatisch beitreten + Autojoin Flag in Unterhaltungslesezeichen beachten OTR-Fingerabdruck in die Zwischenablage kopiert! OMEMO-Fingerabdruck in die Zwischenablage kopiert! Du wurdest von der Konferenz ausgeschlossen @@ -496,9 +499,15 @@ Setzt deinen Status auf \"abwesend\", solange dein Bildschirm abgeschaltet ist Nicht verfügbar bei Stummschaltung Setzt deinen Status auf \"nicht verfügbar\", solange dein Telefon lautlos ist + Erweiterte Verbindungs-Optionen + Zeige Hostname- und Port-Optionen + xmpp.domain.de Konto mit Zertifikat hinzufügen Zertifikat kann nicht gelesen werden Leer lassen, um mit Zertifikat anzumelden + Archivierungseinstellungen + Archivierungseinstellungen werden abgerufen. Bitte warten ... + Archivierungseinstellungen konnten nicht abgerufen werden Captcha Text Captcha erforderlich Text aus Captcha eintragen @@ -521,6 +530,7 @@ %d Nachricht %d Nachrichten + Weitere Nachrichten laden Datei mit %s geteilt Bild mit %s geteilt Conversations benötigt Zugriff auf externen Speicher @@ -547,4 +557,6 @@ Dein Telefon wendet Batterioptimierungen bei Conversations an, welche verspätete Benachrichtigungen oder Nachrichtenverlust verursachen können. Es ist empfehlenswert dies zu deaktivieren. Deaktivieren Der ausgewählte Bereich ist zu groß + (Keine aktivierten Konten) + Dieses Feld ist erforderlich diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index b327c1eb..2a8ede55 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -104,7 +104,7 @@ De forma automática aceptar archivos menores que… Ajustes de notificación Notificaciones - Notifica cuando llega un nuevo mensaje + Notificar cuando llega un nuevo mensaje Vibrar Vibra cuando llega un nuevo mensaje Sonido @@ -240,6 +240,7 @@ Editar asunto de la conversación Conversación no encontrada + Error desconocido Salir El contacto te ha añadido a su lista de contactos Añadir contacto @@ -297,6 +298,8 @@ Otros Nombre conversación grupo Usar el asunto de la conversación en lugar del identificador jabber como nombre en las conversaciones en grupo + Unirse a conversaciones en grupo automáticamente + Respetar la opción de unirse automáticamente de los marcadores de las conversaciones en grupo ¡Huella digital OTR copiada al portapapeles! ¡Huella digital OMEMO copiada al portapapeles! Tu entrada a esta conversación ha sido prohibida @@ -357,7 +360,7 @@ Verificar manualmente ¿Estás seguro de que quieres verificar el contacto? Mostrar etiquetas - Muestra información en forma de etiquetas debajo de los contactos + Mostrar información en forma de etiquetas debajo de los contactos Habilitar notificaciones Crear conversación en grupo No se ha encontrado el servidor para crear la conversación @@ -431,7 +434,7 @@ Intro para enviar Usar la tecla intro para enviar el mensaje Mostrar tecla Intro - Cambia la tecla de emoticonos por la tecla Intro + Cambiar la tecla de emoticonos por la tecla Intro audio vídeo imagen @@ -449,7 +452,7 @@ %s está escribiendo... %s ha dejado de escribir Notificación de escritura - Permite a tus contactos saber cuando estás escribiendo un nuevo mensaje + Permitir a tus contactos saber cuando estás escribiendo un nuevo mensaje Enviar ubicación Mostrar ubicación No se ha encontrado ninguna aplicación para mostrar la ubicación @@ -495,10 +498,16 @@ Ausente con pantalla apagada Cambia tu estado a ausente cuando la pantalla está apagada No disponible en modo silencio - Cambiar el recurso a no disponible cuando el dispositivo esté en modo silencio + Cambia tu estado a no disponible cuando el dispositivo está en modo silencio + Opciones de conexión avanzadas + Mostrar las opciones de hostname y puerto cuando se está creando una nueva cuenta + xmpp.ejemplo.com Añadir cuenta con certificado No se ha podido leer el certificado Dejar vacío para autenticar certificado w/ + Preferencias de archivado + Buscando las preferencias de archivado. Por favor, espera... + No se ha podido conseguir las preferencias de archivado Texto captcha Captcha requerido Introduce el texto de la imagen @@ -521,6 +530,7 @@ %d mensaje %d mensajes + Cargar más mensajes Archivo compartido con %s Imagen compartida con %s Conversations necesita acceder al almacenamiento externo @@ -538,8 +548,8 @@ Notificar solo cuando se recibe un mensjae resaltado Notificaciones deshabilitadas Notificaciones pausadas - Comprimir imagenes - Redimiensionar y comprimir imágenes + Comprimir imágenes + Redimensionar y comprimir imágenes Siempre Automáticamente Optimizaciones de uso de batería habilitadas @@ -547,4 +557,6 @@ Tu dispositivo está realizando optimizaciones de uso de batería en Conversations que pueden hacer que los mensajes se retrasen o incluso hacer que se pierdan.\n\nEl sistema te preguntará ahora para deshabilitarlas. Deshabilitar El área seleccionada es demasiado grande + (No hay cuentas activas) + Este campo es requerido diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index d51b6f83..f093a52b 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -392,7 +392,7 @@ Kontu handiz konpara ezazu beheko hatz-marka zure kontaktuaren hatz-markarekin.\nEnkriptatutako email bat edota telefono dei bat bezalako edozein komunikabide fidagarriren bat erabili dezakezu horiek trukatzeko. Pasahitza aldatu Oraingo pasahitza - Pasahitza berria + Pasahitz berria Pasahitza ez luke hutsik egon behar Kontu guztiak gaitu Kontu guztiak ezgaitu @@ -546,4 +546,5 @@ Zure gailua jakinarazpen atzeratuak edota mezuen galera ekar lezaketen bateriaren optimizazio handiak egiten ari da Conversationsen.\nHoriek ezgaitzea gomendatzen da. Zure gailua jakinarazpen atzeratuak edota mezuen galera ekar lezaketen bateriaren optimizazio handiak egiten ari da Conversationsen.\nJarraian hauek ezgaitzea eskatuko zaizu. Ezgaitu + Hautatutako zatia handiegia da diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 0332de89..22b5daab 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -375,7 +375,7 @@ Supprimer la clef Êtes-vous sûr de vouloir supprimer cette clef ? Elle sera considérée compromise de manière irréversible, et vous ne pourrez plus générer de session avec. - Il n\'y a aucune clef utilisable disponible pour ce contact.\nLa récupération de nouvelles clefs sur le serveur a échoué. Peut-être y a-t-il un problème avec votre serveur de contacts. + Il n\'y a aucune clef utilisable disponible pour ce contact.\nLa récupération de nouvelles clefs sur le serveur a échoué. Peut-être y a-t-il un problème avec votre serveur de contacts ? il n\'y a pas de clef disponible pour ce contact. Si vous avez purgé toutes ses clefs, il doit en générer de nouvelles. Erreur Récupération de l\'historique sur le serveur diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index 9c8b4fed..fb30d544 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -240,6 +240,7 @@ あなた 会議の件名を編集 会議が見つかりません + 不明なエラーを受け取りました 退出 連絡先があなたを連絡先リストに追加しました 戻りを追加 @@ -297,6 +298,8 @@ その他 会議名 会議を識別するために JID の代わりにルームのテーマを使用します + 自動的に会議に参加 + 会議ブックマークの自動参加フラグを尊重します OTR フィンガープリントをクリップボードにコピーしました! OMEMO フィンガープリントをクリップボードにコピーしました! あなたはこの会議から禁止されています @@ -494,9 +497,15 @@ 画面がオフになっているとき、リソースを離席としてマークします サイレントモード時は利用不可 デバイスがサイレントモードのとき、リソースが利用不可としてマークします + 拡張接続オプション + アカウントを設定するときにホスト名とポートのオプションを表示します + xmpp.example.com アカウントに証明書を追加 証明書を解析できません 空にすると、証明書で認証します + アーカイブの設定 + アーカイブの設定を取得しています。しばらくお待ちください… + アーカイブの設定を取得できません キャプチャ テキスト キャプチャが必要です 画像からテキストを入力してください @@ -518,6 +527,7 @@ %d メッセージ + さらにメッセージをロード %s でファイルを共有 %s で画像を共有 Conversations は外部ストレージにアクセスが必要です @@ -544,4 +554,6 @@ お使いのデバイスは、Conversations で通知の遅延やメッセージの損失につながる可能性のある、いくつかの重いバッテリーの最適化を行っています。\n\n今、それらを無効にするように求められます。 無効 選択した範囲が大きすぎます + (アクティベートしたアカウントはありません) + このフィールドは必須です diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 00000000..6d4991e9 --- /dev/null +++ b/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,550 @@ + + + Configurações + Nova conversa + Gerenciar contas + Encerrar essa conversa + Detalhes do contato + Detalhes da conferência + Conversa segura + Adicionar conta + Editar o nome + Adicionar ao livro de endereços + Excluir da lista de contatos + Bloquear contato + Desbloquear contato + Bloquear domínio + Desbloquear domínio + Gerenciar contas + Configurações + Detalhes da conferência + Detalhes do contato + Compartilhar com a conversa + Conversar + Selecione o contato + Lista de bloqueios + agora + 1 minuto atrás + %d minutos atrás + conversas não lidas + enviando... + Descriptografando a mensagem. Por favor, aguarde... + Mensagem criptografada via OpenPGP + Este apelido já está em uso + Administrador + Dono + Moderador + Participante + Visitante + Deseja remover %s da sua lista de contatos? As conversas associadas a esse contato não serão removidas. + Deseja bloquear o recebimento de mensagens de %s? + Deseja desbloquear o recebimento de mensagens de %s? + Bloquear todos os contatos de %s? + Desbloquear todos os contatos de %s? + Contato bloqueado + Você deseja remover %s dos favoritos? As conversas associadas a esse favorito não serão removidas. + Registrar uma nova conta no servidor + Alterar a senha no servidor + Compartilhar com... + Conversar + Convidar um contato + Contatos + Cancelar + Definir + Adicionar + Editar + Excluir + Bloquear + Desbloquear + Salvar + Ok + Ocorreu um erro no Conversations + Ao enviar os stack traces você está colaborando com o desenvolvimento do Conversations\nAtenção: Isso usará a sua conta XMPP para enviar o stack trace para o desenvolvedor. + Enviar agora + Não pergunte novamente + Não foi possível se conectar à conta + Não foi possível se conectar a múltiplas contas + Toque aqui para gerenciar suas contas + Anexar arquivo + Essa pessoa não está na sua lista de contatos. Deseja adicioná-la? + Adicionar contato + não foi entregue + rejeitada + Preparando a imagem para transmissão + Limpar o histórico + Limpa o histórico de conversas + Deseja excluir todas as mensagens dessa conversa?\n\nAtenção: Isso não afetará mensagens armazenadas em outros dispositivos ou servidores. + Excluir mensagens + Encerrar essa conversa em seguida + Selecione a presença para esse contato + Enviar mensagem não criptografada + Enviar mensagem criptografada via OTR + Enviar mensagem criptografada via OMEMO + Enviar mensagem criptografada via v\\OMEMO + Enviar mensagem criptografada via OpenPGP + Seu apelido foi alterado + Enviar descriptografada + Não foi possível descriptografar. Talvez você não tenha a chave privada apropriada. + OpenKeychain + O Conversations utiliza um aplicativo de terceiros chamado OpenKeychain para criptografar e descriptografar as mensagens e gerenciar suas chaves públicas.\n\nO OpenKeychain é licenciado sob a GPLv3 e está disponível no F-Droid e Google Play.\n\n(Por favor reinicie o Conversations em seguida) + Reiniciar + Instalar + Por favor, instale o OpenKeychain + oferecendo... + aguardando... + Não foi encontrada nenhuma chave OpenPGP + O Conversations não conseguiu criptografar suas mensagens porque o seu contato não está anunciando a chave pública dele(a).\n\nPor favor, solicite ao seu contato para configurar o OpenPGP. + Não foi encontrada nenhuma chave OpenPGP + O Conversations não conseguiu criptografar suas mensagens porque os seus contatos não estão anunciando a chave pública deles(as).\n\nPor favor, solicite aos seus contatos que configurem o OpenPGP. + Foi recebida uma mensagem criptografada. Toque para descriptografar. + Geral + Recurso XMPP + O nome pelo qual esse cliente se identifica + Aceitar arquivos + Aceitar automaticamente arquivos menores que... + Configurações de notificações + Notificações + Notificar quando uma nova mensagem for recebida + Vibração + Vibrar quando uma nova mensagem for recebida + Som + Som de notificação + Tempo de espera da notificação + Desativar notificações por um curto período após uma copia ser recebida + Opções avançadas + Nunca enviar relatórios de erros + Ao enviar os stack traces você está colaborando com o desenvolvimento do Conversations + Confirmação de mensangens + Permitir que um contato saiba quando você recebeu e leu uma mensagem + Opções de interface + O OpenKeychain informou um erro + Ocorreu um erro de E/S na descriptografia o arquivo + Aceitar + Ocorreu um erro + Permitir atualizações de presença + Permitir antecipadamente e solicitar por atualizações de presença aos contatos que você criar + Inscrições + Sua conta + Chaves + Enviar atualizações de presença + Receber atualizações de presença + Pedir por atualizações de presença + Selecionar uma imagem + Tirar uma foto + Autorizar antecipadamente as solicitações de inscrição + O arquivo selecionado não é uma imagem + Ocorreu um erro durante a conversão do arquivo de imagem + Arquivo não encontrado + Ocorreu um erro genérico de E/S. Você tem espaço de armazenamento suficiente no seu aparelho? + O aplicativo que você usou para selecionar esta imagem não nos forneceu permissões suficientes para ler o arquivo.\n\nUtilize um gerenciador de arquivos diferente para selecionar a imagem. + Desconhecido + Temporariamente desabilitado + Conectado + Conectando\u2026 + Desconectado + Não autorizado + Servidor não encontrado + Sem conectividade + Não foi possível efetuar o registro + Esse nome de usuário já está em uso + Registro efetuado com sucesso + O servidor não aceita o registro + Erro de segurança + Servidor incompatível + Descriptografada + OTR + OpenPGP + OMEMO + Editar a conta + Excluir a conta + Desabilitar temporariamente + Publicar o avatar + Publicar a chave pública OpenPGP + Habilitar a conta + Tem certeza? + Se você excluir a sua conta todo o seu histórico de conversas será perdido + Gravar voz + ID Jabber + Senha + nomedeusuario@exemplo.com + Confirme a senha + Senha + Confirme a senha + As senhas não coincidem + Esse não é um ID Jabber válido + Memória insuficiente. A imagem é muito grande + Deseja adicionar %s ao seu livro de endereços? + conectado + disponível para conversar + afastado + indisponível + não pertube + desconectado + Conferência + Outros membros + Informações do servidor + XEP-0313: MAM + XEP-0280: Cópias das mensagens + XEP-0352: Indicação do status do cliente + XEP-0191: Comando de bloqueio + XEP-0237: Versionamento da lista de contatos + XEP-0198: Gerenciamento de fluxo + XEP-0163: PEP (Avatares / OMEMO) + XEP-0363: Envio de arquivos via HTTP + disponível + indisponível + Avisos de ausência de chave pública + visto agora + visto há 1 minuto atrás + visto há %d minutos atrás + visto há 1 hora atrás + visto há %d horas atrás + visto há 1 dia atrás + visto há %d dias atrás + nunca visto + Mensagem criptografada. Por favor instale o OpenKeychain para descriptografar. + Impressão digital OTR desconhecida + Foram encontradas mensagens criptografadas com OpenPGP + A recepção falhou + Sua impressão digital + Impressão digital OTR + Impressão digital OMEMO + Impressão digital v\\OMEMO + Impressão digital OMEMO da mensagem + Impressão digital v\\OMEMO da mensagem + Impressão digital OMEMO própria + Outros dispositivos + Confiar nas impressões digitais OMEMO + Buscando as chaves... + Concluído + Verificar + Descriptografar + Conferências + Pesquisar + Criar contato + Digite o contato + Entrar na conferência + Excluir o contato + Ver os detalhes do contato + Bloquear o contato + Desbloquear o contato + Criar + Selecionar + Esse contato já existe + Entrar + Endereço da conferência + sala@conferencia.example.com + Salvar como favorito + Excluir o favorito + Esse favorito já existe + Você + Editar o assunto da conferência + A conferência não foi encontrada + Sair + O contato foi adicionado à sua lista de contatos + Adicionar novamente + %s leu até esse ponto + Publicar + Toque o avatar para selecionar uma imagem da galeria + Por favor observe: todos aqueles que acompanham suas atualizações de presença poderão ver essa imagem + Publicando... + O servidor rejeitou sua publicação + Ocorreu um erro durante a conversão da sua imagem + Não foi possível salvar o avatar no disco + (Ou mantenha pressionado para voltar ao padrão) + O seu servidor não suporta a publicação de avatares + sussurado + para %s + Enviar mensagem privada para %s + Conectar + Essa conta já existe + Próximo + Sessão atual estebelecida + Informação adicional + Pular + Desabilitar notificações + Desabilitar notificações para essa conversa + Habilitar + Essa conferencia requer uma senha + Digite a senha + Sem atualizações de presença do contato + Por favor, primeiro solicite atualizações de presençado seu contato.\n\nIsso determinará qual(is) cliente(s) o seu contato está usando. + Solicitar agora + Excluir impressão digital + Tem certeza que deseja remover essa impressão digital? + Ignorar + Aviso: Enviar isso sem atualizações mútuas de presença pode provocar problemas inesperados.\n\nVerifique nos detalhes do contato suas inscrições de presença. + Configurações de criptografia + Forçar criptografia ponto-a-ponto + Sempre envie mensagem criptografada (exceto para conferências) + Não salve as mensagens criptografadas + Atenção: Isso pode levar a perda de mensagens + Opções avançadas + Por favor, use com cuidado + Sobre o Conversations + Informações de licenciamento e construção + Horário de sossego + Início + Fim + Habilitar horário de sossego + As notificações serão silenciadas no horário de sossego + Aumentar o tamanho da fonte + Usar fontes maiores por todo aplicativo + O botão de envio indica o status + Solicitar confirmação de recebimento + As mensagens recebidas serão marcadas com um tique verde, se suportado + Colorir o botão de envio para indicar o status do contato + Outras + Nome da conferência + Use o assunto da sala ao invés do JID para identificar as conferências + Impressão digital OTR copiada para a área de transferência! + Impressão digital OMEMO copiada para a área de transferência! + Você foi banido dessa conferência + Essa conferência é restrita a seus membros + Você foi expulso dessa conferência + usando a conta %s + Verificando %s no host HTTP + Você não está conectado. Tente novamente mais tarde. + Verificar o tamanho de %s + Opções da mensagem + Copiar o texto + Copiar a URL original + Enviar novamente + URL do arquivo + Texto da mensagem + A URL foi copiada para a área de transferência + A mensagem foi copiada para a área de transferência + Não foi possível enviar a imagem + Escanear QR code + Exibir QR code + Exibir a lista de bloqueios + Detalhes da conta + Verificar OTR + Impressão digital remota + escanear + Socialist Millionaire Protocol + Dica ou pergunta + Segredo compartilhado + Confirmar + Em progresso + Responder + Erro + Os segredos não correspondem + Tentar novamente + Finalizar + Verificado! + O contato solicitou uma verificação SMP + Não foi encontrada nenhuma sessão OTR válida! + Conversations + Manter o serviço em segundo plano + Impede que o sistema operacional encerre sua conexão + Exportar registros + Escrever os registros no cartão SD + Escrevendo os registros no cartão SD + Selecione o arquivo + Recebendo %1$s (completou %2$d%%) + Baixar %s + arquivo + Abrir %s + enviando (completou %1$d%%) + Preparando o arquivo para o envio + %s oferecido para baixar + Cancelar transmissão + não foi possível transferir o arquivo + O arquivo foi excluído + Não foi encontrado nenhum aplicativo para abrir o arquivo + Não foi possível verificar a impressão digital + Verificado manualmente + Deseja realmente verificar as impressões digitais OTR dos seus contatos? + Exibir etiquetas dinâmicas + Exibir etiquetas somente de leitura abaixo dos contatos + Habilitar notificações + Criar conferência com... + Não foi encontrado nenhum servidor de conferências + Não foi possível criar a conferência! + A conferência foi criada! + O segredo foi aceito! + Redefinir + Avatar da conta + Copiar a impressão digital OTR para a área de transferência + Copiar a impressão digital OMEMO para a área de transferência + Regerar a chave OMEMO + Remover outros dispositivos do PEP + Remover dispositivos + Deseja realmente remover todos os outros dispositivos dos anúncios OMEMO? Na próxima vez que seus dispositivos conectarem eles se reanunciarão, entretanto, eles podem não receber mensagens nesse intervalo de tempo. + Expurgar a chave + Deseja realmente expurgar essa chave? + Ela será considerada irreversivelmente comprometida e você nunca mais conseguirá estabelecer uma sessão com ela. + Não existe nenhuma chave utilizável para esse contato.\nNão foi possível obter nenhuma chave nova do servidor. Pode haver alguma coisa errada com o seu servidor de contatos. + Não existe nenhuma chave utilizável para esse contato. Caso você tenha expurgado alguma chave dele, ele terá que gerar uma nova. + Erro + Obtendo histórico do servidor + Nenhum outro histórico do servidor + Atualizando... + A senha foi alterada! + Não foi possível alterar a senha + Envie uma mensagem para iniciar uma conversa criptografada + Faça uma pergunta + Caso você e o seu contato tenham um segredo em comum que ninguém mais saiba (como, por exemplo, uma piada interna ou o que vocês comeram na última vez que se encontraram) vocês podem usar isso para verificar a impressão digital um do outro.\n\nVocê fornece uma dica ou pergunta para o seu contato responder. Atenção! A resposta diferencia maiúsculas de minúsculas. + O seu contato gostaria de verificar sua impressão digital através de um segredo compartilhado. O seu contato enviou a seguinte dica/questão para esse segredo. + Sua dica não pode estar em branco + O seu segredo compartilhado não pode estar em branco + Compare cuidadosamente a impressão digital abaixo com aquela do seu contato.\nVocê pode usar qualquer forma de comunicação segura, como um e-mail criptografado ou uma ligação telefônica para efetuar a troca. + Alterar a senha + Senha atual + Nova senha + A senha não pode estar em branco + Habilitar todas as contas + Desabilitar todas as contas + Realizar a ação com + Sem afiliação + Sem papel + Banido + Membro + Modo avançado + Conceder filiação + Revogar a filiação + Conceder privilégios de administrador + Revogar os privilégios de administrador + Remover da conferência + Não foi possível alterar a filiação de %s + Banir da conferência + Você está tentando remover %s de uma conferência pública. A única forma de fazer isso é banir essa pessoa para sempre. + Banir agora + Não foi possível alterar o papel de %s + Conferência aberta ao público + Conferência privada, somente para membros + Opções da conferência + Privada, somente para membros + Não-anônima + Moderada + Você não está participando + As opções da conferência foram alteradas. + Não foi possível alterar as opções da conferência + Nunca + 30 minutos + 1 hora + 2 horas + 8 horas + Até segunda ordem + Opções de entrada + Enter envia + Use o botão Enter para enviar a mensagem + Exibir o botão Enter + Altere o botão de emoticons para um botão Enter + áudio + vídeo + imagem + Documento PDF + Aplicativo Android + Contato + %s recebido + Desabilitar o serviço em segundo plano + Toque para abrir o Conversations + O avatar foi publicado. + Enviando %s + Oferecendo %s + Ocultar desconectados + Desabilitar a conta + %s está digitando... + %s parou de digitar + Notificações de digitação + Permitir que seus contatos vejam quando você estiver digitando uma nova mensagem + Enviar localização + Exibir localização + Não foi encontrado nenhum aplicativo para exibir a localização + Localização + Localização recebida + A conversa foi fechada + Saiu da conferência + Não confiar nas CAs do sistema + Todos os certificados devem ser aprovados manualmente + Remover certificados + Excluir os certificados aprovados manualmente + Nenhum certificado aprovado manualmente + Remover certificados + Excluir a seleção + Cancelar + + %d certificado cancelado + %d certificados cancelados + + + Selecionar %d contato + Selecionar %d contatos + + Trocar o botão enviar pelo de ação rápida + Ação rápida + Nenhuma + Usada mais recentemente + Selecione a ação rápida + Pesquisar por contatos ou grupos + Enviar mensagem privada + %s deixou a conferência. + Nome de usuário + Nome de usuário + Esse não é um nome de usuário válido + Não foi possível fazer o download: servidor não encontrado + Não foi possível fazer o download: arquivo não encontrado + Não foi possível fazer o download: não foi possível conectar ao host + Usar fundo branco + Exibir a mensagens recebidas como texto preto em um fundo branco + Rede Tor não disponível + Quebrado + Configurações de presença + Afastado quando a tela estiver desligada + Marcar o seu status como afastado quando a tela estiver desligada + Não disponível quando em modo silencioso + Marcar o seu status como não disponível quando o dispositivo estiver em modo silencioso + Adicionar uma conta com certificado + Não foi possível analisar o certificado + Deixe em branco para autenticar com um certificado + Texto captcha + Captcha obrigatório + digite o texto da imagem + A cadeia de certificação não é confiável + O ID Jaber não corresponde ao certificado + Renovar o certificado + Ocorreu um erro na obtenção da chave OMEMO! + A chave OMEMO foi verificada com o certificado. + O seu dispositivo não suporta a seleção de certificados de clientes. + Opções de conexão + Conectar via Tor + Faça o tunelamento de todas as conexões através de redes Tor. Necessita do Orbot. + Nome do host + Porta + Server- ou .onion-Address + Esse número de porta não é válido + Esse nome de host não é válido + %1$d de %2$d contas conectadas + + %d mensagem + %d mensagens + + Arquivo compartilhado com %s + Imagem compartilhada com %s + O Conversations necessita de acesso ao armazenamento externo + Sincronizar com os contatos + O Conversations quer procurar por correspondências entre contatos da sua conta Jabber e do seu telefone, para complementar as informações de nome completo e avatares\n\nO Conversations fará a verificação localmente, sem enviar nenhuma informação sua para o servidor\n\nVocê será solicitado a fornecer permissão de acesso aos seus contatos agora. + Informação do certificado + Assunto + Emitente + Common Name + Organização + SHA1 + (Não disponível) + Não foi encontrado nenhum certificado + Notificar em todas as mensagens + Notificar somente quando destacado + Notificações desabilitadas + Notificações pausadas + Comprimir imagens + Redimensiona e comprime as imagens + Sempre + Automaticamente + Otimizações de bateria habilitadas + O seu dispositivo está aplicando uma otimização de bateria intensa no Conversations, que pode levar a atraso nas notificações ou até mesmo perda de mensagens.\nÉ recomendado desabilitar isso. + O seu dispositivo está aplicando uma otimização de bateria intensa no Conversations, que pode levar a atraso nas notificações ou até mesmo perda de mensagens.\nAgora você será solicitado a desabilitá-la. + Desabilitar + A área selecionada é muito grande + diff --git a/src/main/res/values-ro-rRO/strings.xml b/src/main/res/values-ro-rRO/strings.xml index e4fdb4cc..b98dd86e 100644 --- a/src/main/res/values-ro-rRO/strings.xml +++ b/src/main/res/values-ro-rRO/strings.xml @@ -240,6 +240,7 @@ Tu Editeaza titlul conferintei Conferinta nu a fost gasita + A fost primita o eroare necunoscuta Paraseste Contactul a fost adaugat in lista Adauga inapoi @@ -297,6 +298,8 @@ Altele Titlu conferinta Foloseste subiectul camerei in locul JID pentru a identifica conferinta + Alatura-te automat conferintelor + Respecta setarea de alaturare automata la o conferinta conform semnului de carte Amprenta OTR copiata in memorie Amprenta OMEMO copiata in memorie! Ti-a fost interzis accesul la aceasta conferinta @@ -498,9 +501,15 @@ Marcheaza clientul drept plecat cand ecranul este oprit Indisponibil in mod silentios Declara clientul drept indisponibil atunci cand dispozitivul este in mod silentios + Optiuni avansate conexiune + Arata optiunea de setare a numelui de gazda si a portului atunci cand se configureaza un cont + xmpp.example.com Adauga un cont cu certificat Nu se poate analiza certificatul Lasa gol pentru a autentifica cu un certificat + Preferinte arhivare + Descarc preferinte arhivare. Va rugam asteptati... + Nu s-au putut descarca setarile de arhivare Text captcha de verificare Text captcha de verificare necesar introdu textul din imagine @@ -524,6 +533,7 @@ %d mesaje %d mesaje + Incarca mai multe mesaje Partajeaza fisierul cu %s... Partajeaza imaginea cu %s. Conversations are nevoie de acces la stocarea externa @@ -551,4 +561,6 @@ Emitent Dispozitivul dumneavoastra incearca sa optimizeze agresiv consumul bateriei pentru Conversations, asta poate duce la notificari intarziate sau chiar pierderi de mesaje.\nIn continuare veti fi rugat sa dezactivati aceste optimizari. Dezactivat Zona selectata este prea mare + (Nici un cont activat) + Acest camp este obligatoriu diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index 25cb41b1..310afe9f 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -240,6 +240,7 @@ Du Ändra konferensämne Konferens hittades inte + Mottog okänt fel Lämna Kontakten lade till dig i sin kontaktlista Addera tillbaka @@ -297,6 +298,8 @@ Annat Konferensnamn Använd konferensens ämne istället för JID för att identifiera konferenser + Anslut till konferenser automatiskt + Respektera flaggan för automatisk anslutning till konferenser i bokmärkena OTR-fingeravtryck har kopierats till urklipp! OMEMO-fingeravtryck har kopierats till urklipp! Du är bannlyst från denna konferens @@ -496,9 +499,15 @@ Sätter din tillgänglighet till borta när skrämen är av Status ej tillgänglig i tyst läge Sätter din tillgänglighet till ej tillgänglig när enheten är i tyst läge + Utökade anslutningsalternativ + Visa val av servernamn och port vid inställning av konto + xmpp.example.com Lägg till konto med certifikat Kan inte läsa certifikat Lämna tom för att för att logga in med certifikat + Arkiveringsinställningar + Hämtar arkiveringsinställningar, vänta... + Kan ej hämta arkiveringsinställningar CAPTCHA-text CAPTCHA krävs skriv in texten från bilden @@ -521,6 +530,7 @@ %d meddelande %d meddelanden + Ladda fler meddelanden Delade fil med %s Delade bild med %s Conversations behöver access till extern lagring @@ -547,4 +557,6 @@ Din enhet har kraftiga batterioptimeringar som påverkar Conversations på så sätt att inkommande meddelanden kan försenas eller kan till och med gå förlorade.\nDu kommer nu att bli ombedd att stänga av batterioptimeringarna för Conversations. Deaktivera The valda området är för stort + (Inget konto aktiverat) + Detta fält måste fyllas i diff --git a/src/main/res/values-tr-rTR/strings.xml b/src/main/res/values-tr-rTR/strings.xml index 9f3528ab..d9908d8a 100644 --- a/src/main/res/values-tr-rTR/strings.xml +++ b/src/main/res/values-tr-rTR/strings.xml @@ -240,6 +240,7 @@ Siz Grup sohbet konusunu düzenle Grup sohbet bulunamadı + Bilinmeyen hata alındı Ayrıl Kişi sizi listesine ekledi Siz de ekleyin @@ -297,6 +298,8 @@ Diğer Grup sohbet ismi Grup sohbetleri tanımlamak için JID yerine odanın konusunu kullan + Grup sohbet\'e otomatik olarak katıl + Grup sohbet yer imlerinde otomatik katıl bayrağına riayet et OTR parmak izi panoya kopyalandı! OMEMO parmak izi panoya kopyalandı! Grup sohbetinden atıldınız @@ -494,9 +497,15 @@ Ekran kapandığında çevrimiçi durum bildiriminizi uzakta olarak değiştirir Sessiz moddayken erişilemez Telefonunuz sessizdeyken, durum bildiriminizi müsait değil olarak değiştirir + Genişletilmiş bağlantı seçenekleri + Hesap oluştururken sunucu adıyla port seçeneğini göster + xmpp.ornek.com Sertifikalı hesap ekle Sertifika çözümlenemedi w/ sertifikasının kimlik denetimi için boş bırak + Arşivleme tercihleri + Arşivleme tercihleri alınıyor. Lütfen bekleyin... + Arşivleme tercihleri alınamadı Captcha metni Captcha gerekli resimdeki metni girin @@ -518,6 +527,7 @@ %d ileti + Daha fazla ileti yükle %s ile paylaşılan dosyalar %s ile paylaşılan resim Conversations’ın harici depolama alanına erişmesi gerek @@ -544,4 +554,6 @@ Cihazınız Conversations üzerinde yoğun pil optimizasyonu yaptığı için bildirimlerde gecikmeler olabilir hatta bazı ileti kayıpları yaşanabilir.\n Şimdi bunları devre dışı bırakmanız istenecek. Devre dışı Seçilen alan çok büyük + (Aktif hesap bulunmuyor) + Bu alan zorunludur diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index a133606f..7214d5fc 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -240,6 +240,7 @@ 编辑讨论组主题 讨论组未找到 + 收到未知错误 离开 联系人已添加你到联系人列表 反向添加 @@ -297,6 +298,8 @@ 其他 讨论组名称 用讨论组的主题来标示讨论组而不是 JID + 自动加入讨论组 + 将讨论组加入到自动加入书签 OTR 指纹已拷贝到剪贴板! OMEMO 指纹已拷贝到剪贴板! 你被此讨论组屏蔽 @@ -494,9 +497,15 @@ 当屏幕关闭时将标记您的资源为离开状态 静音模式时不可用 当设备进入静音模式时把资源标识改为不可用 + 扩展的连接选项 + 设置账户时显示主机名和端口选项 + xmpp.example.com 使用证书添加账户 无法解析证书 留空以认证 w/ 证书 + 正在存档配置 + 正在获取存档配置。请稍后... + 无法获取存档的配置 验证码 需要验证码 输入图片中的文字 @@ -518,6 +527,7 @@ %d 条消息 + 载入更多消息 用 %s 分享文件 用 %s 分享图片 Conversations 需要访问外部存储 @@ -546,4 +556,6 @@ 你将会被提示禁用该功能。 禁用 选择区域过大 + (没有激活的账户) + 必填 -- cgit v1.2.3 From c4b1df1bf305a84a972837298106de2674bb1c5c Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 15 Feb 2016 22:12:39 +0100 Subject: add missing type='submit' attribute to enable push form --- src/main/java/eu/siacs/conversations/generator/IqGenerator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java index 258897a1..4395a546 100644 --- a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java @@ -331,6 +331,7 @@ public class IqGenerator extends AbstractGenerator { Data data = new Data(); data.setFormType("http://jabber.org/protocol/pubsub#publish-options"); data.put("secret",secret); + data.submit(); enable.addChild(data); return packet; } -- cgit v1.2.3 From 335058b78bb20f8234d98fb4f205a1954b25e7e8 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 15 Feb 2016 23:09:42 +0100 Subject: removed unnecessary conditions when sending read marker --- src/main/java/eu/siacs/conversations/ui/ConversationActivity.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index 5ec2dc97..11e2e889 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -366,11 +366,7 @@ public class ConversationActivity extends XmppActivity public void sendReadMarkerIfNecessary(final Conversation conversation) { if (!mActivityPaused && conversation != null) { - if (!conversation.isRead()) { - xmppConnectionService.sendReadMarker(conversation); - } else { - xmppConnectionService.markRead(conversation); - } + xmppConnectionService.sendReadMarker(conversation); } } -- cgit v1.2.3 From c0b3a3ff0c32c8025174ebb92fbcf4a7fc67f497 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 15 Feb 2016 23:15:04 +0100 Subject: basic support for XEP-0308: Last Message Correction. fixes #864 --- .../siacs/conversations/entities/Conversation.java | 20 ++++++ .../eu/siacs/conversations/entities/Message.java | 38 +++++++++-- .../conversations/generator/AbstractGenerator.java | 1 + .../conversations/generator/MessageGenerator.java | 3 + .../siacs/conversations/parser/MessageParser.java | 61 +++++++++++++---- .../conversations/persistance/DatabaseBackend.java | 14 +++- .../services/XmppConnectionService.java | 13 ++-- .../conversations/ui/ConversationFragment.java | 72 +++++++++++++++++---- .../eu/siacs/conversations/ui/EditMessage.java | 2 + .../conversations/ui/adapter/MessageAdapter.java | 15 ++++- src/main/res/drawable-hdpi/ic_lock_black_18dp.png | Bin 0 -> 368 bytes src/main/res/drawable-hdpi/ic_lock_white_18dp.png | Bin 0 -> 371 bytes .../res/drawable-hdpi/ic_mode_edit_black_18dp.png | Bin 0 -> 264 bytes .../res/drawable-hdpi/ic_mode_edit_white_18dp.png | Bin 0 -> 299 bytes src/main/res/drawable-hdpi/ic_secure_indicator.png | Bin 294 -> 0 bytes .../drawable-hdpi/ic_secure_indicator_white.png | Bin 322 -> 0 bytes src/main/res/drawable-mdpi/ic_lock_black_18dp.png | Bin 0 -> 293 bytes src/main/res/drawable-mdpi/ic_lock_white_18dp.png | Bin 0 -> 298 bytes .../res/drawable-mdpi/ic_mode_edit_black_18dp.png | Bin 0 -> 229 bytes .../res/drawable-mdpi/ic_mode_edit_white_18dp.png | Bin 0 -> 249 bytes src/main/res/drawable-mdpi/ic_secure_indicator.png | Bin 295 -> 0 bytes .../drawable-mdpi/ic_secure_indicator_white.png | Bin 306 -> 0 bytes src/main/res/drawable-xhdpi/ic_lock_black_18dp.png | Bin 0 -> 397 bytes src/main/res/drawable-xhdpi/ic_lock_white_18dp.png | Bin 0 -> 399 bytes .../res/drawable-xhdpi/ic_mode_edit_black_18dp.png | Bin 0 -> 291 bytes .../res/drawable-xhdpi/ic_mode_edit_white_18dp.png | Bin 0 -> 351 bytes .../res/drawable-xhdpi/ic_secure_indicator.png | Bin 410 -> 0 bytes .../drawable-xhdpi/ic_secure_indicator_white.png | Bin 434 -> 0 bytes .../res/drawable-xxhdpi/ic_lock_black_18dp.png | Bin 0 -> 559 bytes .../res/drawable-xxhdpi/ic_lock_white_18dp.png | Bin 0 -> 558 bytes .../drawable-xxhdpi/ic_mode_edit_black_18dp.png | Bin 0 -> 336 bytes .../drawable-xxhdpi/ic_mode_edit_white_18dp.png | Bin 0 -> 436 bytes .../res/drawable-xxhdpi/ic_secure_indicator.png | Bin 380 -> 0 bytes .../drawable-xxhdpi/ic_secure_indicator_white.png | Bin 441 -> 0 bytes .../res/drawable-xxxhdpi/ic_lock_black_18dp.png | Bin 0 -> 636 bytes .../res/drawable-xxxhdpi/ic_lock_white_18dp.png | Bin 0 -> 760 bytes .../drawable-xxxhdpi/ic_mode_edit_black_18dp.png | Bin 0 -> 366 bytes .../drawable-xxxhdpi/ic_mode_edit_white_18dp.png | Bin 0 -> 490 bytes src/main/res/layout/message_received.xml | 12 +++- src/main/res/layout/message_sent.xml | 12 +++- src/main/res/menu/message_context.xml | 4 ++ src/main/res/values/strings.xml | 2 + 42 files changed, 228 insertions(+), 41 deletions(-) create mode 100644 src/main/res/drawable-hdpi/ic_lock_black_18dp.png create mode 100644 src/main/res/drawable-hdpi/ic_lock_white_18dp.png create mode 100644 src/main/res/drawable-hdpi/ic_mode_edit_black_18dp.png create mode 100644 src/main/res/drawable-hdpi/ic_mode_edit_white_18dp.png delete mode 100644 src/main/res/drawable-hdpi/ic_secure_indicator.png delete mode 100644 src/main/res/drawable-hdpi/ic_secure_indicator_white.png create mode 100644 src/main/res/drawable-mdpi/ic_lock_black_18dp.png create mode 100644 src/main/res/drawable-mdpi/ic_lock_white_18dp.png create mode 100644 src/main/res/drawable-mdpi/ic_mode_edit_black_18dp.png create mode 100644 src/main/res/drawable-mdpi/ic_mode_edit_white_18dp.png delete mode 100644 src/main/res/drawable-mdpi/ic_secure_indicator.png delete mode 100644 src/main/res/drawable-mdpi/ic_secure_indicator_white.png create mode 100644 src/main/res/drawable-xhdpi/ic_lock_black_18dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_lock_white_18dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_mode_edit_black_18dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_mode_edit_white_18dp.png delete mode 100644 src/main/res/drawable-xhdpi/ic_secure_indicator.png delete mode 100644 src/main/res/drawable-xhdpi/ic_secure_indicator_white.png create mode 100644 src/main/res/drawable-xxhdpi/ic_lock_black_18dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_lock_white_18dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_mode_edit_black_18dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_mode_edit_white_18dp.png delete mode 100644 src/main/res/drawable-xxhdpi/ic_secure_indicator.png delete mode 100644 src/main/res/drawable-xxhdpi/ic_secure_indicator_white.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_lock_black_18dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_lock_white_18dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_mode_edit_black_18dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_mode_edit_white_18dp.png diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 53bd19a5..a0600d13 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -82,6 +82,7 @@ public class Conversation extends AbstractEntity implements Blockable { private ChatState mIncomingChatState = Config.DEFAULT_CHATSTATE; private String mLastReceivedOtrMessageId = null; private String mFirstMamReference = null; + private Message correctingMessage; public boolean hasMessagesLeftOnServer() { return messagesLeftOnServer; @@ -226,6 +227,17 @@ public class Conversation extends AbstractEntity implements Blockable { return null; } + public Message findMessageWithRemoteIdAndCounterpart(String id, Jid counterpart) { + synchronized (this.messages) { + for(Message message : this.messages) { + if(id.equals(message.getRemoteMsgId()) && counterpart.equals(message.getCounterpart())) { + return message; + } + } + } + return null; + } + public Message findSentMessageWithUuid(String id) { synchronized (this.messages) { for (Message message : this.messages) { @@ -294,6 +306,14 @@ public class Conversation extends AbstractEntity implements Blockable { return getLongAttribute("last_clear_history", 0); } + public void setCorrectingMessage(Message correctingMessage) { + this.correctingMessage = correctingMessage; + } + + public Message getCorrectingMessage() { + return this.correctingMessage; + } + public interface OnMessageFound { void onMessageFound(final Message message); } diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index f37ae427..1f9212fd 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -52,6 +52,7 @@ public class Message extends AbstractEntity { public static final String STATUS = "status"; public static final String TYPE = "type"; public static final String CARBON = "carbon"; + public static final String EDITED = "edited"; public static final String REMOTE_MSG_ID = "remoteMsgId"; public static final String SERVER_MSG_ID = "serverMsgId"; public static final String RELATIVE_FILE_PATH = "relativeFilePath"; @@ -71,6 +72,7 @@ public class Message extends AbstractEntity { protected int status; protected int type; protected boolean carbon = false; + protected String edited = null; protected String relativeFilePath; protected boolean read = true; protected String remoteMsgId = null; @@ -104,7 +106,8 @@ public class Message extends AbstractEntity { null, null, null, - true); + true, + null); this.conversation = conversation; } @@ -112,7 +115,8 @@ public class Message extends AbstractEntity { final Jid trueCounterpart, final String body, final long timeSent, final int encryption, final int status, final int type, final boolean carbon, final String remoteMsgId, final String relativeFilePath, - final String serverMsgId, final String fingerprint, final boolean read) { + final String serverMsgId, final String fingerprint, final boolean read, + final String edited) { this.uuid = uuid; this.conversationUuid = conversationUUid; this.counterpart = counterpart; @@ -128,6 +132,7 @@ public class Message extends AbstractEntity { this.serverMsgId = serverMsgId; this.axolotlFingerprint = fingerprint; this.read = read; + this.edited = edited; } public static Message fromCursor(Cursor cursor) { @@ -162,12 +167,13 @@ public class Message extends AbstractEntity { cursor.getInt(cursor.getColumnIndex(ENCRYPTION)), cursor.getInt(cursor.getColumnIndex(STATUS)), cursor.getInt(cursor.getColumnIndex(TYPE)), - cursor.getInt(cursor.getColumnIndex(CARBON))>0, + cursor.getInt(cursor.getColumnIndex(CARBON)) > 0, cursor.getString(cursor.getColumnIndex(REMOTE_MSG_ID)), cursor.getString(cursor.getColumnIndex(RELATIVE_FILE_PATH)), cursor.getString(cursor.getColumnIndex(SERVER_MSG_ID)), cursor.getString(cursor.getColumnIndex(FINGERPRINT)), - cursor.getInt(cursor.getColumnIndex(READ)) > 0); + cursor.getInt(cursor.getColumnIndex(READ)) > 0, + cursor.getString(cursor.getColumnIndex(EDITED))); } public static Message createStatusMessage(Conversation conversation, String body) { @@ -211,7 +217,8 @@ public class Message extends AbstractEntity { values.put(RELATIVE_FILE_PATH, relativeFilePath); values.put(SERVER_MSG_ID, serverMsgId); values.put(FINGERPRINT, axolotlFingerprint); - values.put(READ,read); + values.put(READ,read ? 1 : 0); + values.put(EDITED, edited); return values; } @@ -340,10 +347,22 @@ public class Message extends AbstractEntity { this.carbon = carbon; } + public void setEdited(String edited) { + this.edited = edited; + } + + public boolean edited() { + return this.edited != null; + } + public void setTrueCounterpart(Jid trueCounterpart) { this.trueCounterpart = trueCounterpart; } + public Jid getTrueCounterpart() { + return this.trueCounterpart; + } + public Transferable getTransferable() { return this.transferable; } @@ -421,6 +440,7 @@ public class Message extends AbstractEntity { this.getEncryption() == message.getEncryption() && this.getCounterpart() != null && this.getCounterpart().equals(message.getCounterpart()) && + this.edited() == message.edited() && (message.getTimeSent() - this.getTimeSent()) <= (Config.MESSAGE_MERGE_WINDOW * 1000) && !GeoHelper.isGeoUri(message.getBody()) && !GeoHelper.isGeoUri(this.body) && @@ -510,6 +530,14 @@ public class Message extends AbstractEntity { } } + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getEditedId() { + return edited; + } + public enum Decision { MUST, SHOULD, diff --git a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java index d5059605..d223ab84 100644 --- a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java @@ -31,6 +31,7 @@ public abstract class AbstractGenerator { "urn:xmpp:avatar:metadata+notify", "http://jabber.org/protocol/nick+notify", "urn:xmpp:ping", + "urn:xmpp:message-correct:0", "jabber:iq:version", "http://jabber.org/protocol/chatstates", AxolotlService.PEP_DEVICE_LIST+"+notify"}; diff --git a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java index b849f56f..0e7a8ce6 100644 --- a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java @@ -47,6 +47,9 @@ public class MessageGenerator extends AbstractGenerator { } packet.setFrom(account.getJid()); packet.setId(message.getUuid()); + if (message.edited()) { + packet.addChild("replace","urn:xmpp:message-correct:0").setAttribute("id",message.getEditedId()); + } return packet; } diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 3bf48831..18edfdeb 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -297,6 +297,8 @@ public class MessageParser extends AbstractParser implements final String body = packet.getBody(); final Element mucUserElement = packet.findChild("x", "http://jabber.org/protocol/muc#user"); final String pgpEncrypted = packet.findChildContent("x", "jabber:x:encrypted"); + final Element replaceElement = packet.findChild("replace","urn:xmpp:message-correct:0"); + final String replacementId = replaceElement == null ? null : replaceElement.getAttribute("id"); final Element axolotlEncrypted = packet.findChild(XmppAxolotlMessage.CONTAINERTAG, AxolotlService.PEP_PREFIX); int status; final Jid counterpart; @@ -390,6 +392,33 @@ public class MessageParser extends AbstractParser implements } else { updateLastseen(timestamp, account, packet.getFrom(), true); } + + if (replacementId != null) { + Message replacedMessage = conversation.findMessageWithRemoteIdAndCounterpart(replacementId, counterpart); + if (replacedMessage != null) { + final boolean fingerprintsMatch = replacedMessage.getAxolotlFingerprint() == null + || replacedMessage.getAxolotlFingerprint().equals(message.getAxolotlFingerprint()); + final boolean trueCountersMatch = replacedMessage.getTrueCounterpart() != null + && replacedMessage.getTrueCounterpart().equals(message.getTrueCounterpart()); + if (fingerprintsMatch && (trueCountersMatch || conversation.getMode() == Conversation.MODE_SINGLE)) { + Log.d(Config.LOGTAG, "replaced message '" + replacedMessage.getBody() + "' with '" + message.getBody() + "'"); + replacedMessage.setBody(message.getBody()); + replacedMessage.setEdited(replacedMessage.getRemoteMsgId()); + replacedMessage.setRemoteMsgId(remoteMsgId); + if (replacedMessage.getStatus() == Message.STATUS_RECEIVED) { + replacedMessage.markUnread(); + } + mXmppConnectionService.updateMessage(replacedMessage); + if (mXmppConnectionService.confirmMessages() && remoteMsgId != null && !isForwarded && !isTypeGroupChat) { + sendMessageReceipts(account, packet); + } + return; + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": received message correction but verification didn't check out"); + } + } + } + boolean checkForDuplicates = query != null || (isTypeGroupChat && packet.hasChild("delay","urn:xmpp:delay")) || message.getType() == Message.TYPE_PRIVATE; @@ -420,20 +449,7 @@ public class MessageParser extends AbstractParser implements } if (mXmppConnectionService.confirmMessages() && remoteMsgId != null && !isForwarded && !isTypeGroupChat) { - ArrayList receiptsNamespaces = new ArrayList<>(); - if (packet.hasChild("markable", "urn:xmpp:chat-markers:0")) { - receiptsNamespaces.add("urn:xmpp:chat-markers:0"); - } - if (packet.hasChild("request", "urn:xmpp:receipts")) { - receiptsNamespaces.add("urn:xmpp:receipts"); - } - if (receiptsNamespaces.size() > 0) { - MessagePacket receipt = mXmppConnectionService.getMessageGenerator().received(account, - packet, - receiptsNamespaces, - packet.getType()); - mXmppConnectionService.sendMessagePacket(account, receipt); - } + sendMessageReceipts(account, packet); } if (message.getStatus() == Message.STATUS_RECEIVED @@ -524,4 +540,21 @@ public class MessageParser extends AbstractParser implements contact.setPresenceName(nick); } } + + private void sendMessageReceipts(Account account, MessagePacket packet) { + ArrayList receiptsNamespaces = new ArrayList<>(); + if (packet.hasChild("markable", "urn:xmpp:chat-markers:0")) { + receiptsNamespaces.add("urn:xmpp:chat-markers:0"); + } + if (packet.hasChild("request", "urn:xmpp:receipts")) { + receiptsNamespaces.add("urn:xmpp:receipts"); + } + if (receiptsNamespaces.size() > 0) { + MessagePacket receipt = mXmppConnectionService.getMessageGenerator().received(account, + packet, + receiptsNamespaces, + packet.getType()); + mXmppConnectionService.sendMessagePacket(account, receipt); + } + } } diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index 2f28a30f..dcba4f74 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -51,7 +51,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { private static DatabaseBackend instance = null; private static final String DATABASE_NAME = "history"; - private static final int DATABASE_VERSION = 23; + private static final int DATABASE_VERSION = 24; private static String CREATE_CONTATCS_STATEMENT = "create table " + Contact.TABLENAME + "(" + Contact.ACCOUNT + " TEXT, " @@ -161,6 +161,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { + Message.SERVER_MSG_ID + " TEXT, " + Message.FINGERPRINT + " TEXT, " + Message.CARBON + " INTEGER, " + + Message.EDITED + " TEXT, " + Message.READ + " NUMBER DEFAULT 1, " + Message.REMOTE_MSG_ID + " TEXT, FOREIGN KEY(" + Message.CONVERSATION + ") REFERENCES " @@ -370,6 +371,10 @@ public class DatabaseBackend extends SQLiteOpenHelper { if (oldVersion < 23 && newVersion >= 23) { db.execSQL(CREATE_DISCOVERY_RESULTS_STATEMENT); } + + if (oldVersion < 24 && newVersion >= 24) { + db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN " + Message.EDITED + " TEXT"); + } } public static synchronized DatabaseBackend getInstance(Context context) { @@ -586,6 +591,13 @@ public class DatabaseBackend extends SQLiteOpenHelper { + "=?", args); } + public void updateMessage(Message message, String uuid) { + SQLiteDatabase db = this.getWritableDatabase(); + String[] args = {uuid}; + db.update(Message.TABLENAME, message.getContentValues(), Message.UUID + + "=?", args); + } + public void readRoster(Roster roster) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor; diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 16d7f139..10f6b5ef 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -841,8 +841,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa final Conversation conversation = message.getConversation(); account.deactivateGracePeriod(); MessagePacket packet = null; - final boolean addToConversation = conversation.getMode() != Conversation.MODE_MULTI - || account.getServerIdentity() != XmppConnection.Identity.SLACK; + final boolean addToConversation = (conversation.getMode() != Conversation.MODE_MULTI + || account.getServerIdentity() != XmppConnection.Identity.SLACK) + && !message.edited(); boolean saveInDb = addToConversation; message.setStatus(Message.STATUS_WAITING); @@ -966,8 +967,12 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa if (addToConversation) { conversation.add(message); } - if (saveInDb && (message.getEncryption() == Message.ENCRYPTION_NONE || saveEncryptedMessages())) { - databaseBackend.createMessage(message); + if (message.getEncryption() == Message.ENCRYPTION_NONE || saveEncryptedMessages()) { + if (saveInDb) { + databaseBackend.createMessage(message); + } else if (message.edited()) { + databaseBackend.updateMessage(message, message.getEditedId()); + } } updateConversationUi(); } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index c555ead0..6ead9962 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -8,7 +8,6 @@ import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.IntentSender; import android.content.IntentSender.SendIntentException; import android.os.Bundle; import android.support.annotation.Nullable; @@ -40,6 +39,7 @@ import net.java.otr4j.session.SessionStatus; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.UUID; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; @@ -51,7 +51,6 @@ import eu.siacs.conversations.entities.DownloadableFile; import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.entities.MucOptions; import eu.siacs.conversations.entities.Presence; -import eu.siacs.conversations.entities.Presences; import eu.siacs.conversations.entities.Transferable; import eu.siacs.conversations.entities.TransferablePlaceholder; import eu.siacs.conversations.services.XmppConnectionService; @@ -294,8 +293,14 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa activity.attachFile(ConversationActivity.ATTACHMENT_CHOICE_CHOOSE_IMAGE); break; case CANCEL: - if (conversation != null && conversation.getMode() == Conversation.MODE_MULTI) { - conversation.setNextCounterpart(null); + if (conversation != null) { + if (conversation.getCorrectingMessage() != null) { + conversation.setCorrectingMessage(null); + mEditMessage.getEditableText().clear(); + } + if (conversation.getMode() == Conversation.MODE_MULTI) { + conversation.setNextCounterpart(null); + } updateChatMsgHint(); updateSendButton(); } @@ -330,12 +335,21 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa if (body.length() == 0 || this.conversation == null) { return; } - Message message = new Message(conversation, body, conversation.getNextEncryption()); - if (conversation.getMode() == Conversation.MODE_MULTI) { - if (conversation.getNextCounterpart() != null) { - message.setCounterpart(conversation.getNextCounterpart()); - message.setType(Message.TYPE_PRIVATE); + final Message message; + if (conversation.getCorrectingMessage() == null) { + message = new Message(conversation, body, conversation.getNextEncryption()); + if (conversation.getMode() == Conversation.MODE_MULTI) { + if (conversation.getNextCounterpart() != null) { + message.setCounterpart(conversation.getNextCounterpart()); + message.setType(Message.TYPE_PRIVATE); + } } + } else { + message = conversation.getCorrectingMessage(); + message.setBody(body); + message.setEdited(message.getUuid()); + message.setUuid(UUID.randomUUID().toString()); + conversation.setCorrectingMessage(null); } switch (conversation.getNextEncryption()) { case Message.ENCRYPTION_OTR: @@ -356,7 +370,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa public void updateChatMsgHint() { final boolean multi = conversation.getMode() == Conversation.MODE_MULTI; - if (multi && conversation.getNextCounterpart() != null) { + if (conversation.getCorrectingMessage() != null) { + this.mEditMessage.setHint(R.string.send_corrected_message); + } else if (multi && conversation.getNextCounterpart() != null) { this.mEditMessage.setHint(getString( R.string.send_private_message_to, conversation.getNextCounterpart().getResourcepart())); @@ -487,8 +503,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa } @Override - public void onCreateContextMenu(ContextMenu menu, View v, - ContextMenuInfo menuInfo) { + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { synchronized (this.messageList) { super.onCreateContextMenu(menu, v, menuInfo); AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo; @@ -503,6 +518,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa activity.getMenuInflater().inflate(R.menu.message_context, menu); menu.setHeaderTitle(R.string.message_options); MenuItem copyText = menu.findItem(R.id.copy_text); + MenuItem correctMessage = menu.findItem(R.id.correct_message); MenuItem shareWith = menu.findItem(R.id.share_with); MenuItem sendAgain = menu.findItem(R.id.send_again); MenuItem copyUrl = menu.findItem(R.id.copy_url); @@ -514,6 +530,11 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa && m.treatAsDownloadable() != Message.Decision.MUST) { copyText.setVisible(true); } + if (m.getType() == Message.TYPE_TEXT + && m.getStatus() != Message.STATUS_RECEIVED + && !m.isCarbon()) { + correctMessage.setVisible(true); + } if ((m.getType() != Message.TYPE_TEXT && m.getType() != Message.TYPE_PRIVATE && m.getTransferable() == null) @@ -550,6 +571,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa case R.id.copy_text: copyText(selectedMessage); return true; + case R.id.correct_message: + correctMessage(selectedMessage); + return true; case R.id.send_again: resendMessage(selectedMessage); return true; @@ -652,6 +676,16 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa updateSendButton(); } + private void correctMessage(Message message) { + while(message.mergeable(message.next())) { + message = message.next(); + } + this.conversation.setCorrectingMessage(message); + this.mEditMessage.getEditableText().clear(); + this.mEditMessage.getEditableText().append(message.getBody()); + + } + protected void highlightInConference(String nick) { String oldString = mEditMessage.getText().toString().trim(); if (oldString.isEmpty() || mEditMessage.getSelectionStart() == 0) { @@ -958,9 +992,12 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa final Conversation c = this.conversation; final SendButtonAction action; final Presence.Status status; - final boolean empty = this.mEditMessage == null || this.mEditMessage.getText().length() == 0; + final String text = this.mEditMessage == null ? "" : this.mEditMessage.getText().toString(); + final boolean empty = text.length() == 0; final boolean conference = c.getMode() == Conversation.MODE_MULTI; - if (conference && !c.getAccount().httpUploadAvailable()) { + if (c.getCorrectingMessage() != null && (empty || text.equals(c.getCorrectingMessage().getBody()))) { + action = SendButtonAction.CANCEL; + } else if (conference && !c.getAccount().httpUploadAvailable()) { if (empty && c.getNextCounterpart() != null) { action = SendButtonAction.CANCEL; } else { @@ -1238,6 +1275,13 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa updateSendButton(); } + @Override + public void onTextChanged() { + if (conversation != null && conversation.getCorrectingMessage() != null) { + updateSendButton(); + } + } + private int completionIndex = 0; private int lastCompletionLength = 0; private String incomplete; diff --git a/src/main/java/eu/siacs/conversations/ui/EditMessage.java b/src/main/java/eu/siacs/conversations/ui/EditMessage.java index fc655b0c..e3841d1d 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditMessage.java +++ b/src/main/java/eu/siacs/conversations/ui/EditMessage.java @@ -69,6 +69,7 @@ public class EditMessage extends EditText { this.isUserTyping = false; this.keyboardListener.onTextDeleted(); } + this.keyboardListener.onTextChanged(); } } @@ -84,6 +85,7 @@ public class EditMessage extends EditText { void onTypingStarted(); void onTypingStopped(); void onTextDeleted(); + void onTextChanged(); boolean onTabPressed(boolean repeated); } diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java index fc2bd2ab..f6496b21 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -123,6 +123,16 @@ public class MessageAdapter extends ArrayAdapter { if (viewHolder.indicatorReceived != null) { viewHolder.indicatorReceived.setVisibility(View.GONE); } + + if (viewHolder.edit_indicator != null) { + if (message.edited()) { + viewHolder.edit_indicator.setVisibility(View.VISIBLE); + viewHolder.edit_indicator.setImageResource(darkBackground ? R.drawable.ic_mode_edit_white_18dp : R.drawable.ic_mode_edit_black_18dp); + viewHolder.edit_indicator.setAlpha(darkBackground ? 0.7f : 0.57f); + } else { + viewHolder.edit_indicator.setVisibility(View.GONE); + } + } boolean multiReceived = message.getConversation().getMode() == Conversation.MODE_MULTI && message.getMergedStatus() <= Message.STATUS_RECEIVED; if (message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE || message.getTransferable() != null) { @@ -179,7 +189,7 @@ public class MessageAdapter extends ArrayAdapter { if (message.getEncryption() == Message.ENCRYPTION_NONE) { viewHolder.indicator.setVisibility(View.GONE); } else { - viewHolder.indicator.setImageResource(darkBackground ? R.drawable.ic_secure_indicator_white : R.drawable.ic_secure_indicator); + viewHolder.indicator.setImageResource(darkBackground ? R.drawable.ic_lock_white_18dp : R.drawable.ic_lock_black_18dp); viewHolder.indicator.setVisibility(View.VISIBLE); if (message.getEncryption() == Message.ENCRYPTION_AXOLOTL) { XmppAxolotlSession.Trust trust = message.getConversation() @@ -463,6 +473,7 @@ public class MessageAdapter extends ArrayAdapter { .findViewById(R.id.download_button); viewHolder.indicator = (ImageView) view .findViewById(R.id.security_indicator); + viewHolder.edit_indicator = (ImageView) view.findViewById(R.id.edit_indicator); viewHolder.image = (ImageView) view .findViewById(R.id.message_image); viewHolder.messageBody = (TextView) view @@ -483,6 +494,7 @@ public class MessageAdapter extends ArrayAdapter { .findViewById(R.id.download_button); viewHolder.indicator = (ImageView) view .findViewById(R.id.security_indicator); + viewHolder.edit_indicator = (ImageView) view.findViewById(R.id.edit_indicator); viewHolder.image = (ImageView) view .findViewById(R.id.message_image); viewHolder.messageBody = (TextView) view @@ -701,6 +713,7 @@ public class MessageAdapter extends ArrayAdapter { protected TextView status_message; protected TextView encryption; public Button load_more_messages; + public ImageView edit_indicator; } class BitmapWorkerTask extends AsyncTask { diff --git a/src/main/res/drawable-hdpi/ic_lock_black_18dp.png b/src/main/res/drawable-hdpi/ic_lock_black_18dp.png new file mode 100644 index 00000000..4c7a7c59 Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_lock_black_18dp.png differ diff --git a/src/main/res/drawable-hdpi/ic_lock_white_18dp.png b/src/main/res/drawable-hdpi/ic_lock_white_18dp.png new file mode 100644 index 00000000..29e8bfd3 Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_lock_white_18dp.png differ diff --git a/src/main/res/drawable-hdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-hdpi/ic_mode_edit_black_18dp.png new file mode 100644 index 00000000..00e7d074 Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_mode_edit_black_18dp.png differ diff --git a/src/main/res/drawable-hdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-hdpi/ic_mode_edit_white_18dp.png new file mode 100644 index 00000000..558f0ea3 Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_mode_edit_white_18dp.png differ diff --git a/src/main/res/drawable-hdpi/ic_secure_indicator.png b/src/main/res/drawable-hdpi/ic_secure_indicator.png deleted file mode 100644 index 220463fc..00000000 Binary files a/src/main/res/drawable-hdpi/ic_secure_indicator.png and /dev/null differ diff --git a/src/main/res/drawable-hdpi/ic_secure_indicator_white.png b/src/main/res/drawable-hdpi/ic_secure_indicator_white.png deleted file mode 100644 index 46eb1195..00000000 Binary files a/src/main/res/drawable-hdpi/ic_secure_indicator_white.png and /dev/null differ diff --git a/src/main/res/drawable-mdpi/ic_lock_black_18dp.png b/src/main/res/drawable-mdpi/ic_lock_black_18dp.png new file mode 100644 index 00000000..c8b6fe71 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_lock_black_18dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_lock_white_18dp.png b/src/main/res/drawable-mdpi/ic_lock_white_18dp.png new file mode 100644 index 00000000..1265e98e Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_lock_white_18dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-mdpi/ic_mode_edit_black_18dp.png new file mode 100644 index 00000000..ebd96073 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_mode_edit_black_18dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-mdpi/ic_mode_edit_white_18dp.png new file mode 100644 index 00000000..e23c42db Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_mode_edit_white_18dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_secure_indicator.png b/src/main/res/drawable-mdpi/ic_secure_indicator.png deleted file mode 100644 index 690d4d03..00000000 Binary files a/src/main/res/drawable-mdpi/ic_secure_indicator.png and /dev/null differ diff --git a/src/main/res/drawable-mdpi/ic_secure_indicator_white.png b/src/main/res/drawable-mdpi/ic_secure_indicator_white.png deleted file mode 100644 index e2f894ef..00000000 Binary files a/src/main/res/drawable-mdpi/ic_secure_indicator_white.png and /dev/null differ diff --git a/src/main/res/drawable-xhdpi/ic_lock_black_18dp.png b/src/main/res/drawable-xhdpi/ic_lock_black_18dp.png new file mode 100644 index 00000000..0888c617 Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_lock_black_18dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_lock_white_18dp.png b/src/main/res/drawable-xhdpi/ic_lock_white_18dp.png new file mode 100644 index 00000000..b94735ec Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_lock_white_18dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-xhdpi/ic_mode_edit_black_18dp.png new file mode 100644 index 00000000..b33c964d Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_mode_edit_black_18dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-xhdpi/ic_mode_edit_white_18dp.png new file mode 100644 index 00000000..3ee3e172 Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_mode_edit_white_18dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_secure_indicator.png b/src/main/res/drawable-xhdpi/ic_secure_indicator.png deleted file mode 100644 index cd0d1391..00000000 Binary files a/src/main/res/drawable-xhdpi/ic_secure_indicator.png and /dev/null differ diff --git a/src/main/res/drawable-xhdpi/ic_secure_indicator_white.png b/src/main/res/drawable-xhdpi/ic_secure_indicator_white.png deleted file mode 100644 index b624a8ce..00000000 Binary files a/src/main/res/drawable-xhdpi/ic_secure_indicator_white.png and /dev/null differ diff --git a/src/main/res/drawable-xxhdpi/ic_lock_black_18dp.png b/src/main/res/drawable-xxhdpi/ic_lock_black_18dp.png new file mode 100644 index 00000000..dbcf3f33 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_lock_black_18dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_lock_white_18dp.png b/src/main/res/drawable-xxhdpi/ic_lock_white_18dp.png new file mode 100644 index 00000000..895aabbf Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_lock_white_18dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-xxhdpi/ic_mode_edit_black_18dp.png new file mode 100644 index 00000000..66d25296 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_mode_edit_black_18dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-xxhdpi/ic_mode_edit_white_18dp.png new file mode 100644 index 00000000..9d7f2ff9 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_mode_edit_white_18dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_secure_indicator.png b/src/main/res/drawable-xxhdpi/ic_secure_indicator.png deleted file mode 100644 index 6a74ccbe..00000000 Binary files a/src/main/res/drawable-xxhdpi/ic_secure_indicator.png and /dev/null differ diff --git a/src/main/res/drawable-xxhdpi/ic_secure_indicator_white.png b/src/main/res/drawable-xxhdpi/ic_secure_indicator_white.png deleted file mode 100644 index 4945c959..00000000 Binary files a/src/main/res/drawable-xxhdpi/ic_secure_indicator_white.png and /dev/null differ diff --git a/src/main/res/drawable-xxxhdpi/ic_lock_black_18dp.png b/src/main/res/drawable-xxxhdpi/ic_lock_black_18dp.png new file mode 100644 index 00000000..c49d420e Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_lock_black_18dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_lock_white_18dp.png b/src/main/res/drawable-xxxhdpi/ic_lock_white_18dp.png new file mode 100644 index 00000000..0dcada81 Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_lock_white_18dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_mode_edit_black_18dp.png b/src/main/res/drawable-xxxhdpi/ic_mode_edit_black_18dp.png new file mode 100644 index 00000000..827b6848 Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_mode_edit_black_18dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_18dp.png b/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_18dp.png new file mode 100644 index 00000000..34ec7092 Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_mode_edit_white_18dp.png differ diff --git a/src/main/res/layout/message_received.xml b/src/main/res/layout/message_received.xml index a998bf37..466dd045 100644 --- a/src/main/res/layout/message_received.xml +++ b/src/main/res/layout/message_received.xml @@ -91,7 +91,17 @@ android:layout_marginRight="4sp" android:alpha="0.70" android:gravity="center_vertical" - android:src="@drawable/ic_secure_indicator_white" /> + android:src="@drawable/ic_lock_white_18dp" /> + + + android:src="@drawable/ic_lock_black_18dp" /> + + + The selected area is too large (No activated accounts) This field is required + Correct message + Send corrected message -- cgit v1.2.3 From 0ca4a33bfb76d63a3c2d4447643a5bd90ac5315f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 16 Feb 2016 09:15:41 +0100 Subject: added some OTR logging --- .../java/eu/siacs/conversations/entities/Conversation.java | 11 +++++++---- .../siacs/conversations/services/XmppConnectionService.java | 8 +++++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index a0600d13..c72ac09e 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -517,15 +517,18 @@ public class Conversation extends AbstractEntity implements Blockable { return mSmp; } - public void startOtrIfNeeded() { - if (this.otrSession != null - && this.otrSession.getSessionStatus() != SessionStatus.ENCRYPTED) { + public boolean startOtrIfNeeded() { + if (this.otrSession != null && this.otrSession.getSessionStatus() != SessionStatus.ENCRYPTED) { try { this.otrSession.startSession(); + return true; } catch (OtrException e) { this.resetOtrSession(); + return false; } - } + } else { + return true; + } } public boolean endOtrIfNeeded() { diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 10f6b5ef..a8fe7586 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -288,7 +288,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa List conversations = getConversations(); for (Conversation conversation : conversations) { if (conversation.getAccount() == account && conversation.getMode() == Conversation.MODE_SINGLE) { - conversation.startOtrIfNeeded(); + if (!conversation.startOtrIfNeeded()) { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": couldn't start OTR with "+conversation.getContact().getJid()+" when needed"); + } sendUnsentMessages(conversation); } } @@ -900,8 +902,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa if (message.fixCounterpart()) { conversation.startOtrSession(message.getCounterpart().getResourcepart(), true); } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": could not fix counterpart for OTR message to contact "+message.getContact().getJid()); break; } + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+" OTR session with "+message.getContact()+" is in wrong state: "+otrSession.getSessionStatus().toString()); } break; case Message.ENCRYPTION_AXOLOTL: @@ -946,6 +951,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa break; case Message.ENCRYPTION_OTR: if (!conversation.hasValidOtrSession() && message.getCounterpart() != null) { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": create otr session without starting for "+message.getContact().getJid()); conversation.startOtrSession(message.getCounterpart().getResourcepart(), false); } break; -- cgit v1.2.3 From a9b957e8a2b9cb7729ed0d2cc8b5efa1bee50c79 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 16 Feb 2016 09:57:59 +0100 Subject: added setting to opt-out of message correction. renamed preferences and options to settings --- .../conversations/generator/AbstractGenerator.java | 7 ++++- .../siacs/conversations/parser/MessageParser.java | 2 +- .../services/XmppConnectionService.java | 4 +++ .../siacs/conversations/ui/SettingsActivity.java | 3 +- src/main/res/values/strings.xml | 32 ++++++++++++---------- src/main/res/xml/preferences.xml | 7 ++++- 6 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java index d223ab84..05fa0b82 100644 --- a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java @@ -31,7 +31,6 @@ public abstract class AbstractGenerator { "urn:xmpp:avatar:metadata+notify", "http://jabber.org/protocol/nick+notify", "urn:xmpp:ping", - "urn:xmpp:message-correct:0", "jabber:iq:version", "http://jabber.org/protocol/chatstates", AxolotlService.PEP_DEVICE_LIST+"+notify"}; @@ -39,6 +38,9 @@ public abstract class AbstractGenerator { "urn:xmpp:chat-markers:0", "urn:xmpp:receipts" }; + private final String[] MESSAGE_CORRECTION_FEATURES = { + "urn:xmpp:message-correct:0" + }; private String mVersion = null; protected final String IDENTITY_NAME = "Conversations"; protected final String IDENTITY_TYPE = "phone"; @@ -90,6 +92,9 @@ public abstract class AbstractGenerator { if (mXmppConnectionService.confirmMessages()) { features.addAll(Arrays.asList(MESSAGE_CONFIRMATION_FEATURES)); } + if (mXmppConnectionService.allowMessageCorrection()) { + features.addAll(Arrays.asList(MESSAGE_CORRECTION_FEATURES)); + } Collections.sort(features); return features; } diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 18edfdeb..620039a1 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -393,7 +393,7 @@ public class MessageParser extends AbstractParser implements updateLastseen(timestamp, account, packet.getFrom(), true); } - if (replacementId != null) { + if (replacementId != null && mXmppConnectionService.allowMessageCorrection()) { Message replacedMessage = conversation.findMessageWithRemoteIdAndCounterpart(replacementId, counterpart); if (replacedMessage != null) { final boolean fingerprintsMatch = replacedMessage.getAxolotlFingerprint() == null diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index a8fe7586..0c8f0b8b 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -2615,6 +2615,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa return getPreferences().getBoolean("confirm_messages", true); } + public boolean allowMessageCorrection() { + return getPreferences().getBoolean("allow_message_correction", true); + } + public boolean sendChatStates() { return getPreferences().getBoolean("chat_states", false); } diff --git a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java index aa23e36d..07c328b9 100644 --- a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java @@ -162,7 +162,8 @@ public class SettingsActivity extends XmppActivity implements xmppConnectionService.toggleForegroundService(); } else if (name.equals("confirm_messages") || name.equals("xa_on_silent_mode") - || name.equals("away_when_screen_off")) { + || name.equals("away_when_screen_off") + || name.equals("allow_message_correction")) { if (xmppConnectionServiceBound) { if (name.equals("away_when_screen_off")) { xmppConnectionService.toggleScreenEventReceiver(); diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 15322e04..da29bfe6 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -104,7 +104,7 @@ The name this client identifies itself with Accept files Automatically accept files smaller than… - Notification Settings + Notification Notifications Notify when a new message arrives Vibrate @@ -113,12 +113,12 @@ Play ringtone with notification Notification grace period Disable notifications for a short time after a carbon copy was received - Advanced Options + Advanced Never send crash reports By sending in stack traces you are helping the ongoing development of Conversations Confirm Messages Let your contact know when you have received and read a message - UI Options + UI OpenKeychain reported an error I/O Error decrypting file Accept @@ -278,12 +278,14 @@ Are you sure you would like to delete this fingerprint? Ignore Warning: Sending this without mutual presence updates could cause unexpected problems.\n\nGo to contact details to verify your presence subscriptions. - Encryption settings + Security Force end-to-end encryption Always send messages encrypted (except for conferences) + Allow message correction + Allow your contacts to retroactively edit their messages Don’t save encrypted messages Warning: This could lead to message loss - Expert options + Expert settings Please be careful with these About Conversations Build and licensing information @@ -464,7 +466,7 @@ 2 hours 8 hours Until further notice - Input options + Input Enter is send Use enter key to send message Show enter key @@ -528,20 +530,20 @@ Show received messages as black text on a white background Tor network unavailable Broken - Presence settings + Presence Away when screen is off Marks your resource as away when the screen is turned off Not available in silent mode Marks your resource as not available when device is in silent mode - Extended connection options - Show hostname and port options when setting up an account + Extended connection settings + Show hostname and port settings when setting up an account xmpp.example.com Add account with certificate Unable to parse certificate Leave empty to authenticate w/ certificate - Archiving preferences - Fetching archiving preferences. Please wait… - Unable to fetch archiving preferences + Archiving settting + Fetching archiving settings. Please wait… + Unable to fetch archiving setting Captcha text Captcha required enter the text from the image @@ -551,7 +553,7 @@ Error fetching OMEMO key! Verified OMEMO key with certificate! Your device does not support the selection of client certificates! - Connection options + Connection Connect via Tor Tunnel all connections through the Tor network. Requires Orbot Hostname @@ -575,7 +577,7 @@ Issuer Common Name Organization - SHA1 + SHA-1 (Not available) No certificate found Notify on all messages @@ -583,7 +585,7 @@ Notifications disabled Notifications paused Compress Pictures - Resize and compressed pictures + Resize and compress pictures Always Automatically Battery optimizations enabled diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml index 382b3199..e8747a8b 100644 --- a/src/main/res/xml/preferences.xml +++ b/src/main/res/xml/preferences.xml @@ -131,7 +131,7 @@ android:key="expert" android:summary="@string/pref_expert_options_summary" android:title="@string/pref_expert_options"> - + + Date: Tue, 16 Feb 2016 09:58:26 +0100 Subject: added gcm values file to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 7ddfcc0d..cfe01218 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ *.swp .settings +src/playstore/res/values/gcm.xml + # https://github.com/github/gitignore/blob/master/Gradle.gitignore .gradle/ build/ -- cgit v1.2.3 From d06013fbaf5fe8110619e640094440ec7226e6cf Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 16 Feb 2016 10:04:03 +0100 Subject: updated XEP list --- docs/XEPs.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/XEPs.md b/docs/XEPs.md index 1b9ea6af..873ea998 100644 --- a/docs/XEPs.md +++ b/docs/XEPs.md @@ -8,6 +8,7 @@ * XEP-0163: Personal Eventing Protocol (avatars and nicks) * XEP-0166: Jingle (only used for file transfer) * XEP-0184: Message Delivery Receipts (reply only) +* XEP-0191: Blocking command * XEP-0198: Stream Management * XEP-0234: Jingle File Transfer * XEP-0237: Roster Versioning @@ -16,7 +17,10 @@ * XEP-0260: Jingle SOCKS5 Bytestreams Transport Method * XEP-0261: Jingle In-Band Bytestreams Transport Method * XEP-0280: Message Carbons +* XEP-0308: Last Message Correction * XEP-0313: Message Archive Management * XEP-0333: Chat Markers * XEP-0352: Client State Indication -* XEP-0191: Blocking command +* XEP-0357: Push Notifications +* XEP-0363: HTTP File Upload +* XEP-0368: SRV records for XMPP over TLS -- cgit v1.2.3 From 7d63b06d842a6b66e317e17858dacf2aa4085f03 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 16 Feb 2016 10:36:40 +0100 Subject: Update README.md --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2377fc40..dcd2ae67 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,9 @@ within the create account dialog. Conversations will automatically look up the SRV records for your domain name which can point to any hostname port combination. If your server doesn’t provide those please contact your admin and have them read -[this](http://prosody.im/doc/dns#srv_records) +[this](http://prosody.im/doc/dns#srv_records). If your server operator is unwilling +to fix this you can enable advanced server settings in the expert settings of +Conversations. #### I get 'Incompatible Server' @@ -146,6 +148,13 @@ On rare occasions this error message might also be caused by a server not provid a login (SASL) mechanism that Conversations is able to handle. Conversations supports SCRAM-SHA1, PLAIN, EXTERNAL (client certs) and DIGEST-MD5. +#### How do XEP-0357: Push Notifications work? +You need to be runnning the Play Store version of Conversations and your server needs to support push notifications. Because *Google Cloud Notifications (GCM)* are tied with an API key to a specific app your server can not initiate the push message directly. Instead your server will send the push notification to the Conversations App server (operated by us) which then acts as a proxy and initiates the push message for you. The push message send form our App server through GCM doesn’t contain any personal information. It is just an empty message which will wake up your device and tell Conversations to reconnect to your server. The information send from your server to our App server depends on the configuartion of your server but can be limited to your account name. (In any case the Conversations App server won't redirect any information through GCM even if your server sends this information.) + +In summary Google will never get hold of any personal information besides that *something* happend. (Which doesn’t even have to be a message but can be some automated event as well.) We - as the operator of the App server - will just get hold of your account name (without being able to tie this to your specific device). + +If you don’t want this simply pick a server which does not offer Push Notifications or build Conversations yourself without support for push notifications. (This is available via a gradle build flavor.) Non-play store source of Conversations like the Amazon App store will also offer a version without push notifications. Conversations will just work as before and maintain its own TCP connection in the background. + #### Conversations doesn't work for me. Where can I get help? You can join our conference room on `conversations@conference.siacs.eu`. -- cgit v1.2.3 From a27cbfbf56de0bf4bc8035abbae5fa47269a35e7 Mon Sep 17 00:00:00 2001 From: petmue Date: Tue, 16 Feb 2016 12:18:43 +0100 Subject: Fixed some typos. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index dcd2ae67..4bc0d7b5 100644 --- a/README.md +++ b/README.md @@ -149,9 +149,9 @@ a login (SASL) mechanism that Conversations is able to handle. Conversations sup SCRAM-SHA1, PLAIN, EXTERNAL (client certs) and DIGEST-MD5. #### How do XEP-0357: Push Notifications work? -You need to be runnning the Play Store version of Conversations and your server needs to support push notifications. Because *Google Cloud Notifications (GCM)* are tied with an API key to a specific app your server can not initiate the push message directly. Instead your server will send the push notification to the Conversations App server (operated by us) which then acts as a proxy and initiates the push message for you. The push message send form our App server through GCM doesn’t contain any personal information. It is just an empty message which will wake up your device and tell Conversations to reconnect to your server. The information send from your server to our App server depends on the configuartion of your server but can be limited to your account name. (In any case the Conversations App server won't redirect any information through GCM even if your server sends this information.) +You need to be running the Play Store version of Conversations and your server needs to support push notifications. Because *Google Cloud Notifications (GCM)* are tied with an API key to a specific app your server can not initiate the push message directly. Instead your server will send the push notification to the Conversations App server (operated by us) which then acts as a proxy and initiates the push message for you. The push message sent from our App server through GCM doesn’t contain any personal information. It is just an empty message which will wake up your device and tell Conversations to reconnect to your server. The information send from your server to our App server depends on the configuration of your server but can be limited to your account name. (In any case the Conversations App server won't redirect any information through GCM even if your server sends this information.) -In summary Google will never get hold of any personal information besides that *something* happend. (Which doesn’t even have to be a message but can be some automated event as well.) We - as the operator of the App server - will just get hold of your account name (without being able to tie this to your specific device). +In summary Google will never get hold of any personal information besides that *something* happened. (Which doesn’t even have to be a message but can be some automated event as well.) We - as the operator of the App server - will just get hold of your account name (without being able to tie this to your specific device). If you don’t want this simply pick a server which does not offer Push Notifications or build Conversations yourself without support for push notifications. (This is available via a gradle build flavor.) Non-play store source of Conversations like the Amazon App store will also offer a version without push notifications. Conversations will just work as before and maintain its own TCP connection in the background. @@ -259,7 +259,7 @@ I am available for hire. Contact me via XMPP: `inputmice@siacs.eu` #### Why are there three end-to-end encryption methods and which one should I choose? -In most cases OTR should be the encryption method of choice. It works out of the box with most contacts as long as they are online. However, openPGP can, in some cases, (message carbons to multiple clients) be more flexible. Unlike OTR, OMEMO works even when a contact is offline, and works with multiple devices. It also allows asynchronous file-transfer when the server has [HTTP File Upload](http://xmpp.org/extensions/xep-0363.html). However, OMEMO is not as widely supported as OTR and is currently implemented only by Conversations. OMEMO should be preffered over OTR for contacts who use Conversations. +In most cases OTR should be the encryption method of choice. It works out of the box with most contacts as long as they are online. However, openPGP can, in some cases, (message carbons to multiple clients) be more flexible. Unlike OTR, OMEMO works even when a contact is offline, and works with multiple devices. It also allows asynchronous file-transfer when the server has [HTTP File Upload](http://xmpp.org/extensions/xep-0363.html). However, OMEMO is not as widely supported as OTR and is currently implemented only by Conversations. OMEMO should be preferred over OTR for contacts who use Conversations. #### How do I use OpenPGP @@ -346,7 +346,7 @@ your connection or with file transfer. #### I found a bug Please report it to our [issue tracker][issues]. If your app crashes please -provide a stack trace. If you are experiencing misbehaviour please provide +provide a stack trace. If you are experiencing misbehavior please provide detailed steps to reproduce. Always mention whether you are running the latest Play Store version or the current HEAD. If you are having problems connecting to your XMPP server your file transfer doesn’t work as expected please always -- cgit v1.2.3 From 349dd8291df78c33d6570d7f7937362ac08e4d66 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 16 Feb 2016 12:52:31 +0100 Subject: made clear that archiving preferences are server side --- src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java | 2 +- src/main/res/values/strings.xml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java index 2656966b..53fa9ff7 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java @@ -918,7 +918,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate mFetchingMamPrefsToast.cancel(); } AlertDialog.Builder builder = new Builder(EditAccountActivity.this); - builder.setTitle(R.string.mam_prefs); + builder.setTitle(R.string.server_side_mam_prefs); String defaultAttr = prefs.getAttribute("default"); final List defaults = Arrays.asList("never", "roster", "always"); final AtomicInteger choice = new AtomicInteger(Math.max(0,defaults.indexOf(defaultAttr))); diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index da29bfe6..acaaf156 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1,6 +1,5 @@ - Conversations Settings New conversation @@ -541,9 +540,10 @@ Add account with certificate Unable to parse certificate Leave empty to authenticate w/ certificate - Archiving settting - Fetching archiving settings. Please wait… - Unable to fetch archiving setting + Archiving preferences + Server-side archiving preferences + Fetching archiving preferences. Please wait… + Unable to fetch archiving preferences Captcha text Captcha required enter the text from the image -- cgit v1.2.3 From 726393f8da8b5e4dd10d4a7f37339810e0a9fa6c Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 16 Feb 2016 12:59:54 +0100 Subject: version bump to 1.10.0-beta and changelog --- CHANGELOG.md | 5 +++++ build.gradle | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe593143..f847e94d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ###Changelog +####Version 1.10.0 +* Support for XEP-0357: Push Notifications +* Support for XEP-0308: Last Message Correction +* introduced build flavors to make dependence on play-services optional + ####Version 1.9.4 * prevent cleared Conversations from reloading history with MAM * various MAM fixes diff --git a/build.gradle b/build.gradle index 34d63dfa..ce88c410 100644 --- a/build.gradle +++ b/build.gradle @@ -58,8 +58,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 23 - versionCode 123 - versionName "1.9.4" + versionCode 124 + versionName "1.10.0-beta" archivesBaseName += "-$versionName" } -- cgit v1.2.3 From 86b1865eec5784795358b3d81eefe39d37ecd55a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 16 Feb 2016 14:22:21 +0100 Subject: fixed regression that caused ui to redraw a lot --- .../siacs/conversations/services/XmppConnectionService.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 0c8f0b8b..b7ac7571 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -2726,7 +2726,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa return null; } - public void markRead(final Conversation conversation) { + public boolean markRead(final Conversation conversation) { mNotificationService.clear(conversation); final List readMessages = conversation.markRead(); if (readMessages.size() > 0) { @@ -2739,8 +2739,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } }; mDatabaseExecutor.execute(runnable); + updateUnreadCountBadge(); + return true; + } else { + return false; } - updateUnreadCountBadge(); } public synchronized void updateUnreadCountBadge() { @@ -2758,7 +2761,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa public void sendReadMarker(final Conversation conversation) { final Message markable = conversation.getLatestMarkableMessage(); - this.markRead(conversation); + if (this.markRead(conversation)) { + updateConversationUi(); + } if (confirmMessages() && markable != null && markable.getRemoteMsgId() != null) { Log.d(Config.LOGTAG, conversation.getAccount().getJid().toBareJid() + ": sending read marker to " + markable.getCounterpart().toString()); Account account = conversation.getAccount(); @@ -2766,7 +2771,6 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa MessagePacket packet = mMessageGenerator.confirm(account, to, markable.getRemoteMsgId()); this.sendMessagePacket(conversation.getAccount(), packet); } - updateConversationUi(); } public SecureRandom getRNG() { -- cgit v1.2.3 From c2fbdbde830fb3f15e4bdd1c1fb904e69b68927e Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 16 Feb 2016 14:22:47 +0100 Subject: log reason why otr message won't be parsed --- src/main/java/eu/siacs/conversations/parser/MessageParser.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 620039a1..69b0e828 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -312,7 +312,7 @@ public class MessageParser extends AbstractParser implements } boolean isTypeGroupChat = packet.getType() == MessagePacket.TYPE_GROUPCHAT; - boolean isProperlyAddressed = (to != null ) && (!to.isBareJid() || account.countPresences() == 1); + boolean isProperlyAddressed = (to != null ) && (!to.isBareJid() || account.countPresences() <= 1); boolean isMucStatusMessage = from.isBareJid() && mucUserElement != null && mucUserElement.hasChild("status"); if (packet.fromAccount(account)) { status = Message.STATUS_SEND; @@ -357,6 +357,7 @@ public class MessageParser extends AbstractParser implements return; } } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": ignoring OTR message from "+from+" isForwarded="+Boolean.toString(isForwarded)+", isProperlyAddressed="+Boolean.valueOf(isProperlyAddressed)); message = new Message(conversation, body, Message.ENCRYPTION_NONE, status); } } else if (pgpEncrypted != null) { -- cgit v1.2.3 From 3626e4b3a0d3d3da4be1bdf7645045d8cf892b50 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 17 Feb 2016 16:50:48 +0100 Subject: fixed regression that caused messages in muc not being send --- .../siacs/conversations/services/XmppConnectionService.java | 13 +++++++------ .../java/eu/siacs/conversations/xmpp/XmppConnection.java | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index b7ac7571..33f7210f 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -287,7 +287,8 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } List conversations = getConversations(); for (Conversation conversation : conversations) { - if (conversation.getAccount() == account && conversation.getMode() == Conversation.MODE_SINGLE) { + if (conversation.getAccount() == account + && !account.pendingConferenceJoins.contains(conversation)) { if (!conversation.startOtrIfNeeded()) { Log.d(Config.LOGTAG,account.getJid().toBareJid()+": couldn't start OTR with "+conversation.getContact().getJid()+" when needed"); } @@ -1757,20 +1758,20 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa List conversations = getConversations(); for (Conversation conversation : conversations) { if (conversation.getMode() == Conversation.MODE_MULTI && conversation.getAccount() == account) { - joinMuc(conversation, true, null); + joinMuc(conversation); } } } public void joinMuc(Conversation conversation) { - joinMuc(conversation, false, null); + joinMuc(conversation, null); } - private void joinMuc(Conversation conversation, boolean now, final OnConferenceJoined onConferenceJoined) { + private void joinMuc(Conversation conversation, final OnConferenceJoined onConferenceJoined) { Account account = conversation.getAccount(); account.pendingConferenceJoins.remove(conversation); account.pendingConferenceLeaves.remove(conversation); - if (account.getStatus() == Account.State.ONLINE || now) { + if (account.getStatus() == Account.State.ONLINE) { conversation.resetMucOptions(); fetchConferenceConfiguration(conversation, new OnConferenceConfigurationFetched() { @@ -1949,7 +1950,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa String name = new BigInteger(75, getRNG()).toString(32); Jid jid = Jid.fromParts(name, server, null); final Conversation conversation = findOrCreateConversation(account, jid, true); - joinMuc(conversation, true, new OnConferenceJoined() { + joinMuc(conversation, new OnConferenceJoined() { @Override public void onConferenceJoined(final Conversation conversation) { Bundle options = new Bundle(); diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 889457ff..6be220c7 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -1077,10 +1077,10 @@ public class XmppConnection implements Runnable { if (mPendingServiceDiscoveries == 0) { Log.d(Config.LOGTAG,account.getJid().toBareJid()+": done with service discovery"); Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": online with resource " + account.getResource()); - changeStatus(Account.State.ONLINE); if (bindListener != null) { bindListener.onBind(account); } + changeStatus(Account.State.ONLINE); } } } -- cgit v1.2.3 From 59978e157ccbf4717a15238ddb0b0d0d422d7e3f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 17 Feb 2016 16:51:36 +0100 Subject: only offer message correction for the very last message --- .../eu/siacs/conversations/entities/Conversation.java | 15 +++++++++++---- .../java/eu/siacs/conversations/entities/Message.java | 15 +++++++++++++++ .../java/eu/siacs/conversations/parser/MessageParser.java | 6 +++++- .../eu/siacs/conversations/ui/ConversationFragment.java | 9 ++++++--- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index c72ac09e..a179d96b 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -227,11 +227,18 @@ public class Conversation extends AbstractEntity implements Blockable { return null; } - public Message findMessageWithRemoteIdAndCounterpart(String id, Jid counterpart) { + public Message findMessageWithRemoteIdAndCounterpart(String id, Jid counterpart, boolean received, boolean carbon) { synchronized (this.messages) { - for(Message message : this.messages) { - if(id.equals(message.getRemoteMsgId()) && counterpart.equals(message.getCounterpart())) { - return message; + for(int i = this.messages.size() - 1; i >= 0; --i) { + Message message = messages.get(i); + if (counterpart.equals(message.getCounterpart()) + && ((message.getStatus() == Message.STATUS_RECEIVED) == received) + && (carbon == message.isCarbon() || received) ) { + if (id.equals(message.getRemoteMsgId())) { + return message; + } else { + return null; + } } } } diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java index 1f9212fd..63db9a44 100644 --- a/src/main/java/eu/siacs/conversations/entities/Message.java +++ b/src/main/java/eu/siacs/conversations/entities/Message.java @@ -428,6 +428,21 @@ public class Message extends AbstractEntity { } } + public boolean isLastCorrectableMessage() { + Message next = next(); + while(next != null) { + if (next.isCorrectable()) { + return false; + } + next = next.next(); + } + return isCorrectable(); + } + + private boolean isCorrectable() { + return getStatus() != STATUS_RECEIVED && !isCarbon(); + } + public boolean mergeable(final Message message) { return message != null && (message.getType() == Message.TYPE_TEXT && diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 69b0e828..c4b63d61 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -336,6 +336,7 @@ public class MessageParser extends AbstractParser implements if (isTypeGroupChat) { if (counterpart.getResourcepart().equals(conversation.getMucOptions().getActualNick())) { status = Message.STATUS_SEND_RECEIVED; + isCarbon = true; //not really carbon but received from another resource if (mXmppConnectionService.markMessage(conversation, remoteMsgId, status)) { return; } else if (remoteMsgId == null || Config.IGNORE_ID_REWRITE_IN_MUC) { @@ -395,7 +396,10 @@ public class MessageParser extends AbstractParser implements } if (replacementId != null && mXmppConnectionService.allowMessageCorrection()) { - Message replacedMessage = conversation.findMessageWithRemoteIdAndCounterpart(replacementId, counterpart); + Message replacedMessage = conversation.findMessageWithRemoteIdAndCounterpart(replacementId, + counterpart, + message.getStatus() == Message.STATUS_RECEIVED, + message.isCarbon()); if (replacedMessage != null) { final boolean fingerprintsMatch = replacedMessage.getAxolotlFingerprint() == null || replacedMessage.getAxolotlFingerprint().equals(message.getAxolotlFingerprint()); diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 6ead9962..c02a33b0 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -514,6 +514,10 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa private void populateContextMenu(ContextMenu menu) { final Message m = this.selectedMessage; + Message relevantForCorrection = m; + while(relevantForCorrection.mergeable(relevantForCorrection.next())) { + relevantForCorrection = relevantForCorrection.next(); + } if (m.getType() != Message.TYPE_STATUS) { activity.getMenuInflater().inflate(R.menu.message_context, menu); menu.setHeaderTitle(R.string.message_options); @@ -530,9 +534,8 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa && m.treatAsDownloadable() != Message.Decision.MUST) { copyText.setVisible(true); } - if (m.getType() == Message.TYPE_TEXT - && m.getStatus() != Message.STATUS_RECEIVED - && !m.isCarbon()) { + if (relevantForCorrection.getType() == Message.TYPE_TEXT + && relevantForCorrection.isLastCorrectableMessage()) { correctMessage.setVisible(true); } if ((m.getType() != Message.TYPE_TEXT -- cgit v1.2.3 From ac687d6bbd08674d97a52b3548df8fe49bee48d9 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 17 Feb 2016 16:52:57 +0100 Subject: don't log start reason --- src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 33f7210f..9b730637 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -477,7 +477,6 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa final String action = intent == null ? null : intent.getAction(); boolean interactive = false; if (action != null) { - Log.d(Config.LOGTAG,"start reason: "+action); switch (action) { case ConnectivityManager.CONNECTIVITY_ACTION: if (hasInternetConnection() && Config.RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE) { -- cgit v1.2.3 From 49a3f6f281c9a01f9bdaf7f5141c46dd1c6ca2cb Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 19 Feb 2016 11:09:28 +0100 Subject: never parse show in presences as offline --- .../eu/siacs/conversations/entities/Presence.java | 26 +++++++++++++--------- .../siacs/conversations/parser/PresenceParser.java | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Presence.java b/src/main/java/eu/siacs/conversations/entities/Presence.java index 69cde832..442f1bca 100644 --- a/src/main/java/eu/siacs/conversations/entities/Presence.java +++ b/src/main/java/eu/siacs/conversations/entities/Presence.java @@ -1,6 +1,7 @@ package eu.siacs.conversations.entities; import java.lang.Comparable; +import java.util.Locale; import eu.siacs.conversations.xml.Element; @@ -32,21 +33,24 @@ public class Presence implements Comparable { this.hash = hash; } - public static Presence parse(Element show, Element caps) { + public static Presence parse(String show, Element caps) { final String hash = caps == null ? null : caps.getAttribute("hash"); final String ver = caps == null ? null : caps.getAttribute("ver"); - if ((show == null) || (show.getContent() == null)) { + if (show == null) { return new Presence(Status.ONLINE, ver, hash); - } else if (show.getContent().equals("away")) { - return new Presence(Status.AWAY, ver, hash); - } else if (show.getContent().equals("xa")) { - return new Presence(Status.XA, ver, hash); - } else if (show.getContent().equals("chat")) { - return new Presence(Status.CHAT, ver, hash); - } else if (show.getContent().equals("dnd")) { - return new Presence(Status.DND, ver, hash); } else { - return new Presence(Status.OFFLINE, ver, hash); + switch (show.toLowerCase(Locale.US)) { + case "away": + return new Presence(Status.AWAY, ver, hash); + case "xa": + return new Presence(Status.XA, ver, hash); + case "dnd": + return new Presence(Status.DND, ver, hash); + case "chat": + return new Presence(Status.CHAT, ver, hash); + default: + return new Presence(Status.ONLINE, ver, hash); + } } } diff --git a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java index 45c31e2b..dc02eda8 100644 --- a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java +++ b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java @@ -186,7 +186,7 @@ public class PresenceParser extends AbstractParser implements } int sizeBefore = contact.getPresences().size(); - final Element show = packet.findChild("show"); + final String show = packet.findChildContent("show"); final Element caps = packet.findChild("c", "http://jabber.org/protocol/caps"); final Presence presence = Presence.parse(show, caps); contact.updatePresence(resource, presence); -- cgit v1.2.3 From ad60bc002c920f4f899eca65263ee1f3a4b6d64e Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 19 Feb 2016 11:14:16 +0100 Subject: pulled translations from transifex --- src/main/res/values-ar/strings.xml | 3 --- src/main/res/values-bg/strings.xml | 26 +++++++++++++--------- src/main/res/values-ca/strings.xml | 6 ----- src/main/res/values-cs/strings.xml | 30 +++++++++++++++---------- src/main/res/values-de/strings.xml | 30 +++++++++++++++---------- src/main/res/values-el/strings.xml | 6 ----- src/main/res/values-es/strings.xml | 32 ++++++++++++++++----------- src/main/res/values-eu/strings.xml | 38 +++++++++++++++++++++++--------- src/main/res/values-fr/strings.xml | 40 ++++++++++++++++++++++++---------- src/main/res/values-gl/strings.xml | 3 --- src/main/res/values-id/strings.xml | 6 ----- src/main/res/values-it/strings.xml | 10 --------- src/main/res/values-iw/strings.xml | 8 ------- src/main/res/values-ja/strings.xml | 30 +++++++++++++++---------- src/main/res/values-ko/strings.xml | 10 --------- src/main/res/values-nb-rNO/strings.xml | 10 --------- src/main/res/values-nl/strings.xml | 10 --------- src/main/res/values-pl/strings.xml | 10 --------- src/main/res/values-pt-rBR/strings.xml | 36 ++++++++++++++++++++++-------- src/main/res/values-pt/strings.xml | 6 ----- src/main/res/values-ro-rRO/strings.xml | 14 ++++++++---- src/main/res/values-ru/strings.xml | 9 -------- src/main/res/values-sk/strings.xml | 6 ----- src/main/res/values-sr/strings.xml | 10 --------- src/main/res/values-sv/strings.xml | 24 ++++++++++++-------- src/main/res/values-tr-rTR/strings.xml | 22 ++++++++++++------- src/main/res/values-vi/strings.xml | 10 --------- src/main/res/values-zh-rCN/strings.xml | 15 ------------- src/main/res/values-zh-rTW/strings.xml | 5 ----- 29 files changed, 212 insertions(+), 253 deletions(-) diff --git a/src/main/res/values-ar/strings.xml b/src/main/res/values-ar/strings.xml index b87e7179..2e59983c 100644 --- a/src/main/res/values-ar/strings.xml +++ b/src/main/res/values-ar/strings.xml @@ -92,14 +92,12 @@ الريسورس ضبط استقبال الملفات اقبل تلقائيا الملفات أقل من - اعدادات الإشعارات الإشعارات أخبرني عندما تصل رساله جديده إعداد الإهتزاز تفعيل الاهتزاز عندما تصل رساله جديده التبيه الصوتي سماع صوت عندما تصل رساله - اعدادات متقدمّة لا ترسل تقارير أخطاء الغاء ارسال تقارير الأخطاء يقلل من فرص حل المشكلة سريعا فكن متعاون تأكيد الرسالة @@ -288,7 +286,6 @@ ساعتين 8 ساعات حتى إشعار آخر - خيارات الادخال أدخل للإرسال استخدام مفتاح الدخول لإرسال رسالة عرض مفتاح الادخال diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index b87de768..4f2a548c 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -102,7 +102,7 @@ Името, с което се определя този клиент Приемане на файлове Автоматично приемане на файлове с размер, по-малък от… - Настройки за известията + Известие Известия Известяване при получаване на ново съобщение Вибрация @@ -111,12 +111,12 @@ Изпълнение на звук с известието Продължителност на отсрочване на известията Изключва известията за кратко, след като бъде получено копие на съобщение - Разширени настройки + Разширени Никога да не се изпращат доклади за сривове Изпращайки проследявания на стека, Вие помагате за непрекъснатото развитие на Conversations Потвърждаване на съобщенията Уведомява контакта Ви, че сте приели и прочели съобщението му - Настройки на интерфейса + Потр. интерфейс OpenKeychain докладва за грешка В/И грешка при дешифроването на файла Приемане @@ -191,6 +191,7 @@ XEP-0198: Управление на потоците XEP-0163: PEP (Аватари / OMEMO) XEP-0363: Качване на файл през HTTP + XEP-0357: Изпращане налично не е налично Липсват обявления за публичен ключ @@ -275,12 +276,14 @@ Сигурни ли сте, че искате да изтриете този отпечатък? Пренебрегване Внимание: Изпращането на това без съвместни актуализации на присъствието може да доведе до неочаквани проблеми.\n\nПогледнете подробностите за контакта, за да проверите дали сте абониран за актуализации на присъствието. - Настройки за шифроване + Сигурност Налагане на шифроване в двете посоки Съобщенията да се изпращат винаги шифровани (освен в беседите) + Позволяване на поправянето на съобщения + Позволяване на контактите да редактират съобщенията си след като са ги изпратили. Шифрованите съобщения да не се запазват Внимание: Това може да доведе до загуба на съобщения - Настройки за напреднали + Експертни настройки Моля, бъдете внимателни с тези Относно Conversations Информация за версията и лицензите @@ -430,7 +433,7 @@ 2 часа 8 часа До отмяна - Настройки за въвеждане + Въвеждане Enter изпраща Натискането на клавиша Enter изпраща съобщението Показване на клавиша Enter @@ -494,18 +497,19 @@ Показване на получените съобщения с черен текст на бял фон Мрежата на Тор е недостъпна Повредено - Настройки за присъствието + Присъствие Отсъстващ, когато екранът е изключен Преминава в състояние „отсъстващ“ когато екранът бъде изключен Недостъпен, в тих режим Преминава в състояние „недостъпен“ когато устройството е в тих режим - Разширени настройки на връзката + Разширени настройки за връзката Показване на настройките за сървър и порт при установка на профил xmpp.example.com Добавяне на профил със сертификат Неуспешно прочитане на сертификата Оставете празно за удостоверяване със сертификат Настройки за архивирането + Настройки за архивирането на сървъра Получаване на настройките за архивирането. Моля, изчакайте… Неуспешно получаване на настройките за архивирането Текст за проверка @@ -517,7 +521,7 @@ Грешка при получаването на ключа за OMEMO! Ключът за OMEMO беше потвърден със сертификат! Устройството Ви не поддържа избраните клиентски сертификати! - Настройки за връзката + Връзка Свързване през Тор Всички връзки да минават през мрежата на Тор. Изисква Орбот Име на сървър @@ -541,7 +545,7 @@ Издател Име Организация - Контролна сума SHA1 + SHA-1 (Няма) Няма намерен сертификат Известяване за всички съобщения @@ -559,4 +563,6 @@ Избраната област е твърде голяма (Няма активирани профили) Това поле е задължително + Поправяне на съобщението + Изпращане на поправеното съобщение diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml index 6e91e2b6..6f48ab63 100644 --- a/src/main/res/values-ca/strings.xml +++ b/src/main/res/values-ca/strings.xml @@ -93,7 +93,6 @@ El nom que identifica aquest client amb Acceptar fitxers Accepta fitxers automàticament amb una mida menor a… - Ajustos de notificacions Notificacions Notifica quan arriba un nou missatge Vibra @@ -102,12 +101,10 @@ Reprodueix el to de trucada amb la notificació Notificació del període d\'espera Desactiva les notificacions durant un breu termini després de rebre una còpia de missatges carbon - Opcions avançades Mai enviïs informes d\'errors Enviant traces d\'execució d\'ajudes al futur desenvolupament del Conversations. Confirmant missatges Deixeu que el seu contacte sàpiga quan heu rebut i llegit un missatge - Opcions de UI OpenKeychain ha reportat un error I/O Error al desxifrar un arxiu Acceptar @@ -249,12 +246,10 @@ Estàs segur que t\'agradaria eliminar l\'empremta digital? Ignorar Perill:L\'enviament d\'aquest sense actualitzacions de presència podria causar problemes inesperats.\n\n Ves als detalls del contacte per verificar les subscripcions de presència. - Configuració del xifratge Força d\'extrema extrem del xifrat Enviar sempre missatges xifrat( Excepte per les sales) No guardar els misstages xifrats Perill: Podria portar a la pèrdua dels missatges - Opcions per a experts Aneu amb cura amb aixó Sobre Conversations Informació sobre la construció i la seva llicència @@ -381,7 +376,6 @@ 2 Hores 8 Hores Fins nou avís - Opcions d\'entrada Entra per enviar Utilitza el botó enter per enviar el missatge Mostra el botó enter diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index aeaf7f69..10730490 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -102,7 +102,7 @@ Jméno se kterým se tento klient identifikuje Přijímat soubory Automaticky přijímat soubory menší než… - Nastavení upozornění + Upozornění Upozornění Upozornit při přijetí nové zprávy Vibrovat @@ -111,12 +111,12 @@ Přehrát zvuk společně s upozorněním Četnost upozornění Neupozorňovat krátce poté co byla obdržena kopie zprávy - Pokročilé nastavení + Rozšířené Neodesílat detaily o pádu aplikace Zasláním detailů o důvodu selhání pomůžete dalšímu vývoji aplikace Konverzace Potvrzovat zprávy Oznamovat kontaktům, že zpráva byla přijata a přečtena - Nastavení UI + UI OpenKeychain nahlásil chybu I/O chyba dešifrování souboru Přijmout @@ -191,6 +191,7 @@ XEP-0198: Nastavení proudu XEP-0163: PEP (Avatars / OMEMO) XEP-0363: HTTP File Upload + XEP-0357: Push dostupný nedostupný Chybí oznámení o veřejném klíči @@ -275,9 +276,11 @@ Chcete opravdu smazat tento identifikátor? Ignorovat Varování: Odeslání bez povolení změn stavu může způsobit nečekané problémy na obou stranách.\n\nPřejdi na detaily kontaktu pro ověření povolení o změnách stavu. - Nastavení šifrování + Zabezpečení Vynutit šifrování Vždy zasílat šifrované zprávy (mimo konference) + Povolit opravu zpráv + Povolí kontaktům zpětné upravování jejich zpráv Neukládat šifrované zprávy Varování: Toto může vést ke ztrátě zpráv Expertní nastavení @@ -430,7 +433,7 @@ 2 hodiny 8 hodin Než opět změním - Nastavení zadávání + Vstup Enter odesílá Použít klávesu enter pro odesílání zpráv Zobrazit klávesu enter @@ -496,20 +499,21 @@ Zobrazovat přijaté zprávy jako černý text na bílém pozadí Tor síť není dostupná Rozbité - Nastavení přítomnosti + Stav Pryč při vypnuté obrazovce Při vypnuté obrazovce označí váš stav jako pryč Nedostupný při vypnutém zvuku Při tichém módu označí váš stav jako nedostupný - Rozšířené možnosti připojení - Zobrazovat hodnoty hostname a port při nastavování účtu + Rozšířená nastavení připojení + Zobrazovat nastavení hostname a port při vytváření účtu xmpp.server.cz Přidat účet s certifikátem Nelze načíst certifikát Nechat prázdné pro ověření s certifikátem Nastavení archivace + Nastavení archivace na serveru Získávání nastavení archivace. Chvíli strpení... - Získání nastavení archivace se nezdařilo + Nelze získat nastavení archivace Captcha text Captcha vyžadována opište text z obrázku @@ -519,7 +523,7 @@ Chyba získání OMEMO klíče! OMEMO klíč ověřen certifikátem! Tento přístroj nepodporuje výběr klientského certifikátu! - Možnosti připojení + Připojení Připojit přes Tor Vedení všech připojení po Tor síti vyžaduje aplikaci Orbot Hostname @@ -544,7 +548,7 @@ Vydavatel Jméno Organizace - SHA1 + SHA-1 (Nedostupné) Certifikát nenalezen Upozorňovat na všechny zprávy @@ -552,7 +556,7 @@ Upozornění vypnuta Upozornění pozastavena Komprimovat obrázky - Upravené a komprimované obrázky + Upravit velikost a komprimovat obrázky Vždy Automaticky Povolena optimalizace využití baterie @@ -562,4 +566,6 @@ Vybraný obsah je příliš dlouhý (Žádné aktivované účty) Toto pole je vyžadováno + Opravit zprávu + Odeslat opravenou zprávu diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index c7afc348..0968a5f7 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -102,7 +102,7 @@ Der Name, mit dem sich der Client selbst identifiziert Dateien annehmen Dateien automatisch annehmen, die kleiner sind als … - Benachrichtigungen + Benachrichtigung Benachrichtigungen Benachrichtigen bei Erhalt einer neuen Nachricht Vibrieren @@ -111,7 +111,7 @@ Benachrichtigungston wiedergeben Gnadenfrist Deaktiviere Benachrichtigungen für eine kurze Zeit nach Erhalt einer Nachricht, die von einem anderen deiner Clients kommt. - Erweiterte Optionen + Erweitert Niemals Absturzberichte senden Wenn du Absturzberichte einschickst, hilfst du Conversations stetig zu verbessern Lese- und Empfangsbestätigung senden @@ -191,6 +191,7 @@ XEP-0198: Stream Management XEP-0163: PEP (Avatare/OMEMO) XEP-0363: HTTP File Upload + XEP-0357: Push ja nein Öffentlicher Schlüssel fehlt @@ -275,12 +276,14 @@ Soll dieser Fingerabdruck wirklich gelöscht werden? Ignorieren Achtung: Ohne gegenseitige Kenntnis des Online-Status kann es zu unerwarteten Problemen kommen.\n\nBitte die Einstellungen in den Kontakt-Details prüfen. - Verschlüsselungs-Einstellungen + Sicherheit Ende-zu-Ende-Verschlüsselung erzwingen Nachrichten immer verschlüsseln (außer für Konferenzen) + Nachrichtenkorrektur erlauben + Erlaube Deinen Kontakten das nachträgliche Korrigieren ihrer Nachrichten Verschlüsselte Nachrichten nicht speichern Achtung: kann zu Nachrichtenverlust führen - Einstellungen für Experten + Experteneinstellungen Hier bitte vorsichtig sein Über Conversations Versions- und Lizenzinformationen @@ -299,7 +302,7 @@ Konferenz-Name Konferenz-Thema statt Raum-JID als Namen verwenden Unterhaltung automatisch beitreten - Autojoin Flag in Unterhaltungslesezeichen beachten + Autojoin-Flag in Konferenzlesezeichen beachten OTR-Fingerabdruck in die Zwischenablage kopiert! OMEMO-Fingerabdruck in die Zwischenablage kopiert! Du wurdest von der Konferenz ausgeschlossen @@ -430,7 +433,7 @@ 2 Stunden 8 Stunden Bis auf Weiteres - Eingabe-Optionen + Eingabe Eingabe-Taste (Enter) sendet Nachricht Eingabe-Taste (Enter) zum Versenden einer Nachricht verwenden Zeige Eingabe-Taste (Enter) @@ -494,19 +497,20 @@ Empfangene Nachrichten als schwarzen Text auf weißem Hintergrund anzeigen Tor-Netzwerk nicht verfügbar Fehlerhaft - Status Einstellungen + Status Abwesend bei abgeschaltetem Bildschirm Setzt deinen Status auf \"abwesend\", solange dein Bildschirm abgeschaltet ist Nicht verfügbar bei Stummschaltung Setzt deinen Status auf \"nicht verfügbar\", solange dein Telefon lautlos ist Erweiterte Verbindungs-Optionen - Zeige Hostname- und Port-Optionen + Hostname- und Port-Optionen bei Kontoeinrichtung anzeigen xmpp.domain.de Konto mit Zertifikat hinzufügen Zertifikat kann nicht gelesen werden Leer lassen, um mit Zertifikat anzumelden Archivierungseinstellungen - Archivierungseinstellungen werden abgerufen. Bitte warten ... + Archivierungseinstellungen des Servers + Archivierungseinstellungen werden abgerufen. Bitte warten … Archivierungseinstellungen konnten nicht abgerufen werden Captcha Text Captcha erforderlich @@ -517,7 +521,7 @@ Kann OMEMO Schlüssel nicht empfangen! OMEMO Schlüssel mit Zertifikat bestätigt! Dein Gerät unterstützt das Auswählen von Client-Zertifikaten nicht! - Verbindungs-Optionen + Verbindung Über TOR verbinden Alle Verbindungen über das Tor-Netzwerk tunneln. Benötigt Orbot Hostname @@ -539,9 +543,9 @@ Zertifikatinformationen Betreff Aussteller - Gemeinsamer Name + Name Organisation - SHA1 + SHA-1 (Nicht verfügbar) Kein Zertifikat gefunden Bei allen Nachrichten benachrichtigen @@ -559,4 +563,6 @@ Der ausgewählte Bereich ist zu groß (Keine aktivierten Konten) Dieses Feld ist erforderlich + Nachricht korrigieren + Korrigierte Nachricht senden diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index e55a6b2d..0bdc6a5e 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -93,7 +93,6 @@ Το όνομα με το οποίο ταυτοποιείται αυτό το πρόγραμμα-πελάτης Αποδοχή αρχείων Αυτόματη αποδοχή αρχείων μικρότερα από... - Επιλογές ειδοποιήσεων Ειδοποιήσεις Ειδοποίηση όταν λαμβάνεται ένα νέο μήνυμα Δόνηση @@ -102,12 +101,10 @@ Αναπαραγωγή ήχου κλήσης με την ειδοποίηση Περίοδος χάριτος ειδοποιήσεων Απενεργοποίηση ειδοποιήσεων για λίγο χρόνο μετά από τη λήψη ακριβούς αντιγράφου - Προχωρημένες επιλογές Να μην αποστέλλονται αναφορές λαθών Στέλνοντας ίχνη στοίβας βοηθάτε την συνεχόμενη ανάπτυξη του Conversations Επιβεβαίωση μηνυμάτων Επιτρέψτε στην επαφή σας να ειδοποιείται όταν έχετε λάβει και διαβάσει ένα μήνυμα - Επιλογές διεπαφής χρήστη Το OpenKeychain ανέφερε κάποιο σφάλμα Σφάλμα εισόδου/εξόδου κατά την αποκρυπτογράφηση αρχείου Αποδοχή @@ -249,12 +246,10 @@ Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το αποτύπωμα; Αγνόηση Προειδοποίηση: Η αποστολή αυτού χωρίς αμφίδρομες ενημερώσεις παρουσίας μπορεί να προκαλέσει απροσδόκητα προβλήματα.\n\nΠηγαίνετε στις λεπτομέρειες επαφής για να επαληθεύσετε τις συνδρομές παρουσίας σας. - Ρυθμίσεις κρυπτογράφησης Επιβολή κρυπτογράφησης από άκρη σε άκρη Πάντα αποστολή κρυπτογραφημένων μηνυμάτων (εκτός από συνδιασκέψεις) Χωρίς αποθήκευση κρυπτογραφημένων μηνυμάτων Προειδοποίηση: Αυτό μπορεί να οδηγήσει σε απώλεια μηνυμάτων - Επιλογές για προχωρημένους Παρακαλώ να είστε προσεκτικοί με αυτά Σχετικά με το Conversations Πληροφορίες δημιουργίας και αδειών @@ -381,7 +376,6 @@ 2 ώρες 8 ώρες Μέχρι νεωτέρας - Επιλογές εισόδου Αποστολή με το πλήκτρο Enter Χρήση του πλήκτρου Enter για την αποστολή μηνύματος Εμφάνιση του πλήκτρου Enter diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index 2a8ede55..84df1850 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -102,7 +102,7 @@ El nombre que identifica el cliente que estás utilizando Aceptar archivos De forma automática aceptar archivos menores que… - Ajustes de notificación + Notificaciones Notificaciones Notificar cuando llega un nuevo mensaje Vibrar @@ -111,12 +111,12 @@ Reproduce tono con la notificación Notificaciones Carbons Deshabilita las notificaciones durante un corto periodo de tiempo después de recibir la copia del mensaje carbon - Opciones avanzadas + Avanzado Nunca informar de errores Si envías registros de error ayudas al desarrollo de Conversations Confirmar mensajes Permitir a tus contactos saber cuando recibes y lees un mensaje - Opciones de interfaz + Pantalla OpenKeychain reportó un error Error descifrando archivo Aceptar @@ -191,6 +191,7 @@ XEP-0198: Stream Management XEP-0163: PEP (Avatars / OMEMO) XEP-0363: HTTP File Upload + XEP-0357: Push No Se han perdido las claves de anuncio públicas @@ -275,12 +276,14 @@ ¿Estás seguro de que quieres eliminar esta huella digital OTR? Ignorar Aviso: Enviando esto sin suscripción de presencia por ambas partes podría causar problemas inesperados.\n\nVerficia la suscripción de presencia en detalles del contacto. - Ajustes de cifrado + Seguridad Forzar cifrado end-to-end Siempre enviar mensajes cifrados (excepto para conversaciones en grupo) + Corrección de mensaje + Permitir a tus contactos editar mensajes previamente enviados No guardar mensajes cifrados Aviso: Esto podría llevar a pérdida de mensajes - Ajustes avanzados + Opciones para expertos Por favor, cuidado con estas opciones Acerca de Conversations Información de compilación y licencia @@ -430,7 +433,7 @@ 2 horas 8 horas Hasta nuevo aviso - Opciones de entrada + Entrada Intro para enviar Usar la tecla intro para enviar el mensaje Mostrar tecla Intro @@ -494,19 +497,20 @@ Mostrar mensajes recibidos en texto negro con fondo blanco Red Tor no disponible. Error - Opciones de presencia + Presencia Ausente con pantalla apagada Cambia tu estado a ausente cuando la pantalla está apagada No disponible en modo silencio Cambia tu estado a no disponible cuando el dispositivo está en modo silencio - Opciones de conexión avanzadas - Mostrar las opciones de hostname y puerto cuando se está creando una nueva cuenta + Opciones de conexión + Mostrar el hostname y el puerto cuando se está creando una cuenta xmpp.ejemplo.com Añadir cuenta con certificado No se ha podido leer el certificado Dejar vacío para autenticar certificado w/ Preferencias de archivado - Buscando las preferencias de archivado. Por favor, espera... + Preferencias de archivado en servidor + Buscando preferencias de archivado. Por favor, espera... No se ha podido conseguir las preferencias de archivado Texto captcha Captcha requerido @@ -517,7 +521,7 @@ ¡Error buscando clave OMEMO! ¡Clave OMEMO con certificado verificada! ¡Tu dispositivo no soporta la elección de certificados de cliente! - Opciones de conexión + Conexión Conectar via Tor Todas las conexiones se realizan a través de la red TOR. Requiere Orbot Hostname @@ -541,7 +545,7 @@ Editor Nombre Organización - SHA1 + SHA-1 (No disponible) Certificado no encontrado Notificar para todos los mensajes @@ -549,7 +553,7 @@ Notificaciones deshabilitadas Notificaciones pausadas Comprimir imágenes - Redimensionar y comprimir imágenes + Redimensionar y comprimir las imágenes Siempre Automáticamente Optimizaciones de uso de batería habilitadas @@ -559,4 +563,6 @@ El área seleccionada es demasiado grande (No hay cuentas activas) Este campo es requerido + Corregir mensaje + Enviar mensaje corregido diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index f093a52b..ea91da79 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -102,7 +102,7 @@ Bezero honek bere burua aurkezteko erabiltzen duen izena Fitxategiak onartu Hurrengo tamaina baino fitxategi txikiagoak automatikoki onartu… - Jakinarazpenen ezarpenak + Jakinarazpena Jakinarazpenak Mezu berri bat heltzerakoan jakinarazi Dardaratu @@ -111,12 +111,12 @@ Dei-tonua jo jakinarazpenarekin Jakinarazpenen grazia epea Jakinarazpenak denbora labur baterako ezgaitu ikatz-kopia bat jaso ondoren - Aukera aurreratuak + Aurreratua Gelditze txostenik ez bidali inoiz Akats harraskak bidaliz Conversationsen garapenean laguntzen duzu Mezuak egiaztatu Zure kontaktuak mezu bat noiz jaso eta irakurri duzun jakin dezan baimendu - Erabiltzaile-interfazearen aukerak + Erabiltzaile-interfazea OpenKeychainek akats baten berri eman du Sarrera/Irteera akatsa fitxategia desenkriptatzerakoan Onartu @@ -191,6 +191,7 @@ XEP-0198: Stream Management XEP-0163: PEP (Avatars / OMEMO) XEP-0363: HTTP File Upload + XEP-0357: Push eskuragarri ez eskuragarri Gako publikoen iragarpenak faltan @@ -240,6 +241,7 @@ Zu Konferentziaren gaia editatu Konferentzia ez da aurkitu + Akats ezezaguna jaso da Alde egin Kontaktuak bere zerrendara gehitu zaitu Bera gehitu @@ -274,12 +276,14 @@ Ziur al zaude hatz-marka hau ezabatu nahi duzulaz? Kasurik ez egin Adi: Bien arteko presentzia eguneraketarik gabe hau bidaltzeak ustekabeko arazoak sor litzake.\n\nJoan zaitez kontaktuaren xehetasunetara zure presentzia eguneraketak egiaztatzeko. - Enkriptazio ezarpenak + Segurtasuna End-to-end enkriptazioa behartu Mezuak beti enkriptatuta bidali (konferentzietan izan ezik) + Mezuen zuzenketa baimendu + Zure kontaktuak haien mezuak atzeraeraginez editatzea baimendu Ez gorde enkriptatutako mezuak Adi: Honek mezuen galera ekar lezake - Adituentzako aukerak + Adituentzako ezarpenak Mesedez kontuz ibili hauekin Conversationsi buruz Eraikitze eta lizentzia informazioa @@ -297,6 +301,8 @@ Besteak Konferentziaren izena Erabili gelaren gaia konferentziak identifikatzeko eta ez JIDa + Konferentzietara automatikoki batu + Automatikoki batzeko marka errespetatu konferentzien laster-marketan OTR hatz-marka arbelara kopiatu da OMEMO hatz-marka arbelara kopiatu da Konferentzia honetara sartzea debekatuta duzu @@ -427,7 +433,7 @@ 2 ordu 8 ordu abisatu arte - Sarrera aukerak + Sarrera Sartu teklak bidaltzen du Sartu tekla erabili mezua bidaltzeko Sartu tekla erakutsi @@ -491,14 +497,21 @@ Jasotako mezuak testu beltza atzeko-plano zuri baten gainean bezala erakutsi Tor sarea ez dago eskuragarri Hondatuta - Presentzia ezarpenak + Presentzia Urrun pantaila itzalita dagoenean Zure baliabidea urrun bezala markatzen du pantaila itzalita dagoenean Ez eskuragarri modu isilean Zure baliabidea ez eskuragarri bezala markatzen du gailua modu isilean dagoenean + Konexioaren ezarpen luzatuak + Ostalariaren izena eta ataka ezarpenak erakutsi kontu bat ezartzerakoan + xmpp.adibidea.com Kontua ziurtagiriarekin gehitu Ezin izan da ziurtagiria aztertu Utzi hutsik ziurtagiririk gabe autentifikatzeko + Artxibatze hobespenak + Zerbitzariaren aldeko artxibatze hobespenak + Artxibatze hobespenak eskuratzen. Mesedez itxaron... + Ezin izan dira artxibatze hobespenak eskuratu Captcharen testua Captcha beharrezkoa da Sartu irudiaren testua @@ -508,7 +521,7 @@ Akatsa OMEMO gakoa eskuratzerakoan! OMEMO gakoa ziurtagiriarekin egiaztatuta! Zure gailuak ez du bezero ziurtagiriak aukeratzea onartzen! - Konexioaren aukerak + Konexioa Tor bidez konektatu Konexio guztiak Tor sarean zehar igaro. Orbot behar du Ostalariaren izena @@ -521,6 +534,7 @@ mezu %d %d mezu + Mezu gehiago kargatu Fitxategia %s(r)ekin partekatu da Irudia %s(r)ekin partekatu da Conversationsek kanpoko biltegirako sarbidea behar du @@ -531,7 +545,7 @@ Igorlea Izen arrunta Erakundea - SHA1 + SHA-1 (Ez eskuragarri) Ez da ziurtagiririk aurkitu Mezu guztiak jakinarazi @@ -539,7 +553,7 @@ Jakinarazpenak ezgaituta Jakinarazpenak gelditu dira Irudiak konprimitu - Irudiak konprimitu eta neurria aldatu + Irudiak konprimitu eta neurriz aldatu Beti Automatikoki Bateriaren optimizazioak gaituta @@ -547,4 +561,8 @@ Zure gailua jakinarazpen atzeratuak edota mezuen galera ekar lezaketen bateriaren optimizazio handiak egiten ari da Conversationsen.\nJarraian hauek ezgaitzea eskatuko zaizu. Ezgaitu Hautatutako zatia handiegia da + (Ez dago kontu aktiborik) + Datu hau beharrezkoa da + Mezua zuzendu + Mezu zuzendua bidali diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 22b5daab..4105dad3 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -93,7 +93,7 @@ Proposition… Patientez… Aucune clef OpenPGP trouvée. - Conversations ne peut pas chiffrer vos messages car votre correspondant n\'a pas communiqué sa clef publique.\n\nDemandez-lui de configurer OpenPGP. + Conversations ne peut pas chiffrer vos messages car votre contact n\'a pas communiqué sa clef publique.\n\nDemandez-lui de configurer OpenPGP. Aucune clef OpenPGP n\'a été trouvée. Conversations ne peut pas chiffrer votre message car vos contacts ne communiquent pas leur clef publique.\n\nDemandez-leur de configurer OpenPGP. Message chiffré reçu. Appuyez pour déchiffrer. @@ -102,7 +102,7 @@ Nom utilisé par ce client pour s\'identifier Accepter les fichiers Accepter automatiquement les fichiers plus petits que… - Options de notification + Notification Notifications Notifier de l\'arrivée d\'un message. Vibration @@ -111,12 +111,12 @@ Jouer une sonnerie pour notifier. Période sans notification Désactiver momentanément les notifications après l\'arrivée d\'une copie carbone. - Options avancées + Avancé Ne pas envoyer de rapports d\'erreurs En envoyant des logs vous aidez le développement de Conversations. Confirmation de lecture Informer le contact lorsque vous avez reçu et lu un message. - Options d\'interface + Interface OpenKeychain a signalé une erreur Erreur d\'E/S lors du déchiffrement du fichier Accepter @@ -191,6 +191,7 @@ XEP-0198 : Gestion des flux XEP-0163 : PEP (Avatars / OMEMO) XEP-0363 : Envoi de fichiers via HTTP + XEP-0357 : Notifications Push supporté non supporté Annonce de clef publique manquante @@ -240,6 +241,7 @@ Vous Modifier le sujet de la conférence Impossible de trouver la conférence + Erreur inconnue reçue Partir Votre correspondant vous a ajouté dans sa liste de contacts Ré-ajouter @@ -274,12 +276,14 @@ Etes-vous sûr de vouloir supprimer l\'empreinte ? Ignorer Attention : peut poser problème si l\'un des deux correspondants n\'a pas activé les mises à jour de présence.\n\nVérifiez dans les détails du contact que vous y avez bien souscrit. - Options de chiffrement + Sécurité Forcer le chiffrement de bout en bout Toujours envoyer des messages chiffrés (sauf pour les conférences) + Autoriser la correction + Permet à vos contacts d\'éditer leurs messages rétroactivement Messages chiffrés non sauvegardés Attention : peut provoquer la perte de messages. - Paramètres expert + Paramètres avancés À utiliser avec précaution. À propos Informations sur la version et les licenses @@ -297,6 +301,8 @@ Autres Nom de la conférence Identifier les conférences par leur sujet plutôt que leur JID. + Rejoindre automatiquement les conférences + Respecter le paramètre de connexion automatique des favoris de conférence Empreinte OTR copiée dans le presse-papier ! Empreinte OMEMO copiée dans le presse-papier ! Vous êtes banni de cette conférence @@ -386,7 +392,7 @@ Envoyez un message pour commencer la conversation chiffrée Poser une question Si vous et votre contact avez en commun un secret que personne d\'autre ne connait (comme une blague ou ce que vous avez mangé lors de votre dernière rencontre), vous pouvez utiliser ce secret pour vérifier vos empreintes respectives.\n\nVous donnez un indice ou posez votre question à votre contact, qui répondra en faisant attention à la casse. - Votre contact voudrait confirmer votre identité grâce à un secret partagé. Il vous a envoyé le message/indice suivant concernant ce secret. + Votre contact souhaite confirmer votre identité grâce à un secret partagé. Il vous a envoyé le message/indice suivant concernant ce secret. Votre indice ne doit pas être vide Votre secret partagé ne doit pas être vide Comparez avec soin l\'empreinte ci-dessous avec celle de votre contact.\nPour ce faire, vous pouvez utiliser n\'importe quel moyen de communication auquel vous avez confiance : appel téléphonique, e-mail encrypté... @@ -427,7 +433,7 @@ 2 heures 8 heures Jusqu\'à nouvel ordre - Options de saisie + Saisie Touche Entrée pour envoyer Utiliser la touche Entrée pour envoyer un message. Afficher la touche Entrée @@ -471,7 +477,7 @@ %d contact séléctionné - %d contacts séléctionnés + %d contacts sélectionnés Remplacer le bouton Envoyer par une action rapide. Action Rapide @@ -491,14 +497,21 @@ Afficher les messages reçus en texte noir sur fond blanc. Réseau Tor inaccessible Détraqué - Options de présence + Présence Absent quand l\'écran est éteint Marquer cette ressource comme absente quand l\'écran est éteint. Indisponible en mode silencieux Marque cette ressource comme indisponible quand l\'appareil est en mode silencieux + Paramètres de connexioin avancés + Montrer le nom d\'hôte et le port lors du paramétrage d\'un compte + xmpp.example.com Ajouter un compte avec un certificat Impossible d\'analyser le certificat Laisser vide pour s\'identifier avec un certificat + Paramètres d\'archivage + Paramètres d\'archivage du serveur + Récupération des paramètres d\'archivage en cours... + Impossible de récupérer les paramètres d\'archivage Texte du captcha Captcha obligatoire Saisissez le texte dans l\'image @@ -508,7 +521,7 @@ Erreur lors de la récupération de la clef OMEMO ! Clef OMEMO vérifiée avec un certificat ! Votre appareil ne supporte pas la sélection de certificats client ! - Options de connexion + Connexion Connection via Tor Rediriger toutes les connexions via le réseau Tor. Nécessite Orbot. Nom d\'hôte @@ -521,6 +534,7 @@ %d message %d messages + Charger plus de messages Fichier partagé avec %s Image partagée avec %s Conversations a besoin d\'accéder au stockage externe @@ -547,4 +561,8 @@ Votre appareil applique sur Conversations des optimisations de batterie très strictes qui pourraient provoquer des retards dans les notifications, voire des pertes de messages.\nVous allez maintenant avoir la possibilité de les désactiver. Désactiver La zone sélectionnée est trop grande + (Aucun compte activé) + Ce champ est requis + Corriger le message + Envoyer le message corrigé diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index c0e0b9aa..0a414b9e 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -58,7 +58,6 @@ O nome que identifica o cliente que estás a empregar Aceptar arquivos De forma automática aceptar arquivos menores de… - Axustes de notificación Notificacións Notifica cuando chega unha nova mensaxe Tremer @@ -67,10 +66,8 @@ Reproduce un ton ca notificación Notificacións Carbons Deshabilita as notificacións durante un corto periodo de tiempo despois de recibir a copia da mensaxe carbón - Opcións avanzadas Nunca enviar informe de erros Enviando volcados de pilas axudas al desenrolo de Conversations - Opcións de interfaz OpenKeychain reportou un erro I/O Erro descifrando arquivo Aceptar diff --git a/src/main/res/values-id/strings.xml b/src/main/res/values-id/strings.xml index 745e15ad..eae96d30 100644 --- a/src/main/res/values-id/strings.xml +++ b/src/main/res/values-id/strings.xml @@ -93,7 +93,6 @@ Identifikasi nama klien ini dengan Terima berkas Otomatis menerima berkas lebih kecil dari... - Pengaturan Notifikasi Notifikasi Notifikasikan jika pesan baru tiba Getar @@ -102,12 +101,10 @@ mainkan suara saat menerima notifikasi Tenggang waktu pemberitahuan Nonaktifkan pemberitahuan untuk waktu yang singkat setelah salinan diterima - Opsi Lanjutan Jangan kirim laporan kerusakan Dengan mengirimkan kesalahan Anda membantu pengembangan Aplikasi Conversations Konfirmasi Pesan Biarkan kontak Anda tahu kapan Anda telah menerima dan membaca pesan - Opsi Tampilan OpenKeychain melaporkan kesalahan I/O Error menerjemahkan berkas Menerima @@ -251,12 +248,10 @@ Apakah anda yakin menghapus sidik jari? Abaikan Perhatian Mengirim ini tanpa kehadiran sesama pembaruan bisa menyebabkan masalah tak terduga.\n\nPergi ke kontak untuk memverifikasi langganan kehadiran anda. - Pengaturan enskripsi Paksa enskripsi end-to-end Selalu mengirim pesan terenkripsi (kecuali untuk conferences) jangan simpan pesan terenskripsi Peringatan: Hal ini bisa mengakibatkan hilangnya pesan - Pengaturan lanjutan Harap berhati-hati dengan ini Tentang Conversations Build dan informasi lisensi @@ -386,7 +381,6 @@ 2 jam 8 jam Sampai pemberitahuan selanjutnya - Opsi input Enter untuk mengirim Gunakan enter untuk mengrim pesan Tampilkan masukan kunci diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index 26db33ae..5554efc4 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -102,7 +102,6 @@ Il nome con il quale questo client si identifica Accetta i file Accetta automaticamente i file più piccoli di… - Impostazioni di Notifica Notifiche Notifica quando arriva un nuovo messaggio Vibra @@ -111,12 +110,10 @@ Riproduci una suoneria con la notifica Periodo tra notifiche Disabilita le notifiche per un breve lasso di tempo dopo che un messaggio è stato ricevuto - Opzioni Avanzate Non inviare mai segnalazioni di errore Se scegli di inviare una segnalazione dell’errore aiuterai lo sviluppo di Conversations Conferma Messaggi Fai sapere ai tuoi contatti quando hai ricevuto il messaggio e l’hai letto - Opzioni Interfaccia OpenKeychain ha riportato un errore Errore di I/O nel decifrare il file Accetta @@ -274,12 +271,10 @@ Sei sicuro di voler eliminare questa impronta? Ignora Attenzione: Inviando questo messaggio senza aggiornamenti della presenza reciproci potrebbe causare problemi inaspettati.\n\nVai nei dettagli del contatto per verificare le tue sottoscrizioni alla presenza. - Impostazioni di cifratura Forza cifratura end-to-end Manda sempre messaggi cifrati (ad eccezione delle conferenze) Non salvare i messaggi cifrati Attenzione: Questo potrebbe comportare la perdita di messaggi - Opzioni da Esperto Fai attenzione con queste impostazioni Info su Conversations Informazioni sulla licenza @@ -427,7 +422,6 @@ 2 ore 8 ore Fino a nuovo avviso - Opzioni di ingresso Invio spedisce Il tasto invio spedisce il messaggio Mostra il tasto invio @@ -491,7 +485,6 @@ Mostra i messaggi ricevuti con testo nero su sfondo bianco Rete Tor non disponibile Rotto - Impostazioni presenza \"Non disponibile\" a schermo spento Imposta la tua risorsa come non disponibile quando lo schermo è spento Non disponibile in modalità silenzioso @@ -508,7 +501,6 @@ Errore ricezione chiave OMEMO! Chiave OMEMO verificata con certificato! Il tuo dispositivo non supporta la selezione di certificati utente! - Opzioni di connessione Connettiti via Tor Indirizza tutte le connessioni attraverso la rete Tor. Richiede Orbot Nome host @@ -531,7 +523,6 @@ Emittente Nome comune Organizzazione - SHA1 (Non disponibile) Nessun certificato trovato Notifica per tutti i messaggi @@ -539,7 +530,6 @@ Notifiche disabilitate Notifiche in pausa Comprimi immagini - Ridimensiona e comprimi le immagini Sempre Automaticamente Ottimizzazioni batteria abilitate diff --git a/src/main/res/values-iw/strings.xml b/src/main/res/values-iw/strings.xml index 9348a88e..2495360e 100644 --- a/src/main/res/values-iw/strings.xml +++ b/src/main/res/values-iw/strings.xml @@ -100,7 +100,6 @@ השם שבעזרתו לקוח זה מזהה את עצמו קבל קבצים קבל אוטומטית קבצים שגודלם קטן מ… - הגדרות התראות התראות תודיע כאשר הודעה חדשה מגיעה הרטט @@ -109,12 +108,10 @@ נגן צלצול עם כל התראה משך תקופת ארכה נטרל התראות לזמן קצר לאחר שהודעת Carbon Copy מתקבלת - אפשרויות מתקדמות לעולם אל תשלח דיווחי קריסה על ידי שליחת עקבות מחסנית אתה עוזר להתקדמות הפיתוח של Conversations אשר הודעות אפשר לאיש קשר שלך לדעת מתי קיבלת וקראת הודעה - אפשרויות ממשק משתמש אפליקציית OpenKeychain דיווחה על שגיאה שגיאת I/O פענוח קובץ קבל @@ -265,12 +262,10 @@ האם את/ה בטוח שברצונך למחוק טביעת אצבע זו? התעלם אזהרה:שליחה ללא הרשאות עדכוני נוכחות הדדיות עלולה לגרום לתוצאות בלתי צפויות.\n\nהשתמש בתפריט \"פרטי משתמש\" ואשר עדכוני נוכחות - הגדרות הצפנה אלץ הצפנת end-to-end תמיד שלח הודעות מוצפנות (חוץ מבועידות) אל תשמור הודעות מוצפנות אזהרה: פעולה זו עלולה לגרום לאיבוד הודעות - הגדרות מתקדמות נא להיזהר! אודות Conversations אודות גרסה ורישיון @@ -414,7 +409,6 @@ 2 שעות 8 שעות עד אחרית הימים - הגדרות קלט לחצן Enter שולח את ההודעה השתמש בלחצן ה-Enter כלחצן השליחה הראה את לחצן ה Enter @@ -477,7 +471,6 @@ השתמש ברקע לבן הראה הודעות שהתקבלו בטקסט שחור על גבי רקע לבען לא עובד - הגדרות נוכחות Presence העבר למצב \"לא נמצא\" כאשר המסך כבוי מעביר את המכשיר לסטטוס \"לא נמצא\" כאשר המסך כבוי העבר למצב \"לא זמין\" כאשר במצב שקט @@ -491,7 +484,6 @@ אין התאמה בין מזהה Jabber לבין תעודה חידוש תעודה שגיאה בתפיסת OMEMO! - אפשרוית חיבור התחבר דרך Tor שם מארח פורט diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index fb30d544..b77c30b5 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -102,7 +102,7 @@ 自分自身を識別するこのクライアントの名前 ファイルを受取 自動的に小さいファイルを受取… - 通知設定 + 通知 通知 新しいメッセージが到着したときに通知します 振動 @@ -111,12 +111,12 @@ 通知で着信音を再生します 通知猶予期間 カーボンコピーを受信した後、短時間、通知を無効にします - 詳細オプション + 詳細 クラッシュレポートを送信しない スタックトレースを送信することで、あなたは Conversations の継続的な開発を支援しています メッセージの確認 あなたがメッセージを受け取って読んだことを、連絡先に知らせます - UI オプション + UI OpenKeychain がエラーを報告しました ファイルの復号化中に I/O エラー 受付 @@ -191,6 +191,7 @@ XEP-0198: ストリーム管理 XEP-0163: PEP (アバター / OMEMO) XEP-0363: HTTP ファイルアップロード + XEP-0357: プッシュ 利用可能 利用不可 公開鍵の通知がありません @@ -275,12 +276,14 @@ このフィンガープリントを削除してもよろしいですか? 無視 警告: 相互の参加アップデートなしにこれを送信すると、予期しない問題が発生する可能性があります。\n\nあなたの参加サブスクリプションを検証するために、連絡先の詳細に移動します。 - 暗号化設定 + セキュリティ 強制的にエンドツーエンド暗号化を使用する 常に暗号化されたメッセージを送信します (会議を除く) + メッセージの修正を許可 + 連絡先が、遡及的に自分のメッセージを編集することを許可します 暗号化されたメッセージを保存しない 警告: これはメッセージの損失につながる可能性があります - 上級者オプション + エキスパート設定 ご利用は注意してください Conversations について ビルドおよびライセンス情報 @@ -430,7 +433,7 @@ 2 時間 8 時間 通知があるまで - 入力オプション + 入力 Enter は送信 Enter キーをメッセージの送信に使用します Enter キーを表示 @@ -492,18 +495,19 @@ 白地に黒の文字で、受け取ったメッセージを表示します Tor ネットワークが利用できません 壊れています - 参加設定 + 参加 画面がオフのときは離席 画面がオフになっているとき、リソースを離席としてマークします サイレントモード時は利用不可 デバイスがサイレントモードのとき、リソースが利用不可としてマークします - 拡張接続オプション - アカウントを設定するときにホスト名とポートのオプションを表示します + 拡張接続設定 + アカウントを設定するときにホスト名とポートの設定を表示します xmpp.example.com アカウントに証明書を追加 証明書を解析できません 空にすると、証明書で認証します アーカイブの設定 + サーバーサイドのアーカイブの設定 アーカイブの設定を取得しています。しばらくお待ちください… アーカイブの設定を取得できません キャプチャ テキスト @@ -515,7 +519,7 @@ OMEMO 鍵の取得中にエラー! OMEMO 鍵の取得中にエラー! お使いのデバイスはクライアント証明書の選択をサポートしていません! - 接続オプション + 接続 Tor 経由で接続 Tor ネットワークを介してすべての接続をトンネルします。 Orbot が必要です ホスト名 @@ -538,7 +542,7 @@ 発行者 一般名称 組織 - SHA1 + SHA-1 (利用不可) 証明書がありません すべてのメッセージで通知 @@ -546,7 +550,7 @@ 通知は無効 通知は一時停止 写真を圧縮 - 写真をサイズ変更や圧縮します + 写真のサイズ変更と圧縮 常に 自動 バッテリー最適化が有効 @@ -556,4 +560,6 @@ 選択した範囲が大きすぎます (アクティベートしたアカウントはありません) このフィールドは必須です + メッセージを修正 + 修正したメッセージを送信 diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml index 46db5168..0931f7f6 100644 --- a/src/main/res/values-ko/strings.xml +++ b/src/main/res/values-ko/strings.xml @@ -102,7 +102,6 @@ 이 클라이언트가 자신을 알아보는 이름 파일 수락 이 크기보다 작은 파일을 자동으로 수락 - 알림 설정 알림 새 메세지 도착시 알림 진동 @@ -111,12 +110,10 @@ 알림과 동시에 벨소리 재생 알림 유예 Carbon Copy 수신 후에 잠시동안 알림 해제 - 추가 설정 충돌 보고서 보내지 않음 Stack trace 정보를 보냄으로서 Conversations의 개발에 기여할 수 있습니다 메세지 확인 메세지를 수신하고 읽었는지를 연락처에게 알려줌 - 사용자 환경 설정 OpenKeychain이 오류를 보고합니다 파일 복호화 입출력 오류 수락 @@ -274,12 +271,10 @@ 이 핑거프린트를 삭제하시겠습니까? 무시 경고: 상호간의 프레즌스 업데이트 없이 이것을 보내면 예기치 못한 문제를 발생시킬 수 있습니다. 당신의 프레즌스 구독을 검증하기 위해 연락처 상세 정보로 가세요. - 암호화 설정 강제적인 종단간 암호화 언제나 암호화 메세지로 전송 (회의 제외) 암호화된 메세지 저장하지 않음 경고: 메세지가 손실될 수 있습니다 - 전문가 설정 설정시 주의하시기 바랍니다 Conversations에 대해서 빌드 및 라이센스 정보 @@ -427,7 +422,6 @@ 2시간 8시간 나중에 알릴때까지 - 입력 설정 엔터 키로 전송 엔터 키로 메세지를 보냅니다 엔터 키 표시 @@ -489,7 +483,6 @@ 받은 메세지를 하얀색 배경에 검은색 글씨로 표시 Tor 네트워크 사용할 수 없음 손상됨 - 프레즌스 설정 화면이 꺼져있을 경우 자리 비움으로 표시 화면이 꺼져있을 경우에 자리 비움으로 상태를 표시함 음소거 모드에서는 사용할 수 없음 @@ -505,7 +498,6 @@ OMEMO key를 가져오는 도중 오류가 발생했습니다 OMEMO 키와 인증서 검증됨 기기가 선택된 클라이언트 인증서를 지원하지 않습니다 - 접속 옵션 Tor를 통해 접속 모든 연결을 Tor 네트워크를 통하도록 유도함. Orbot이 필요합니다 호스트 이름 @@ -527,7 +519,6 @@ 발행자 이름 단체 - SHA1 (사용할 수 없음) 인증서가 발견되지 않았습니다 모든 메세지를 알림 @@ -535,7 +526,6 @@ 알림 해제됨 알림 일시중지됨 사진 압축 - 사진의 크기를 줄이고 압축함 항상 자동 배터리 최적화 사용됨 diff --git a/src/main/res/values-nb-rNO/strings.xml b/src/main/res/values-nb-rNO/strings.xml index 0b8ad688..19b46aac 100644 --- a/src/main/res/values-nb-rNO/strings.xml +++ b/src/main/res/values-nb-rNO/strings.xml @@ -102,7 +102,6 @@ Navnet denne klienten identifiserer seg med Godta filer Automatisk godkjenning av filer mindre enn... - Varslingsinnstillinger Varslinger Varsle når en ny melding ankommer Vibrer @@ -111,12 +110,10 @@ Spill av ringetone ved varsel Stilleperiode Deaktiver varslinger for en kort periode etter at en kopi er mottatt - Avanserte valg Aldri send feilrettingsrapporter Ved å sende inn stabelsporinger hjelper du den pågående utviklingen av Conversations Bekreft meldinger La din kontakt få vite når du har mottatt og lest en melding - Valg for grensesnitt Feilmelding fra OpenKeychain I/O-feil ved dekryptering av fil Godta @@ -274,12 +271,10 @@ Bekreft fjerning av fingeravtrykk. Ignorer Advarsel: Å sende dette uten at tilstandsoppdateringer er i overenstemmelse kan forårsake uventede problemer.\n\nGå til kontaktdetaljer for å bekrefte dine tilstedeværelsesabonnementer. - Krypteringsinnstillinger Krev ende-til-ende-kryptering Alltid send meldinger kryptert (bortsett fra konferanser) Ikke lagre krypterte meldinger Advarsel: Dette kan føre til at meldinger går tapt - Ekspertinnstillinger Vær forsiktig med disse Om Conversations Utgave og lisensinformasjon @@ -427,7 +422,6 @@ 2 timer 8 timer Til videre beskjed - Inndata-valg Enter er forsendelsesknapp Bruk enter for å sende en melding Vis enter-tast @@ -491,7 +485,6 @@ Vis mottatte meldinger som svart tekst på hvit bakgrunn Tor-nettverk utilgjengelig Knekt - Tilstedeværelse-innstillinger Borte når skjermen er av Markerer din ressurs som borte når skjermen er avskrudd Ikke tilgjengelig i stille-modus @@ -508,7 +501,6 @@ Feil ved innhenting av OMEMO-nøkkel! Bekreftet OMEMO-nøkkel med sertifikat! Din enhet støtter ikke valg av klientsertifikat! - Tilkoblingsalternativ Koble til via Tor Send alle tilkoblinger i tunnel gjennom Tor-nettverket. Krever Orbot Tjenernavn @@ -531,7 +523,6 @@ Utsteder Vanlig navn Organisasjon - SHA1 (Ikke tilgjengelig) Fant ikke noe sertifikat Varsle ved alle meldinger @@ -539,7 +530,6 @@ Varslinger deaktivert Varslinger pauset Komprimer bilder - Komprimer og juster bildestørrelser Alltid Automatisk Batterioptimaliseringer aktivert diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index 2a3138df..c5d03158 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -102,7 +102,6 @@ De naam waarmee deze cliënt zich identificeert Aanvaard bestanden Aanvaard automatisch bestanden kleiner dan… - Meldingsinstellingen Meldingen Melding als een nieuw bericht arriveert Trillen @@ -111,12 +110,10 @@ Speel beltoon af bij melding Uitstelperiode voor meldingen Schakel meldingen voor korte tijd uit als er een carbon copy wordt ontvangen - Geavanceerde instellingen Verstuur nooit crashrapportages Door crashrapportages te versturen help je de ontwikkeling van Conversations Bevestig berichten Laat je contacten weten wanneer je berichten hebt ontvangen en gelezen - UI-opties OpenKeychain rapporteerde een fout I/O-fout tijdens ontsleutelen van bestand Aanvaarden @@ -274,12 +271,10 @@ Ben je zeker dat je deze vingerafdruk wil verwijderen? Negeren Waarschuwing: Dit verzenden zonder wederzijdse aanwezigheidsupdates kan voor onverwachte problemen zorgen.\n\nGa naar contactgegevens om je aanwezigheidsupdates te bevestigen. - Versleutelingsinstellingen Verplicht end-to-end-versleuteling Stuur berichten altijd versleuteld (behalve in groepsgesprekken) Sla versleutelde berichten niet op Waarschuwing: dit kan leiden tot verlies van berichten - Expert-instellingen Wees voorzichtig met deze instellingen Over Conversations Build en licentie-informatie @@ -427,7 +422,6 @@ 2 uur 8 uur Voor onbepaalde duur - Invoer-opties Enter is versturen Gebruik de enter-toets om berichten te versturen Toon enter-toets @@ -491,7 +485,6 @@ Toon ontvangen berichten als zwarte tekst op een witte achtergrond Tor-netwerk niet beschikbaar Gebroken - Aanwezigheidsinstellingen Even weg wanneer scherm uit staat Stelt je bron in als even weg wanneer het scherm uitgeschakeld is Niet beschikbaar in stille modus @@ -508,7 +501,6 @@ Fout bij ophalen van OMEMO-sleutel! OMEMO-sleutel geverifieerd met certificaat! Je apparaat ondersteunt de selectie van cliënt-certificaten niet! - Verbindingsopties Verbinden via Tor Tunnel alle verbindingen door het Tor-netwerk. Vereist Orbot Hostnaam @@ -531,7 +523,6 @@ Uitgever Algemene naam Organisatie - SHA1 (Niet beschikbaar) Geen certificaat gevonden Melding bij alle berichten @@ -539,7 +530,6 @@ Meldingen uitgeschakeld Meldingen gepauzeerd Afbeeldingen comprimeren - Afbeeldingen verkleinen en comprimeren Altijd Automatisch Batterij-optimalisaties ingeschakeld diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 240eed92..2a9e3135 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -102,7 +102,6 @@ Nazwa identyfikująca urządzenie Akceptuj pliki Automatycznie akceptuj pliki mniejsze niż... - Ustawienia powiadamiania Powiadomienia Powiadamiaj, gdy nadejdzie wiadomość Wibracje @@ -111,12 +110,10 @@ Odtwórz dźwięk z powiadomieniem Opóźnienie powiadomień Wyłącz powiadomienia przez krótki czas po otrzymaniu kopii wiadomości - Opcje zaawansowane Nie wysyłaj raportów awarii Wysyłając ślady stosu pomagasz rozwijać Conversations Potwierdzenia wiadomości Powiadamiaj kontakty o otrzymaniu lub przeczytaniu wiadomości - Ustawienia interfejsu Wystąpił błąd OpenKeychain Błąd podczas deszyfrowania pliku Akceptuj @@ -274,12 +271,10 @@ Czy na pewno chcesz usunąć odcisk klucza? Ignoruj Uwaga: Wysyłanie bez obustronnych powiadomień o obecności może powodować nieoczekiwane problemy.\n\nSprawdź subskrypcję powiadomień w szczegółach kontaktu. - Ustawienia szyfrowania Wymuszaj szyfrowanie typu end-to-end Szyfruj wszystkie wiadomości (poza konferencjami) Nie zapisuj zaszyfrowanych wiadomości Uwaga: Może powodować utratę wiadomości - Ustawienia zaawansowane Modyfikuj ustawienia ostrożnie O Conversations Informacje o kompilacji i licencji @@ -427,7 +422,6 @@ 2 godziny 8 godzin Ręcznie - Ustawienia wprowadzania Enter wysyła Używaj klawisza Enter do wysyłania wiadomości Pokaż klawisz Enter @@ -493,7 +487,6 @@ Pokazuj otrzymane wiadomości jako czarny tekst na białym tle Sieć TOR jest niedostepna Zepsute - Ustawienia obecności Status \"Oddalony\" gdy wyświetlacz jest wyłączony Oznacza Twój zasób jako \"Oddalony\", gdy wyświetlacz jest wyłączony Niedostepne w trybie cichym @@ -510,7 +503,6 @@ Błąd pobierania klucza OMEMO! Zweryfikowano klucz OMEMO z certyfikatem Twoje urządzenie nie wspiera wyboru certyfikatów klienckich - Opcje połączenia Połącz przez sieć TOR Tuneluj wszystkie połączenia przez sieć TOR. Wymaga zainstalowania aplikacji \"Orbot\" Nazwa hosta @@ -534,7 +526,6 @@ Wystawca Nazwa Organizacja - SHA1 (Niedostępne) Nie znaleziono certyfikatu Powiadom o wszystkich wiadomościach @@ -542,7 +533,6 @@ Powiadomienia wyłączone Powiadomienia wstrzymane Kompresuj obrazki - Zmień rozmiar i kompresuj obrazki Zawsze Automatycznie Optymalizacje zużycia baterii włączone diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 6d4991e9..368e17fa 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -102,7 +102,7 @@ O nome pelo qual esse cliente se identifica Aceitar arquivos Aceitar automaticamente arquivos menores que... - Configurações de notificações + Notificação Notificações Notificar quando uma nova mensagem for recebida Vibração @@ -111,12 +111,12 @@ Som de notificação Tempo de espera da notificação Desativar notificações por um curto período após uma copia ser recebida - Opções avançadas + Avançado Nunca enviar relatórios de erros Ao enviar os stack traces você está colaborando com o desenvolvimento do Conversations Confirmação de mensangens Permitir que um contato saiba quando você recebeu e leu uma mensagem - Opções de interface + IU O OpenKeychain informou um erro Ocorreu um erro de E/S na descriptografia o arquivo Aceitar @@ -191,6 +191,7 @@ XEP-0198: Gerenciamento de fluxo XEP-0163: PEP (Avatares / OMEMO) XEP-0363: Envio de arquivos via HTTP + XEP-0357: Push disponível indisponível Avisos de ausência de chave pública @@ -240,6 +241,7 @@ Você Editar o assunto da conferência A conferência não foi encontrada + Foi recebido um erro desconhecido Sair O contato foi adicionado à sua lista de contatos Adicionar novamente @@ -274,12 +276,14 @@ Tem certeza que deseja remover essa impressão digital? Ignorar Aviso: Enviar isso sem atualizações mútuas de presença pode provocar problemas inesperados.\n\nVerifique nos detalhes do contato suas inscrições de presença. - Configurações de criptografia + Segurança Forçar criptografia ponto-a-ponto Sempre envie mensagem criptografada (exceto para conferências) + Permitir a correção da mensagem + Permite que seus contatos edite suas mensagens retroativamente Não salve as mensagens criptografadas Atenção: Isso pode levar a perda de mensagens - Opções avançadas + Configurações avançadas Por favor, use com cuidado Sobre o Conversations Informações de licenciamento e construção @@ -297,6 +301,8 @@ Outras Nome da conferência Use o assunto da sala ao invés do JID para identificar as conferências + Entrar automaticamente nas conferências + Respeitar a opção de entrada automática dos marcadores de conferência Impressão digital OTR copiada para a área de transferência! Impressão digital OMEMO copiada para a área de transferência! Você foi banido dessa conferência @@ -427,7 +433,7 @@ 2 horas 8 horas Até segunda ordem - Opções de entrada + Entrada Enter envia Use o botão Enter para enviar a mensagem Exibir o botão Enter @@ -491,14 +497,21 @@ Exibir a mensagens recebidas como texto preto em um fundo branco Rede Tor não disponível Quebrado - Configurações de presença + Presença Afastado quando a tela estiver desligada Marcar o seu status como afastado quando a tela estiver desligada Não disponível quando em modo silencioso Marcar o seu status como não disponível quando o dispositivo estiver em modo silencioso + Configurações detalhadas da conexão + Exibe o nome de host e configurações da porta ao configurar uma conta + xmpp.example.com Adicionar uma conta com certificado Não foi possível analisar o certificado Deixe em branco para autenticar com um certificado + Preferências de arquivamento + Preferências de arquivamento no servidor + Obtendo as preferências de arquivamento. Por favor aguarde... + Não foi possível obter as preferências de arquivamento Texto captcha Captcha obrigatório digite o texto da imagem @@ -508,7 +521,7 @@ Ocorreu um erro na obtenção da chave OMEMO! A chave OMEMO foi verificada com o certificado. O seu dispositivo não suporta a seleção de certificados de clientes. - Opções de conexão + Conexão Conectar via Tor Faça o tunelamento de todas as conexões através de redes Tor. Necessita do Orbot. Nome do host @@ -521,6 +534,7 @@ %d mensagem %d mensagens + Carregar mais mensagens Arquivo compartilhado com %s Imagem compartilhada com %s O Conversations necessita de acesso ao armazenamento externo @@ -531,7 +545,7 @@ Emitente Common Name Organização - SHA1 + SHA-1 (Não disponível) Não foi encontrado nenhum certificado Notificar em todas as mensagens @@ -547,4 +561,8 @@ O seu dispositivo está aplicando uma otimização de bateria intensa no Conversations, que pode levar a atraso nas notificações ou até mesmo perda de mensagens.\nAgora você será solicitado a desabilitá-la. Desabilitar A área selecionada é muito grande + (Nenhuma conta ativa) + Este campo é necessário + Corrigir a mensagem + Enviar a mensagem corrigida diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml index 137d38b4..30265948 100644 --- a/src/main/res/values-pt/strings.xml +++ b/src/main/res/values-pt/strings.xml @@ -88,7 +88,6 @@ O nome pelo qual esse cliente se identifica Aceitar arquivos Automaticamente aceita arquivos menores que... - Configurações de notificação Notificações Notificar quando uma nova mensagem for recebida Vibrar @@ -97,12 +96,10 @@ Tocar um som com a notificação Período de carência da notificação Desativar notificações por um curto período após a copia oculta ser recebida - Opções avançadas Nunca enviar relatórios de quebra Ao enviar os stack traces você ajuda o desenvolvimento do aplicativo Confirmar mensanges Permitir que um contato saiba quando você recebeu e leu uma mensagem - Opções de UI O OpenKeychain informou um erro Erro de I/O de critpografia Aceitar @@ -230,12 +227,10 @@ Solicitar agora Remover impressão Tem certeza que deseja remover essa assinatura? - Configurações de criptografia Forçar criptografia ponto-a-ponto Sempre envie mensagem criptografada (exceto para conferências) Não salve mensagens criptografadas Atenção: Isso pode levar a perda de mensagens - Opções de expert Por favor tenha cuidado com essas Sobre Conversas Informação de licença e construção @@ -265,7 +260,6 @@ 2 horas 8 horas Até segunda ordem - Opções de entrada O enter envia Use o enter para enviar a mensagem Exibir tecla enter diff --git a/src/main/res/values-ro-rRO/strings.xml b/src/main/res/values-ro-rRO/strings.xml index b98dd86e..afcf90e0 100644 --- a/src/main/res/values-ro-rRO/strings.xml +++ b/src/main/res/values-ro-rRO/strings.xml @@ -102,7 +102,7 @@ Numele cu care acest client se identifica Accepta fisiere Accepta automat fisiere mai mici decat... - Setari notificari + Notificare Notificari Notifica cand un nou mesaj este primit Vibreaza @@ -191,6 +191,7 @@ XEP-0198: Management flux XEP-0163: PEP (Avatare / OMEMO) XEP-0363: Incarcare fisiere prin HTTP + XEP-0357: Push disponibil indisponibil Cheile publice ce nu au fost anuntate @@ -275,9 +276,11 @@ Sigur vrei sa stergi amprenta Ignora Atentie: Trimitand aceasta fara actualizari de prezenta reciproce, ar putea produce probleme neprevazute.\n\nMergi la lista de contacte, la detalii, sa iti verifici abonarile la actualizarile de prezenta. - Setari criptare + Siguranta Forteaza criptarea conexiunii de la un capat la altul Trimite mereu mesajele criptate (exceptand conferintele) + Permite corectia mesajelor + Permite contactelor sa isi editeze mesajele din trecut Nu salva mesaje criptate Atentie: Asta poate duce la pierderea de mesaje Optiuni expert @@ -508,8 +511,9 @@ Nu se poate analiza certificatul Lasa gol pentru a autentifica cu un certificat Preferinte arhivare + Preferinte arhivare pe server Descarc preferinte arhivare. Va rugam asteptati... - Nu s-au putut descarca setarile de arhivare + Nu s-au putut descarca preferintele de arhivare Text captcha de verificare Text captcha de verificare necesar introdu textul din imagine @@ -545,7 +549,7 @@ Emitent Nume comun Organizatie - SHA1 + SHA-1 (Indisponibil) Certificat inexistent Notifica la toate mesajele @@ -563,4 +567,6 @@ Emitent Zona selectata este prea mare (Nici un cont activat) Acest camp este obligatoriu + Corectie mesaj + Trimite text corectat diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index 68d84396..01cdbcdd 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -102,7 +102,6 @@ Имя которым Conversations идентифицирует себя Принимать файлы Автоматический прием файлов… - Настройки Уведомлений Уведомление Использовать звуковое уведомление когда приходят новые сообщения Вибрация @@ -111,12 +110,10 @@ Выберите звуковой сигнал для сообщений Отсрочка уведомлений Не использовать уведомления, если вы прочитали сообщение на другом устройстве - Дополнительные параметры Отчеты об ошибках Отправляя отчеты об ошибках, вы помогаете исправить и улучшить Conversations, поддерживая дальнейшее развитие программы Отчеты о получении Разрешить уведомлять отправителя, когда вы получили и прочитали сообщение - Параметры интерфейса Возникла ошибка в OpenKeychain Ошибка расшифровки файла Принять @@ -274,12 +271,10 @@ Вы уверены, что хотите удалить данную контрольную сумму? Отменить Внимание: Если обновления присутствия не включены на обеих сторонах, это может привести к возникновению неожиданных проблемам.\n\nУточните сведения о контакте, проверив настройки обновлений присутствия. - Настройки шифрования Обязательное сквозное шифрование Всегда отправлять сообщения зашифрованными (за исключением конференций) Не сохранять зашифрованные сообщения Внимание: Это может привести к потере сообщений - Расширенные настройки Пожалуйста, будьте осторожны с данными настройками О Conversations Информация о билде и лицензировании @@ -426,7 +421,6 @@ 2 часа 8 часов До следующего уведомления - Настройки ввода Отправить на \"Enter\" Клавиша \"Enter\" отправляет сообщение Показывать клавишу ввода @@ -494,7 +488,6 @@ Показывать принятые сообщения черным текстом на белом фоне Сеть Tor недоступна Повреждено - Настройки присутствия Вышел когда экран выключен Отмечает ваш ресурс как \"вышел\" когда экран выключен Не доступен в режиме без звука @@ -510,7 +503,6 @@ Ошибка при получении OMEMO ключа! Проверен OMEMO ключ с сертификатом! Ваше устройство не поддерживает выбор клиентских сертификатов! - Настройки соединения Соединение через Tor Направить все соединения через сеть TOR. Требуется Orbot Имя сервера @@ -528,7 +520,6 @@ Subject Выпустил Организация - SHA-1 (недоступно) Сертификатов не найдено Уведомлять о всех сообщениях diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index 2990a8ed..ce99da94 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -96,7 +96,6 @@ Meno, ktorým sa tento klient identifikuje Prijať súbory Automaticky prijať súbory menšie ako… - Nastavenia upozornení Upozornenia Upozorniť pri prijatí novej správy Vibrovať @@ -105,12 +104,10 @@ Prehrať zvuk spolu s upozornením Doba na prečítanie upozornenia Neupozorňovať krátko po obdržaní kópie správy - Rozšírené možnosti Neodosielať detaily o zlyhaní aplikácie Zaslaním detailov o dôvode zlyhania pomáhate ďalšiemu vývoju aplikácie Conversations Potvrdzovať správy Oznámi kontaktom, že správa bola prijatá a prečítaná - Možnosti UI OpenKeychain nahlásil chybu I/O chyba dešifrovania súboru Prijať @@ -262,12 +259,10 @@ Naozaj chcete vymazať tento identifikátor? Ignorovať Varovanie: Odoslanie bez povolenia zmien stavu môže spôsobiť nečakané problémy na obidvoch stranách.\n\nPrejdi na detaily kontaktu pre overenie povolenia o zmenách stavu. - Nastavenie šifrovania Vynútiť šifrovanie Vždy zasielať šifrované správy (okrem skupinových konverzácií) Neukladať šifrované správy Varovanie: Toto môže viesť k strate správ - Expertné možnosti S týmto narábajte veľmi opatrne, prosím O Conversations Informácie o tvorbe a licencii @@ -400,7 +395,6 @@ 2 hodiny 8 hodín Až do odvolania - Možnosti zadávaní Enter odosiela Použiť klávesu enter na odoslanie správy Zobraziť klávesu enter diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index 17a0bbdf..2be86f05 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -102,7 +102,6 @@ Име са којим се овај клијент идентификује Прихватај фајлове Аутоматски прихватај фајлове мање од… - Поставке обавештења Обавештења Обавести кад стигне нова порука Вибрирај @@ -111,12 +110,10 @@ Звуци обавештења Период одгоде обавештења Искључи обавештења на кратко по примању карбон копије - Напредне поставке Никад не шаљи извештаје о паду Слањем контратрага помажете текући развој Конверзације Потврди поруке Обзнаните контакту кад примите и прочитате поруку - Поставке сучеља Отворени кључарник је пријавио грешку У/И грешка дешифровања фајла Прихвати @@ -275,12 +272,10 @@ Желите ли заиста да обришете овај отисак? Занемари Упозорење: Слање овога без узајамних ажурирања присутности би могло да узрокује неочекиване проблеме.\n\nИдите на детаље контакта да бисте проверили претплате на присутности. - Поставке шифровања Присили крај-на-крај шифровање Увек шифруј поруке (осим за групна ћаскања) Не успремај шифроване поруке Упозорење: Ово може да доведе до губитка порука - Опције за стручњаке Будите пажљиви са овим О Конверзацији Подаци о издању и лиценци @@ -428,7 +423,6 @@ 2 сата 8 сати до даљњег - Опције уноса Ентер шаље Користи Ентер тастер за слање порука Прикажи Ентер тастер @@ -494,7 +488,6 @@ Приказ примљених порука црним текстом на белој позадини Тор мрежа недоступна Оштећен - Поставке присутности Одсутан кад је екран искључен Означава ваш ресурс одсутним кад је екран искључен Недоступан у тихом режиму @@ -512,7 +505,6 @@ Грешка добављања ОМЕМО кључа! Оверен ОМЕМО кључ помоћу сертификата! Ваш уређај не подржава избор сертификата клијента! - Опције повезивања Повежи се преко Тора Тунеловање свих веза кроз Тор мрежу. Захтева Орбот Име домаћина @@ -537,7 +529,6 @@ Издавач Заједничко име Организација - СХА1 (није доступно) Сертификат није нађен Обавештења за све поруке @@ -545,7 +536,6 @@ Обавештења искључена Обавештења паузирана Компресуј слике - Промена величине и компресије слике увек аутоматски Оптимизација батерије је укључена diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index 310afe9f..c1feeaab 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -102,7 +102,7 @@ Namnet klienten identifierar sig med Acceptera filer Acceptera automatiskt filer som är mindre än… - Notifieringsinställningar + Notifiering Notifieringar Notifiera när meddelande tagits emot Vibrera @@ -111,12 +111,12 @@ Spela ljud med notifiering Notifieringsfrist Inaktivera notifieringar en kort stund efter att en carbon copy tagits emot - Avancerade inställningar + Avancerat Skicka aldrig krasch-rapporter Genom att skicka in stack traces hjälper du utvecklarna av Conversations Bekräfta meddelanden Låter dina kontakter veta när du har tagit emot och läst ett meddelande - UI-inställningar + Gränssnitt OpenKeychain rapporterade ett fel I/O-fel vid avkryptering av fil Acceptera @@ -191,6 +191,7 @@ XEP-0198: Stream Management XEP-0163: PEP (Avatarbilder / OMEMO) XEP-0363: Ladda upp via HTTP + XEP-0357: Push tillgänglig otillgänglig Annonsering om publik nyckel saknas @@ -275,9 +276,11 @@ Är du säker på att du vill ta bort detta fingeravtryck? Ignorera Varning: Skicka detta utan gemensamma tillgänglighetsuppdateringar kan ge oväntade problem.\n\nGå till kontaktdetaljer för att verifiera dina tillgänglighetsuppdateringar. - Krypteringsinställningar + Säkerhet Tvinga kryptering Sänd alltid krypterade meddelanden (utom för konferenser) + Tillåt korrigeringar av meddelanden + Tillåt att dina kontakter kan ändra sina meddelanden i efterhand Spara inte krypterade meddelanden Varning: Detta kan leda till att meddelanden förloras Expertinställningar @@ -430,7 +433,7 @@ 2 timmar 8 timmar Tills vidare - Inmatningsalternativ + Input Skicka med enter Använd enter-knappen för att skicka meddelande Visa enter-knappen @@ -494,18 +497,19 @@ Visa mottagna meddelanden som svart text på vit bakgrund Tor-nätverk ej tillgängligt Sönder - Tillgänglighetsinställningar + Tillgänglighet Status borta när skärmen är av Sätter din tillgänglighet till borta när skrämen är av Status ej tillgänglig i tyst läge Sätter din tillgänglighet till ej tillgänglig när enheten är i tyst läge - Utökade anslutningsalternativ + Utökade anslutningsinställningar Visa val av servernamn och port vid inställning av konto xmpp.example.com Lägg till konto med certifikat Kan inte läsa certifikat Lämna tom för att för att logga in med certifikat Arkiveringsinställningar + Arkiveringsinställningar på servern Hämtar arkiveringsinställningar, vänta... Kan ej hämta arkiveringsinställningar CAPTCHA-text @@ -517,7 +521,7 @@ Misslyckades med att hämta OMEMO-nyckel! Verifierade OMEMO-nyckel med certifikat! Din enhet stödjer inte val av klientcertifikat! - Anslutningsalternativ + Anslutning Ansluten via Tor Tunnla alla anslutningar genom Tor-nätverket. Kräver Orbot Servernamn @@ -541,7 +545,7 @@ Utfärdare Common Name Organisation - SHA1 + SHA-1 (Ej tillgänglig) Inget certifikat funnet Notifiera för alla meddelanden @@ -559,4 +563,6 @@ The valda området är för stort (Inget konto aktiverat) Detta fält måste fyllas i + Korrigera meddelanden + Skicka korrigerat meddelande diff --git a/src/main/res/values-tr-rTR/strings.xml b/src/main/res/values-tr-rTR/strings.xml index d9908d8a..2a674290 100644 --- a/src/main/res/values-tr-rTR/strings.xml +++ b/src/main/res/values-tr-rTR/strings.xml @@ -102,7 +102,7 @@ İstemci kimliği Dosyaları kabul et …‘den küçük olan dosyaları otomatik olarak kabul et - Bildirim Ayarları + Bildirim Bildirimler Yeni ileti geldiğinde bildir Titreşim @@ -111,12 +111,12 @@ Bildirimle birlikte zil çalsın Bildirim mühleti Karbon kopya alındıktan sonra kısa bir süre için bildirimleri kapa - İleri Seçenekler + Gelişmiş Asla çöküş raporu gönderme Çöküş raporu göndermeniz Conversations\n’ın geliştirilmesine katkıda bulunacaktır. İletileri onayla Karşı tarafa ileti alındı ve okundu raporu gönder. - Arabirim Seçenekleri + Arabirim OpenKeychain bir hata bildirdi Dosyanın deşifresinde G/Ç hatası Kabul et @@ -191,6 +191,7 @@ XEP-0198: Stream Management XEP-0163: PEP (Avatars / OMEMO) XEP-0363: HTTP File Upload + XEP-0357: Push mevcut mevcut değil Kayıp genel anahtar bildirimleri @@ -275,9 +276,11 @@ Bu parmak izini silmek istediğinizden emin misiniz? Yok say Uyarı: Karşılıklı çevrimiçi durum bildirimi güncellemeleri olmaksızın bunu göndermeniz beklenmedik sorunlara sebep olabilir.\n\n\n\nÇevrimiçi durum bildirimi aboneliklerinizi kontrol etmek için kişi bilgilerine gidin. - Şifreleme ayarları + Güvenlik Uçtan uca şifrelemeye zorla Her zaman şifrelenmiş ileti gönder (Conversations hariç) + İleti düzeltmeye izin ver + Kişilerinizin geçmiş iletilerini düzeltmelerine izin ver Şifrelenmiş iletileri kaydetme Uyarı: Bu, iletilerin kaybedilmesine neden olabilir Uzman seçenekleri @@ -430,7 +433,7 @@ 2 saat 8 saat İkinci bildirime kadar - Girdi seçenekleri + Girdi Enter=gönder İleti göndermek için \"enter\" tuşunu kullanın \"Enter\" tuşunu göster @@ -492,7 +495,7 @@ Alınan iletileri beyaz arka plan üzerinde siyah yazıyla göster Tor ağına erişilemiyor Bozuk - Çevrimiçi durum bildirim ayarları + Durum Ekran kapandığında uzakta Ekran kapandığında çevrimiçi durum bildiriminizi uzakta olarak değiştirir Sessiz moddayken erişilemez @@ -504,6 +507,7 @@ Sertifika çözümlenemedi w/ sertifikasının kimlik denetimi için boş bırak Arşivleme tercihleri + Sunucu tarafı arşivleme tercihleri Arşivleme tercihleri alınıyor. Lütfen bekleyin... Arşivleme tercihleri alınamadı Captcha metni @@ -515,7 +519,7 @@ OMEMO anahtarı alınırken hata oluştu! Sertifikalı OMEMO anahtarı onaylandı! Cihazınız seçilen istemci sertifikalarını desteklemiyor! - Bağlantı seçenekleri + Bağlantı Tor üzerinden bağlan Bütün bağlantıları Tor ağı üzerinden aktar. Orbot gerekir. Sunucu adı @@ -538,7 +542,7 @@ Veren Ortak ad Organizasyon - SHA1 + SHA-1 (mevcut değil) Sertifika bulunamadı Tüm iletilerde uyar @@ -556,4 +560,6 @@ Seçilen alan çok büyük (Aktif hesap bulunmuyor) Bu alan zorunludur + ileti düzelt + Düzeltilmiş iletiyi gönder diff --git a/src/main/res/values-vi/strings.xml b/src/main/res/values-vi/strings.xml index 92fa1133..2d7511d6 100644 --- a/src/main/res/values-vi/strings.xml +++ b/src/main/res/values-vi/strings.xml @@ -102,7 +102,6 @@ Tên của máy trạm này được tự đặt là Chấp thuận các tập tin Tự động chấp thuận các tập tin nhỏ hơn... - Cài đặt thông báo Thông báo Thông báo khi có tin nhắn mới Rung @@ -111,12 +110,10 @@ Chơi nhạc chuông cùng với thông báo Thời gian gia hạn thông báo Tắt thông báo trong một thời gian ngắn sau khi nhận được bản sao giấy than - Tuỳ chọn nâng cao Không bao giờ gửi báo cáo dừng chạy Bằng việc gửi báo cáo hoạt động, bạn đang hỗ trợ nhóm phát triển của Conversations Xác nhận tin nhắn Báo cho liên hệ của bạn biết khi bạn đã nhận và đọc tin nhắn - Tuỳ chọn UI OpenKeychain đã báo cáo một lỗi Tập tin giải mã lỗi I/O Chấp thuận @@ -274,12 +271,10 @@ Có chắc là bạn muốn xoá dấu vân tay này? Bỏ qua Cảnh báo: Gửi mà không có cập nhật hiện diện của nhau có thể gây ra vấn đề khó lường.\n\nVào chi tiết liên hệ để xác minh đăng ký hiện diện của bạn. - Cài đặt mã hoá Bắt buộc mã hoá hai đầu Luôn gửi tin nhắn được mã hoá (ngoại trừ trong diễn đàn) Đừng lưu tin nhắn được mã hoá Cảnh báo: Có thể làm mất tin nhắn - Tuỳ chọn chuyên sâu Xin hãy cẩn trọng với chúng Thông tin về Conversations Thông tin bản dựng và giấy phép @@ -427,7 +422,6 @@ 2 tiếng 8 tiếng Cho đến thông báo tiếp theo - Tuỳ chọn nhập liệu Bấm Enter để gửi Bấm nút Enter để gửi tin nhắn Hiện nút Enter @@ -489,7 +483,6 @@ Hiện các tin nhắn nhận được dưới dạng chữ đen trên nền trắng Mạng Tor chưa sẵn sàng Bị hỏng - Cài đặt sự hiện diện Vắng mặt khi màn hình tắt Hiện ứng dụng là \'vắng mặt\' khi màn hình tắt Không sẵn sàng trong chế độ yên lặng @@ -506,7 +499,6 @@ Lỗi nhập khoá OMEMO! Khoá OMEMO đã xác minh với chứng nhận! Thiết bị không hỗ trợ chọn lựa các chứng chỉ của máy trạm! - Tuỳ chọn hội thoại Kết nối đến Tor Chuyển toàn bộ kết nối thông qua mạng Tor. Cần có Orbot Tên máy chủ @@ -528,7 +520,6 @@ Nhà phát hành Tên thường Tổ chức - SHA-1 (Không sẵn sàng) Không thấy chứng nhận nào Thông báo tất cả tin nhắn @@ -536,7 +527,6 @@ Đã tắt thông báo Đã dừng thông báo Nén hình ảnh - Sửa kích cỡ và các hình ảnh đã nén Luôn luôn Tự động Đã bật tối ưu pin diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index 7214d5fc..9c6d66f5 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -102,7 +102,6 @@ 客户端标识名称 接收文件 自动接收小于 … 的文件 - 通知设置 通知 收到新消息时通知 震动 @@ -111,12 +110,10 @@ 收到新消息时的铃声 通知限期 接收副本短时间内关闭通知 - 高级选项 总不发送崩溃报告 发送堆栈跟踪帮助 Conversations 开发人员 确认消息 当你已收到消息并且已阅时通知好友 - UI 选项 OpenKeychain 报告了一个错误 解密文件时出现 I/O 错误 接受 @@ -275,12 +272,10 @@ 是否确定删除该指纹? 忽略 警告:在没有相互更新在线联系人的情况下发送将会出现未知问题。\n\n前往联系人详情以验证您订阅的在线联系人。 - 加密设置 强制要求端对端加密 总是发送加密信息(讨论组信息除外) 不保存加密信息 警告:此操作将会导致信息丢失 - 专家选项 请谨慎使用 关于 Conversations 编译及许可证信息 @@ -430,7 +425,6 @@ 2 个小时 8 个小时 直到新的通知 - 输入选项 回车是发送 用回车键来发送消息 显示回车键 @@ -492,20 +486,14 @@ 收到的消息将显示为白底黑字 Tor network 不可用 损坏 - 上线设置 关闭屏幕时离开 当屏幕关闭时将标记您的资源为离开状态 静音模式时不可用 当设备进入静音模式时把资源标识改为不可用 - 扩展的连接选项 - 设置账户时显示主机名和端口选项 xmpp.example.com 使用证书添加账户 无法解析证书 留空以认证 w/ 证书 - 正在存档配置 - 正在获取存档配置。请稍后... - 无法获取存档的配置 验证码 需要验证码 输入图片中的文字 @@ -515,7 +503,6 @@ 获取 OMEMO 密钥错误! 请用证书验证 OMEMO 密钥! 您的设备不支持设备证书选择! - 连接选项 通过 Tor 连接 所有连接使用 Tor 网络隧道。需要 Orbot 主机名 @@ -538,7 +525,6 @@ 发行人 通用名称 组织 - SHA1 (不可用) 未发现证书 为所有信息显示通知 @@ -546,7 +532,6 @@ 禁用通知 暂停通知 压缩图片 - 缩小并压缩图片 总是 自动 启用节电模式 diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml index b66c87c7..ce80073b 100644 --- a/src/main/res/values-zh-rTW/strings.xml +++ b/src/main/res/values-zh-rTW/strings.xml @@ -77,7 +77,6 @@ 客戶端標示名稱 接收文件 自動接收小於 … 的文件 - 通知設定 通知 收到新訊息時通知 震動 @@ -86,12 +85,10 @@ 收到新訊息時播放鈴聲 通知限期 收到副本後,關閉通知一小段時間 - 進階選項 總是不發送故障報告 發送「堆疊追蹤」給 Conversations 的開發人員能幫助改進本程式 確認訊息 讓你的聯絡人知道你已收到及閱讀訊息 - 介面選項 OpenKeychain 回報了一個錯誤 解密文件時出現 I/O 錯誤 接受 @@ -224,12 +221,10 @@ 你確定刪除該指紋嗎? 忽略 警告: 在沒有互相關注狀態訊息的情況下發送或會引起不能預計的問題。\n\n請檢視聯絡人詳情頁面以確認你們的關注狀態。 - 加密設定 強制要求端到端加密 總是發送加密訊息 (群組訊息除外) 不儲存加密訊息 警告: 此操作或會導致訊息丟失 - 專家選項 請小心設定 增加字體大小 讓整個 app 界面使用更大號的字體 -- cgit v1.2.3 From df992d25665aed3eaec25662e70a3b859667c624 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 19 Feb 2016 20:54:43 +0100 Subject: don't reset whisper on reInit. fixes #1637 --- src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index c02a33b0..a39b6fee 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -738,9 +738,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa this.keychainUnlock = KEYCHAIN_UNLOCK_NOT_REQUIRED; this.conversation = conversation; - if (this.conversation.getMode() == Conversation.MODE_MULTI) { - this.conversation.setNextCounterpart(null); - } boolean canWrite = this.conversation.getMode() == Conversation.MODE_SINGLE || this.conversation.getMucOptions().participating(); this.mEditMessage.setEnabled(canWrite); this.mSendButton.setEnabled(canWrite); -- cgit v1.2.3 From a2cb009f4cb750a1e2953202852e889f78041c05 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 19 Feb 2016 20:54:53 +0100 Subject: skip avatar ui when pep is not available. fixes #1706 --- .../java/eu/siacs/conversations/ui/EditAccountActivity.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java index 53fa9ff7..266ae840 100644 --- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java @@ -50,6 +50,7 @@ import eu.siacs.conversations.utils.CryptoHelper; import eu.siacs.conversations.utils.UIHelper; import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xmpp.OnKeyStatusUpdated; +import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.XmppConnection.Features; import eu.siacs.conversations.xmpp.forms.Data; import eu.siacs.conversations.xmpp.jid.InvalidJidException; @@ -304,15 +305,14 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate @Override public void run() { final Intent intent; - if (avatar != null) { - intent = new Intent(getApplicationContext(), - StartConversationActivity.class); + final XmppConnection connection = mAccount.getXmppConnection(); + if (avatar != null || (connection != null && !connection.getFeatures().pep())) { + intent = new Intent(getApplicationContext(), StartConversationActivity.class); if (xmppConnectionService != null && xmppConnectionService.getAccounts().size() == 1) { intent.putExtra("init", true); } } else { - intent = new Intent(getApplicationContext(), - PublishProfilePictureActivity.class); + intent = new Intent(getApplicationContext(), PublishProfilePictureActivity.class); intent.putExtra(EXTRA_ACCOUNT, mAccount.getJid().toBareJid().toString()); intent.putExtra("setup", true); } -- cgit v1.2.3 From e6f8b7d9fa30e4e231a07cdbbb225e462893eb3d Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 19 Feb 2016 21:02:33 +0100 Subject: decrypt pgp message corrections --- .../eu/siacs/conversations/parser/MessageParser.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index c4b63d61..247fd72b 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -117,13 +117,6 @@ public class MessageParser extends AbstractParser implements return finishedMessage; } - private Message parsePGPChat(final Conversation conversation, String pgpEncrypted, int status) { - final Message message = new Message(conversation, pgpEncrypted, Message.ENCRYPTION_PGP, status); - PgpDecryptionService pgpDecryptionService = conversation.getAccount().getPgpDecryptionService(); - pgpDecryptionService.add(message); - return message; - } - private class Invite { Jid jid; String password; @@ -362,7 +355,7 @@ public class MessageParser extends AbstractParser implements message = new Message(conversation, body, Message.ENCRYPTION_NONE, status); } } else if (pgpEncrypted != null) { - message = parsePGPChat(conversation, pgpEncrypted, status); + message = new Message(conversation, pgpEncrypted, Message.ENCRYPTION_PGP, status); } else if (axolotlEncrypted != null) { message = parseAxolotlChat(axolotlEncrypted, from, remoteMsgId, conversation, status); if (message == null) { @@ -410,6 +403,7 @@ public class MessageParser extends AbstractParser implements replacedMessage.setBody(message.getBody()); replacedMessage.setEdited(replacedMessage.getRemoteMsgId()); replacedMessage.setRemoteMsgId(remoteMsgId); + replacedMessage.setEncryption(message.getEncryption()); if (replacedMessage.getStatus() == Message.STATUS_RECEIVED) { replacedMessage.markUnread(); } @@ -417,6 +411,9 @@ public class MessageParser extends AbstractParser implements if (mXmppConnectionService.confirmMessages() && remoteMsgId != null && !isForwarded && !isTypeGroupChat) { sendMessageReceipts(account, packet); } + if (replacedMessage.getEncryption() == Message.ENCRYPTION_PGP) { + conversation.getAccount().getPgpDecryptionService().add(replacedMessage); + } return; } else { Log.d(Config.LOGTAG,account.getJid().toBareJid()+": received message correction but verification didn't check out"); @@ -438,6 +435,10 @@ public class MessageParser extends AbstractParser implements conversation.add(message); } + if (message.getEncryption() == Message.ENCRYPTION_PGP) { + conversation.getAccount().getPgpDecryptionService().add(message); + } + if (query == null || query.getWith() == null) { //either no mam or catchup if (status == Message.STATUS_SEND || status == Message.STATUS_SEND_RECEIVED) { mXmppConnectionService.markRead(conversation); -- cgit v1.2.3 From 3bde4dbedb80a8e1de89c09f58d842d7382598e8 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 20 Feb 2016 00:01:39 +0100 Subject: change uuid when replacing messages --- src/main/java/eu/siacs/conversations/parser/MessageParser.java | 5 ++++- .../java/eu/siacs/conversations/services/XmppConnectionService.java | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 247fd72b..f01e7ce1 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -9,6 +9,7 @@ import net.java.otr4j.session.SessionStatus; import java.util.ArrayList; import java.util.Set; +import java.util.UUID; import eu.siacs.conversations.Config; import eu.siacs.conversations.crypto.axolotl.AxolotlService; @@ -400,6 +401,8 @@ public class MessageParser extends AbstractParser implements && replacedMessage.getTrueCounterpart().equals(message.getTrueCounterpart()); if (fingerprintsMatch && (trueCountersMatch || conversation.getMode() == Conversation.MODE_SINGLE)) { Log.d(Config.LOGTAG, "replaced message '" + replacedMessage.getBody() + "' with '" + message.getBody() + "'"); + final String uuid = replacedMessage.getUuid(); + replacedMessage.setUuid(UUID.randomUUID().toString()); replacedMessage.setBody(message.getBody()); replacedMessage.setEdited(replacedMessage.getRemoteMsgId()); replacedMessage.setRemoteMsgId(remoteMsgId); @@ -407,7 +410,7 @@ public class MessageParser extends AbstractParser implements if (replacedMessage.getStatus() == Message.STATUS_RECEIVED) { replacedMessage.markUnread(); } - mXmppConnectionService.updateMessage(replacedMessage); + mXmppConnectionService.updateMessage(replacedMessage, uuid); if (mXmppConnectionService.confirmMessages() && remoteMsgId != null && !isForwarded && !isTypeGroupChat) { sendMessageReceipts(account, packet); } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 9b730637..b836e780 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -2159,6 +2159,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa updateConversationUi(); } + public void updateMessage(Message message, String uuid) { + databaseBackend.updateMessage(message, uuid); + updateConversationUi(); + } + protected void syncDirtyContacts(Account account) { for (Contact contact : account.getRoster().getContacts()) { if (contact.getOption(Contact.Options.DIRTY_PUSH)) { -- cgit v1.2.3 From 43b466704a1f5a08e1e2d4e98b6f2b7acb65cf21 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 20 Feb 2016 10:25:23 +0100 Subject: pulled translations from transifex --- src/main/res/values-nl/strings.xml | 28 ++++++++++++++++++++++++++++ src/main/res/values-zh-rCN/strings.xml | 21 +++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index c5d03158..76a8b950 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -102,6 +102,7 @@ De naam waarmee deze cliënt zich identificeert Aanvaard bestanden Aanvaard automatisch bestanden kleiner dan… + Melding Meldingen Melding als een nieuw bericht arriveert Trillen @@ -110,10 +111,12 @@ Speel beltoon af bij melding Uitstelperiode voor meldingen Schakel meldingen voor korte tijd uit als er een carbon copy wordt ontvangen + Geavanceerd Verstuur nooit crashrapportages Door crashrapportages te versturen help je de ontwikkeling van Conversations Bevestig berichten Laat je contacten weten wanneer je berichten hebt ontvangen en gelezen + Gebruikersomgeving OpenKeychain rapporteerde een fout I/O-fout tijdens ontsleutelen van bestand Aanvaarden @@ -188,6 +191,7 @@ XEP-0198: Stream Management XEP-0163: PEP (Avatars / OMEMO) XEP-0363: HTTP File Upload + XEP-0357: Push beschikbaar niet beschikbaar Ontbrekende publieke sleutel-aankondigingen @@ -237,6 +241,7 @@ Jij Onderwerp van groepsgesprek bewerken Groepsgesprek niet gevonden + Onbekende fout ontvangen Verlaten Contact heeft je toegevoegd aan zijn/haar contacten Contact toevoegen aan eigen contacten @@ -271,10 +276,14 @@ Ben je zeker dat je deze vingerafdruk wil verwijderen? Negeren Waarschuwing: Dit verzenden zonder wederzijdse aanwezigheidsupdates kan voor onverwachte problemen zorgen.\n\nGa naar contactgegevens om je aanwezigheidsupdates te bevestigen. + Beveiliging Verplicht end-to-end-versleuteling Stuur berichten altijd versleuteld (behalve in groepsgesprekken) + Berichtverbetering toestaan + Sta je contacten toe hun berichten na het versturen te verbeteren Sla versleutelde berichten niet op Waarschuwing: dit kan leiden tot verlies van berichten + Instellingen voor experts Wees voorzichtig met deze instellingen Over Conversations Build en licentie-informatie @@ -292,6 +301,8 @@ Andere Groepsgespreksnaam Gebruik onderwerp van kamer ipv JID om groepsgesprekken te identificeren + Automatisch deelnemen aan groepsgesprekken + Respecteer de autojoin-vlag bij groepsgespreksbladwijzers OTR-vingerafdruk gekopieerd naar klembord! OMEMO-vingerafdruk gekopieerd naar klembord! Je bent verbannen uit dit groepsgesprek @@ -422,6 +433,7 @@ 2 uur 8 uur Voor onbepaalde duur + Invoer Enter is versturen Gebruik de enter-toets om berichten te versturen Toon enter-toets @@ -485,13 +497,21 @@ Toon ontvangen berichten als zwarte tekst op een witte achtergrond Tor-netwerk niet beschikbaar Gebroken + Aanwezigheid Even weg wanneer scherm uit staat Stelt je bron in als even weg wanneer het scherm uitgeschakeld is Niet beschikbaar in stille modus Stelt je bron in als niet beschikbaar wanneer je apparaat in stille modus staat + Uitgebreide verbindingsinstellingen + Toon hostnaam- en poortinstellingen bij instellen van een account + xmpp.voorbeeld.be Account met certificaat toevoegen Kan certificaat niet verwerken Laat leeg om te authenticeren met certificaat + Archiefvoorkeuren + Voorkeuren voor archief aan serverzijde + Ophalen van archiefvoorkeuren. Even geduld… + Kon archiefvoorkeuren niet ophalen Captcha-tekst Captcha vereist voer de tekst van de afbeelding in @@ -501,6 +521,7 @@ Fout bij ophalen van OMEMO-sleutel! OMEMO-sleutel geverifieerd met certificaat! Je apparaat ondersteunt de selectie van cliënt-certificaten niet! + Verbinding Verbinden via Tor Tunnel alle verbindingen door het Tor-netwerk. Vereist Orbot Hostnaam @@ -513,6 +534,7 @@ %d bericht %d berichten + Laad meer berichten Bestand gedeeld met %s Afbeelding gedeeld met %s Conversations heeft toegang nodig tot de externe opslag @@ -523,6 +545,7 @@ Uitgever Algemene naam Organisatie + SHA-1 (Niet beschikbaar) Geen certificaat gevonden Melding bij alle berichten @@ -530,6 +553,7 @@ Meldingen uitgeschakeld Meldingen gepauzeerd Afbeeldingen comprimeren + Verklein en comprimeer afbeeldingen Altijd Automatisch Batterij-optimalisaties ingeschakeld @@ -537,4 +561,8 @@ Je apparaat voert sterke batterij-optimalisaties uit op Conversations, die kunnen leiden tot vertraagde meldingen of zelfs verlies van berichten.\nJe zal nu gevraagd worden deze optimalisaties uit te schakelen. Uitschakelen Het gekozen vlak is te groot + (Geen actieve accounts) + Dit veld is vereist + Bericht verbeteren + Verbeterd bericht sturen diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index 9c6d66f5..5ed64ed5 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -102,6 +102,7 @@ 客户端标识名称 接收文件 自动接收小于 … 的文件 + 通知 通知 收到新消息时通知 震动 @@ -110,10 +111,12 @@ 收到新消息时的铃声 通知限期 接收副本短时间内关闭通知 + 高级 总不发送崩溃报告 发送堆栈跟踪帮助 Conversations 开发人员 确认消息 当你已收到消息并且已阅时通知好友 + UI OpenKeychain 报告了一个错误 解密文件时出现 I/O 错误 接受 @@ -188,6 +191,7 @@ XEP-0198: 流管理 XEP-0163: PEP (替身 / OMEMO) XEP-0363: HTTP 文件上传 + XEP-0357: Push 有效 无效 缺少公钥通知 @@ -272,10 +276,14 @@ 是否确定删除该指纹? 忽略 警告:在没有相互更新在线联系人的情况下发送将会出现未知问题。\n\n前往联系人详情以验证您订阅的在线联系人。 + 安全 强制要求端对端加密 总是发送加密信息(讨论组信息除外) + 允许更正消息 + 允许您的联系人追回编辑他们的信息 不保存加密信息 警告:此操作将会导致信息丢失 + 高级设置 请谨慎使用 关于 Conversations 编译及许可证信息 @@ -425,6 +433,7 @@ 2 个小时 8 个小时 直到新的通知 + 输入 回车是发送 用回车键来发送消息 显示回车键 @@ -486,14 +495,21 @@ 收到的消息将显示为白底黑字 Tor network 不可用 损坏 + 存在 关闭屏幕时离开 当屏幕关闭时将标记您的资源为离开状态 静音模式时不可用 当设备进入静音模式时把资源标识改为不可用 + 高级边接设置 + 注册账户时显示主机名和端口 xmpp.example.com 使用证书添加账户 无法解析证书 留空以认证 w/ 证书 + 压缩设置 + 服务端压缩设置 + 正在获取压缩设置。请稍后... + 获取压缩设置失败 验证码 需要验证码 输入图片中的文字 @@ -503,6 +519,7 @@ 获取 OMEMO 密钥错误! 请用证书验证 OMEMO 密钥! 您的设备不支持设备证书选择! + 连接 通过 Tor 连接 所有连接使用 Tor 网络隧道。需要 Orbot 主机名 @@ -525,6 +542,7 @@ 发行人 通用名称 组织 + SHA-1 (不可用) 未发现证书 为所有信息显示通知 @@ -532,6 +550,7 @@ 禁用通知 暂停通知 压缩图片 + 裁剪并压缩图片 总是 自动 启用节电模式 @@ -543,4 +562,6 @@ 选择区域过大 (没有激活的账户) 必填 + 更正消息 + 发送更正后的消息 -- cgit v1.2.3 From ed740b4868884b159cce284ebfbd80cefc904520 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 21 Feb 2016 11:42:41 +0100 Subject: some mucs may grant voice to visitors in unmoderated rooms --- src/main/java/eu/siacs/conversations/entities/MucOptions.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/entities/MucOptions.java b/src/main/java/eu/siacs/conversations/entities/MucOptions.java index 7f4ded11..be9d790d 100644 --- a/src/main/java/eu/siacs/conversations/entities/MucOptions.java +++ b/src/main/java/eu/siacs/conversations/entities/MucOptions.java @@ -282,7 +282,9 @@ public class MucOptions { } public boolean participating() { - return !online() || self.getRole().ranks(Role.PARTICIPANT); + return !online() + || self.getRole().ranks(Role.PARTICIPANT) + || hasFeature("muc_unmoderated"); } public boolean membersOnly() { -- cgit v1.2.3 From b00c561f8182e1bd8c65be931b0b52cc4298edbb Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 21 Feb 2016 11:43:03 +0100 Subject: check for uuid change when decrypting pgp messages --- src/main/java/eu/siacs/conversations/crypto/PgpEngine.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/crypto/PgpEngine.java b/src/main/java/eu/siacs/conversations/crypto/PgpEngine.java index 624d1b13..0afcb9e1 100644 --- a/src/main/java/eu/siacs/conversations/crypto/PgpEngine.java +++ b/src/main/java/eu/siacs/conversations/crypto/PgpEngine.java @@ -37,25 +37,24 @@ public class PgpEngine { this.mXmppConnectionService = service; } - public void decrypt(final Message message, - final UiCallback callback) { + public void decrypt(final Message message, final UiCallback callback) { Intent params = new Intent(); params.setAction(OpenPgpApi.ACTION_DECRYPT_VERIFY); + final String uuid = message.getUuid(); if (message.getType() == Message.TYPE_TEXT) { - InputStream is = new ByteArrayInputStream(message.getBody() - .getBytes()); + InputStream is = new ByteArrayInputStream(message.getBody().getBytes()); final OutputStream os = new ByteArrayOutputStream(); api.executeApiAsync(params, is, os, new IOpenPgpCallback() { @Override public void onReturn(Intent result) { notifyPgpDecryptionService(message.getConversation().getAccount(), OpenPgpApi.ACTION_DECRYPT_VERIFY, result); - switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, - OpenPgpApi.RESULT_CODE_ERROR)) { + switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) { case OpenPgpApi.RESULT_CODE_SUCCESS: try { os.flush(); - if (message.getEncryption() == Message.ENCRYPTION_PGP) { + if (message.getEncryption() == Message.ENCRYPTION_PGP + && message.getUuid().equals(uuid)) { message.setBody(os.toString()); message.setEncryption(Message.ENCRYPTION_DECRYPTED); final HttpConnectionManager manager = mXmppConnectionService.getHttpConnectionManager(); -- cgit v1.2.3 From d2cfac222ef7c144047eb7518a32f7cf9b39144f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 21 Feb 2016 17:32:46 +0100 Subject: show load more messages when auto loading is disabled and messages are still left on server --- .../conversations/services/MessageArchiveService.java | 4 ++++ .../eu/siacs/conversations/ui/ConversationFragment.java | 16 ++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java index 165c7c2a..59a37fe5 100644 --- a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java +++ b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java @@ -189,6 +189,10 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { } } + public boolean queryInProgress(Conversation conversation) { + return queryInProgress(conversation, null); + } + public void processFin(Element fin, Jid from) { if (fin == null) { return; diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index a39b6fee..ac06452a 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -53,6 +53,7 @@ import eu.siacs.conversations.entities.MucOptions; import eu.siacs.conversations.entities.Presence; import eu.siacs.conversations.entities.Transferable; import eu.siacs.conversations.entities.TransferablePlaceholder; +import eu.siacs.conversations.services.MessageArchiveService; import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.ui.XmppActivity.OnPresenceSelected; import eu.siacs.conversations.ui.XmppActivity.OnValueEdited; @@ -1052,10 +1053,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa protected void updateStatusMessages() { synchronized (this.messageList) { - final XmppConnection connection = conversation.getAccount().getXmppConnection(); - if (conversation.getLastClearHistory() != 0 - && connection != null - && connection.getFeatures().mam()) { + if (showLoadMoreMessages(conversation)) { this.messageList.add(0, Message.createLoadMoreMessage(conversation)); } if (conversation.getMode() == Conversation.MODE_SINGLE) { @@ -1081,8 +1079,14 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa } } - protected void showSnackbar(final int message, final int action, - final OnClickListener clickListener) { + private boolean showLoadMoreMessages(final Conversation c) { + final XmppConnection connection = c.getAccount().getXmppConnection(); + final boolean mam = connection != null && connection.getFeatures().mam(); + final MessageArchiveService service = activity.xmppConnectionService.getMessageArchiveService(); + return mam && (c.getLastClearHistory() != 0 || (c.countMessages() == 0 && c.hasMessagesLeftOnServer() && !service.queryInProgress(c))); + } + + protected void showSnackbar(final int message, final int action, final OnClickListener clickListener) { snackbar.setVisibility(View.VISIBLE); snackbar.setOnClickListener(null); snackbarMessage.setText(message); -- cgit v1.2.3 From c20d8ac69eeade4d5337d958ada7910db0c6d3a0 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 21 Feb 2016 23:03:30 +0100 Subject: version bump to 1.10.0 --- build.gradle | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ce88c410..deaae0e2 100644 --- a/build.gradle +++ b/build.gradle @@ -58,9 +58,10 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 23 - versionCode 124 - versionName "1.10.0-beta" + versionCode 127 + versionName "1.10.0" archivesBaseName += "-$versionName" + applicationId "eu.siacs.conversations" } compileOptions { -- cgit v1.2.3