diff --git a/.gitignore b/.gitignore index c689a5f59..e2091fa3d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ src/quicksyPlaystore/res/values/push.xml build/ captures/ signing.properties +signing.managed.properties # Ignore Gradle GUI config gradle-app.setting diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e9eb28bd..fedfe63c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,61 @@ # Changelog +### Version 2.15.3 + +* fix call integration on some Android 14 devices +* Introduce 'Invites from Strangers' setting + +### Version 2.15.2 + +* Fix Quicksy registration on Android 6/7 +* Play incoming call ringtone on notification channel + +### Version 2.15.1 + +* Show message status as icons +* Introduce 'Large font' setting for message bubbles + +### Version 2.15.0 + +* Use Material 3 theme +* Reorganize settings +* Synchronize read state across devices + +### Version 2.14.2 + +* Restore access to Channel Discovery for Android 6+7 +* Improve logging for failed call integration + +### Version 2.14.1 + +* Fix A/V calls on Android 8 +* Fix race conditions in new call integration +* Fix video compression sticking around + +### Version 2.14.0 + +* Improve integration of A/V calls into the operating system + +### Version 2.13.4 + +* Fix minor regressions introduced with 2.13.1 + +### Version 2.13.3 + +* Provide easier access to 'Privacy Policy' on Play Store version (Quicksy and Conversations) +* Remove address book integration on Play Store version of Conversations + +### Version 2.13.2 + +* minor bug fixes +* slight modifications in Quicksy onboard flow + +### Version 2.13.1 + +* Support P2P file transfer via WebRTC data channels +* Fix interoperability issues with Bind 2.0 on ejabberd +* Bundle Let’s Encrypt root certificates for Android <= 7 + ### Version 2.13.0 * Easier access to 'Show QR code' diff --git a/README.md b/README.md index a0cfed0b8..b006810bd 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,13 @@

-![screenshots](https://codeberg.org/iNPUTmice/Conversations/raw/branch/master/screenshots.png) +

+ + + + + +

## Design principles diff --git a/build.gradle b/build.gradle index 9269d10ed..b1b7a6d34 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "https://www.jitpack.io" } } dependencies { - classpath 'com.android.tools.build:gradle:8.2.0-rc03' + classpath 'com.android.tools.build:gradle:8.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21" } } @@ -35,24 +35,26 @@ configurations { } dependencies { - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' implementation 'androidx.viewpager:viewpager:1.0.0' - playstoreImplementation('com.google.firebase:firebase-messaging:23.3.1') { + playstoreImplementation('com.google.firebase:firebase-messaging:23.4.1') { exclude group: 'com.google.firebase', module: 'firebase-core' exclude group: 'com.google.firebase', module: 'firebase-analytics' exclude group: 'com.google.firebase', module: 'firebase-measurement-connector' } conversationsPlaystoreImplementation("com.android.installreferrer:installreferrer:2.2") - quicksyPlaystoreImplementation 'com.google.android.gms:play-services-auth-api-phone:18.0.1' + quicksyPlaystoreImplementation 'com.google.android.gms:play-services-auth-api-phone:18.0.2' implementation 'com.github.open-keychain.open-keychain:openpgp-api:v5.7.1' implementation("com.github.CanHub:Android-Image-Cropper:2.2.0") implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'androidx.exifinterface:exifinterface:1.3.6' + implementation 'androidx.exifinterface:exifinterface:1.3.7' implementation 'androidx.cardview:cardview:1.0.0' + implementation "androidx.preference:preference:1.2.1" implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'com.google.android.material:material:1.10.0' + implementation 'com.google.android.material:material:1.11.0' + implementation 'androidx.work:work-runtime:2.9.0' implementation "androidx.emoji2:emoji2:1.4.0" freeImplementation "androidx.emoji2:emoji2-bundled:1.4.0" @@ -65,7 +67,7 @@ dependencies { implementation 'me.leolin:ShortcutBadger:1.1.22@aar' implementation 'org.whispersystems:signal-protocol-java:2.6.2' implementation 'com.makeramen:roundedimageview:2.3.0' - implementation "com.wefika:flowlayout:0.4.1" + //noinspection GradleDependency implementation('com.github.natario1:Transcoder:v0.9.1') { exclude group: 'com.otaliastudios.opengl', module: 'egloo' @@ -78,15 +80,15 @@ dependencies { implementation 'org.hsluv:hsluv:0.2' implementation 'org.conscrypt:conscrypt-android:2.5.2' implementation 'me.drakeet.support:toastcompat:1.1.0' - implementation "com.leinardi.android:speed-dial:3.2.0" + implementation "com.leinardi.android:speed-dial:3.3.0" implementation "com.squareup.retrofit2:retrofit:2.9.0" implementation "com.squareup.retrofit2:converter-gson:2.9.0" - implementation "com.squareup.okhttp3:okhttp:4.11.0" + implementation "com.squareup.okhttp3:okhttp:4.12.0" implementation 'com.google.guava:guava:32.1.3-android' - implementation 'io.michaelrocks:libphonenumber-android:8.13.17' - implementation 'im.conversations.webrtc:webrtc-android:119.0.0' + quicksyImplementation 'io.michaelrocks:libphonenumber-android:8.13.28' + implementation 'im.conversations.webrtc:webrtc-android:119.0.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation "androidx.recyclerview:recyclerview:1.2.1" @@ -117,8 +119,8 @@ android { defaultConfig { minSdkVersion 24 targetSdkVersion 34 - versionCode 42081 - versionName "2.13.0" + versionCode 42110 + versionName "2.15.3" archivesBaseName += "-$versionName" applicationId "eu.siacs.conversations.narayana" resValue "string", "applicationId", applicationId @@ -164,10 +166,12 @@ android { def appName = "Quicksy" resValue "string", "app_name", appName buildConfigField "String", "APP_NAME", "\"$appName\"" + buildConfigField "String", "PRIVACY_POLICY", "\"https://quicksy.im/privacy.htm\"" } conversations { dimension "mode" + buildConfigField "String", "PRIVACY_POLICY", "\"https://conversations.im/privacy.html\"" } playstore { diff --git a/conversations.doap b/conversations.doap index 4d492f9b3..231859b2b 100644 --- a/conversations.doap +++ b/conversations.doap @@ -474,12 +474,26 @@ 0.1.0 + + + + complete + 0.1.0 + + + + + + complete + 0.1.0 + + - 2.9.13 - 2021-05-03 - + 2.14.0 + 2024-03-22 + diff --git a/fastlane/metadata/android/de-DE/changelogs/4208104.txt b/fastlane/metadata/android/de-DE/changelogs/4208104.txt new file mode 100644 index 000000000..9f9787c70 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4208104.txt @@ -0,0 +1,4 @@ +* Leichterer Zugriff auf 'QR-Code anzeigen' +* Unterstützung von PEP Native Bookmarks +* Unterstützung für SDP Offer / Answer-Model (wird von SIP Gateways verwendet) +* Anhebung der Ziel-API auf Android 14 diff --git a/fastlane/metadata/android/de-DE/changelogs/4208804.txt b/fastlane/metadata/android/de-DE/changelogs/4208804.txt new file mode 100644 index 000000000..b3e0925f4 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4208804.txt @@ -0,0 +1,3 @@ +* Unterstützung von P2P-Dateiübertragung über WebRTC-Datenkanäle +* Behebung von Interoperabilitätsproblemen mit Bind 2.0 auf ejabberd +* Bündelung von Let's Encrypt Root-Zertifikaten für Android <= 7 diff --git a/fastlane/metadata/android/de-DE/changelogs/4209004.txt b/fastlane/metadata/android/de-DE/changelogs/4209004.txt new file mode 100644 index 000000000..018d6e1eb --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* kleinere Fehlerbehebungen +* Geringfügige Änderungen beim Quicksy-Onboarding diff --git a/fastlane/metadata/android/de-DE/changelogs/4209204.txt b/fastlane/metadata/android/de-DE/changelogs/4209204.txt new file mode 100644 index 000000000..7658709d2 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* Einfacherer Zugang zu den Datenschutzbestimmungen in der Play Store-Version (Quicksy und Conversations) +* Entfernen der Adressbuchintegration in der Play Store-Version von Conversations diff --git a/fastlane/metadata/android/de-DE/changelogs/4209404.txt b/fastlane/metadata/android/de-DE/changelogs/4209404.txt new file mode 100644 index 000000000..bb5feb585 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4209404.txt @@ -0,0 +1 @@ +* Behebung kleinerer Schwierigkeiten, die mit 2.13.1 eingeführt wurden diff --git a/fastlane/metadata/android/de-DE/changelogs/4210104.txt b/fastlane/metadata/android/de-DE/changelogs/4210104.txt new file mode 100644 index 000000000..92e5e62ad --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4210104.txt @@ -0,0 +1 @@ +* Verbesserung der Integration von A/V-Aufrufen in das Betriebssystem diff --git a/fastlane/metadata/android/de-DE/changelogs/4210404.txt b/fastlane/metadata/android/de-DE/changelogs/4210404.txt new file mode 100644 index 000000000..22647fbf9 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4210404.txt @@ -0,0 +1,3 @@ +* Behebung von A/V-Anrufen unter Android 8 +* Behebung von Problemen bei der Integration neuer Anrufe +* Behebt das Problem mit der Videokompression diff --git a/fastlane/metadata/android/de-DE/changelogs/4210504.txt b/fastlane/metadata/android/de-DE/changelogs/4210504.txt new file mode 100644 index 000000000..ed0af77ba --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4210504.txt @@ -0,0 +1,2 @@ +* Wiederherstellung des Zugangs zu Channel Discovery für Android 6+7 +* Verbesserte Protokollierung bei fehlgeschlagener Anrufintegration diff --git a/fastlane/metadata/android/de-DE/changelogs/4210604.txt b/fastlane/metadata/android/de-DE/changelogs/4210604.txt new file mode 100644 index 000000000..6cfacb0f8 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4210604.txt @@ -0,0 +1,3 @@ +* Nutzung des Material 3 Designs +* Einstellungen umgestaltet +* Lesestatus geräteübergreifend synchronisieren diff --git a/fastlane/metadata/android/de-DE/changelogs/4210704.txt b/fastlane/metadata/android/de-DE/changelogs/4210704.txt new file mode 100644 index 000000000..6cfacb0f8 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* Nutzung des Material 3 Designs +* Einstellungen umgestaltet +* Lesestatus geräteübergreifend synchronisieren diff --git a/fastlane/metadata/android/de-DE/changelogs/4210804.txt b/fastlane/metadata/android/de-DE/changelogs/4210804.txt new file mode 100644 index 000000000..b50278794 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* Nachrichtenstatus als Symbole anzeigen +* Einstellung für Schriftgröße der Nachrichten hinzugefügt diff --git a/fastlane/metadata/android/de-DE/changelogs/4210904.txt b/fastlane/metadata/android/de-DE/changelogs/4210904.txt new file mode 100644 index 000000000..28fcd66e1 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* Quicksy Registrierung auf Android 6/7 repariert +* Klingelton für eingehende Anrufe im Benachrichtigungskanal abspielen diff --git a/fastlane/metadata/android/de-DE/changelogs/4211004.txt b/fastlane/metadata/android/de-DE/changelogs/4211004.txt new file mode 100644 index 000000000..7bf3e43fa --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* Anrufintegration auf einigen Android 14-Geräten behoben +* Neue Einstellung "Einladungen von Unbekannten" diff --git a/fastlane/metadata/android/en-US/changelogs/4208804.txt b/fastlane/metadata/android/en-US/changelogs/4208804.txt new file mode 100644 index 000000000..b6a7bb98f --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4208804.txt @@ -0,0 +1,3 @@ +* Support P2P file transfer via WebRTC data channels +* Fix interoperability issues with Bind 2.0 on ejabberd +* Bundle Let’s Encrypt root certificates for Android <= 7 diff --git a/fastlane/metadata/android/en-US/changelogs/4209004.txt b/fastlane/metadata/android/en-US/changelogs/4209004.txt new file mode 100644 index 000000000..b062bedcb --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* minor bug fixes +* slight modifications in Quicksy onboard flow diff --git a/fastlane/metadata/android/en-US/changelogs/4209204.txt b/fastlane/metadata/android/en-US/changelogs/4209204.txt new file mode 100644 index 000000000..83a947d54 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* Provide easier access to 'Privacy Policy' on Play Store version (Quicksy and Conversations) +* Remove address book integration on Play Store version of Conversations diff --git a/fastlane/metadata/android/en-US/changelogs/4209404.txt b/fastlane/metadata/android/en-US/changelogs/4209404.txt new file mode 100644 index 000000000..764f13c52 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4209404.txt @@ -0,0 +1 @@ +* Fix minor regressions introduced with 2.13.1 diff --git a/fastlane/metadata/android/en-US/changelogs/4210104.txt b/fastlane/metadata/android/en-US/changelogs/4210104.txt new file mode 100644 index 000000000..94c8f6058 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4210104.txt @@ -0,0 +1 @@ +* Improve integration of A/V calls into the operating system diff --git a/fastlane/metadata/android/en-US/changelogs/4210404.txt b/fastlane/metadata/android/en-US/changelogs/4210404.txt new file mode 100644 index 000000000..0715795ad --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4210404.txt @@ -0,0 +1,3 @@ +* Fix A/V calls on Android 8 +* Fix race conditions in new call integration +* Fix video compression sticking around diff --git a/fastlane/metadata/android/en-US/changelogs/4210504.txt b/fastlane/metadata/android/en-US/changelogs/4210504.txt new file mode 100644 index 000000000..b4c432acc --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4210504.txt @@ -0,0 +1,2 @@ +* Restore access to Channel Discovery for Android 6+7 +* Improve logging for failed call integration diff --git a/fastlane/metadata/android/en-US/changelogs/4210704.txt b/fastlane/metadata/android/en-US/changelogs/4210704.txt new file mode 100644 index 000000000..393d597c1 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* Use Material 3 theme +* Reorganize settings +* Synchronize read state across devices diff --git a/fastlane/metadata/android/en-US/changelogs/4210804.txt b/fastlane/metadata/android/en-US/changelogs/4210804.txt new file mode 100644 index 000000000..07755e93c --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* Show message status as icons +* Introduce 'Large font' setting for message bubbles diff --git a/fastlane/metadata/android/en-US/changelogs/4210904.txt b/fastlane/metadata/android/en-US/changelogs/4210904.txt new file mode 100644 index 000000000..db7288ce9 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* Fix Quicksy registration on Android 6/7 +* Play incoming call ringtone on notification channel diff --git a/fastlane/metadata/android/en-US/changelogs/4211004.txt b/fastlane/metadata/android/en-US/changelogs/4211004.txt new file mode 100644 index 000000000..4561aa2ce --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* fix call integration on some Android 14 devices +* Introduce 'Invites from Strangers' setting diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png index edf446926..41a06c6a6 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png index a3ea7d690..36b614d72 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png index b1847dae1..9e604b28a 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png index 76d112650..9adbf06ff 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png index bf13cd25d..b7aa16649 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/06.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/06.png index fc57ca922..b71d7c6f8 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/06.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/06.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/07.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/07.png index 44ce5f93b..31ce4be97 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/07.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/07.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/08.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/08.png index 94840e6c6..ae7e452d9 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/08.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/08.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/09.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/09.png index 0d18d8ce6..4b4e9923c 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/09.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/09.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/01.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/01.png index d447c6b85..686f945b5 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/01.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/01.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/02.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/02.png index 071008a45..ab4247ff4 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/02.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/02.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/03.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/03.png index 03b513ea4..c318c2f00 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/03.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/03.png differ diff --git a/fastlane/metadata/android/en-US/images/tenInchScreenshots/04.png b/fastlane/metadata/android/en-US/images/tenInchScreenshots/04.png index 3e154ea82..c0dc00c13 100644 Binary files a/fastlane/metadata/android/en-US/images/tenInchScreenshots/04.png and b/fastlane/metadata/android/en-US/images/tenInchScreenshots/04.png differ diff --git a/fastlane/metadata/android/es-ES/changelogs/4208804.txt b/fastlane/metadata/android/es-ES/changelogs/4208804.txt new file mode 100644 index 000000000..0a3ef27b1 --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4208804.txt @@ -0,0 +1,3 @@ +* Admite transferencia de archivos P2P a través del canal de datos WebRTC +* Solucionar problemas de interoperabilidad con Bind 2.0 en ejabberd +* Paquetes de certificado raíz Let's Encrypt para Android <= 7 diff --git a/fastlane/metadata/android/es-ES/changelogs/4209004.txt b/fastlane/metadata/android/es-ES/changelogs/4209004.txt new file mode 100644 index 000000000..700284fd2 --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* Correcciones de errores menores +* ligeras modificaciones en el flujo interno de Quicksy diff --git a/fastlane/metadata/android/es-ES/changelogs/4209204.txt b/fastlane/metadata/android/es-ES/changelogs/4209204.txt new file mode 100644 index 000000000..097d42728 --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* Facilitar el acceso a la "Política de privacidad" en la versión de Play Store (Quicksy y Conversations). +* Eliminar la integración de la libreta de direcciones en la versión Play Store de Conversations diff --git a/fastlane/metadata/android/es-ES/changelogs/4209404.txt b/fastlane/metadata/android/es-ES/changelogs/4209404.txt new file mode 100644 index 000000000..e6999f067 --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4209404.txt @@ -0,0 +1 @@ +* Se corrigieron problemas menores introducidos en 2.13.1 diff --git a/fastlane/metadata/android/es-ES/changelogs/4210104.txt b/fastlane/metadata/android/es-ES/changelogs/4210104.txt new file mode 100644 index 000000000..4900383ba --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4210104.txt @@ -0,0 +1 @@ +* Mejorar la integración de las llamadas A/V en el sistema operativo diff --git a/fastlane/metadata/android/es-ES/changelogs/4210404.txt b/fastlane/metadata/android/es-ES/changelogs/4210404.txt new file mode 100644 index 000000000..369ede070 --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4210404.txt @@ -0,0 +1,3 @@ +* Reparar llamadas de audio/vídeo en Android 8 +* Se corrigió la condición de carrera en la integración de nuevas llamadas. +* Soluciona el problema de compresión de video diff --git a/fastlane/metadata/android/es-ES/changelogs/4210504.txt b/fastlane/metadata/android/es-ES/changelogs/4210504.txt new file mode 100644 index 000000000..1589d1ec1 --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4210504.txt @@ -0,0 +1,2 @@ +* Restaurar el acceso a Channel Discovery para Android 6+7 +* Mejorar el registro para la integración de llamadas fallidas diff --git a/fastlane/metadata/android/es-ES/changelogs/4210704.txt b/fastlane/metadata/android/es-ES/changelogs/4210704.txt new file mode 100644 index 000000000..f010db04b --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* Usar el tema Material 3 +* Reorganizar la configuración +* Sincronizar el estado de lectura entre dispositivos diff --git a/fastlane/metadata/android/es-ES/changelogs/4210804.txt b/fastlane/metadata/android/es-ES/changelogs/4210804.txt new file mode 100644 index 000000000..1ece57245 --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* Mostrar el estado de los mensajes como iconos +* Introducir la opción "Fuente grande" para las burbujas de mensajes diff --git a/fastlane/metadata/android/es-ES/changelogs/4210904.txt b/fastlane/metadata/android/es-ES/changelogs/4210904.txt new file mode 100644 index 000000000..8068bcd41 --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* Arreglar el registro de Quicksy en Android 6/7 +* Reproducir el tono de llamada entrante en el canal de notificación diff --git a/fastlane/metadata/android/es-ES/changelogs/4211004.txt b/fastlane/metadata/android/es-ES/changelogs/4211004.txt new file mode 100644 index 000000000..a87e7d85c --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* arreglar la integración de llamadas en algunos dispositivos con Android 14 +* Introducir la configuración 'Invitaciones de extraños' diff --git a/fastlane/metadata/android/gl-ES/changelogs/4208104.txt b/fastlane/metadata/android/gl-ES/changelogs/4208104.txt index f4532b679..ff912c254 100644 --- a/fastlane/metadata/android/gl-ES/changelogs/4208104.txt +++ b/fastlane/metadata/android/gl-ES/changelogs/4208104.txt @@ -1,4 +1,4 @@ -* Acceso mais rápido á 'Mostrar código QR' -* Soporte para a PEP Marcadores Nativos +* Acceso mais rápido a 'Mostrar código QR' +* Soporte para PEP Marcadores Nativos * Engadido soporte para SDP Offer / Answer Model (usado por pasarelas SIP) * Establecida a API de Android 14 como obxectivo diff --git a/fastlane/metadata/android/gl-ES/changelogs/4208804.txt b/fastlane/metadata/android/gl-ES/changelogs/4208804.txt new file mode 100644 index 000000000..03aa6966c --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4208804.txt @@ -0,0 +1,3 @@ +* Soporte para a transferencia de ficheiros P2P a través de canles de datos WebRTC +* Arranxo dos problemas de interoperabilidade con Bind 2.0 en ejabberd +* Paquete de certificados raiz Let's Encrypt para Android <=7 diff --git a/fastlane/metadata/android/gl-ES/changelogs/4209004.txt b/fastlane/metadata/android/gl-ES/changelogs/4209004.txt new file mode 100644 index 000000000..d1f8b3e26 --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* arranxos menores +* pequenos cambios no primeiro incio de Quicksy diff --git a/fastlane/metadata/android/gl-ES/changelogs/4209204.txt b/fastlane/metadata/android/gl-ES/changelogs/4209204.txt new file mode 100644 index 000000000..4b7430123 --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* Acceso máis doado á 'Política de Privacidade' na versión da Play Store (Quicksy e Conversations) +* Retirada a integración coa libreta de enderezo na versión de Conversations da Play Store diff --git a/fastlane/metadata/android/gl-ES/changelogs/4209404.txt b/fastlane/metadata/android/gl-ES/changelogs/4209404.txt new file mode 100644 index 000000000..fc1d02e69 --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4209404.txt @@ -0,0 +1 @@ +* Arranxo de regresións menores introducidas en 2.13.1 diff --git a/fastlane/metadata/android/gl-ES/changelogs/4210104.txt b/fastlane/metadata/android/gl-ES/changelogs/4210104.txt new file mode 100644 index 000000000..33f208375 --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4210104.txt @@ -0,0 +1 @@ +* Melloras na integración das chamadas de A/V co sistema operativo diff --git a/fastlane/metadata/android/gl-ES/changelogs/4210404.txt b/fastlane/metadata/android/gl-ES/changelogs/4210404.txt new file mode 100644 index 000000000..b6957eae4 --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4210404.txt @@ -0,0 +1,3 @@ +* Arranxo das chamadas de A/V en Android 8 +* Arranxo das prioridades na novas chamadas integradas +* Arranxo do antigo problema coa compresión do vídeo diff --git a/fastlane/metadata/android/gl-ES/changelogs/4210504.txt b/fastlane/metadata/android/gl-ES/changelogs/4210504.txt new file mode 100644 index 000000000..7867d88e2 --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4210504.txt @@ -0,0 +1,2 @@ +* Restablecer o acceso ao Descubrimento de Canles para Android 6+7 +* Mellorar o acceso para a integración de chamadas que fallou diff --git a/fastlane/metadata/android/gl-ES/changelogs/4210704.txt b/fastlane/metadata/android/gl-ES/changelogs/4210704.txt new file mode 100644 index 000000000..de5764b97 --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* Uso do decorado Material 3 +* Reorganización dos Axustes +* Sincronización entre dispositivos do estado de lectura diff --git a/fastlane/metadata/android/gl-ES/changelogs/4210804.txt b/fastlane/metadata/android/gl-ES/changelogs/4210804.txt new file mode 100644 index 000000000..af0ad0fc0 --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* Mostrar estado das mensaxes como iconas +* Novo axuste para 'Tamaño de letra grande' nas mensaxes diff --git a/fastlane/metadata/android/gl-ES/changelogs/4210904.txt b/fastlane/metadata/android/gl-ES/changelogs/4210904.txt new file mode 100644 index 000000000..14ebde079 --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* Solución para crear conta con Quicksy en Android 6/7 +* Reproducir ton de chamada recibida na canle de notificación diff --git a/fastlane/metadata/android/gl-ES/changelogs/4211004.txt b/fastlane/metadata/android/gl-ES/changelogs/4211004.txt new file mode 100644 index 000000000..2244834aa --- /dev/null +++ b/fastlane/metadata/android/gl-ES/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* arranxo da integración de chamadas nalgúns Android 14 +* novo axuste para 'Convites de Descoñecidas' diff --git a/fastlane/metadata/android/it-IT/changelogs/4208804.txt b/fastlane/metadata/android/it-IT/changelogs/4208804.txt new file mode 100644 index 000000000..7139e8caa --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4208804.txt @@ -0,0 +1,3 @@ +* Supporto per trasferimenti P2P di file via canali di dati WebRTC +* Corretti problemi di interoperabilità con Bind 2.0 su ejabberd +* Integra certificati root di Let’s Encrypt su Android <= 7 diff --git a/fastlane/metadata/android/it-IT/changelogs/4209004.txt b/fastlane/metadata/android/it-IT/changelogs/4209004.txt new file mode 100644 index 000000000..6186e8210 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* correzioni minori +* piccole modifiche nel flusso di configurazione di Quicksy diff --git a/fastlane/metadata/android/it-IT/changelogs/4209204.txt b/fastlane/metadata/android/it-IT/changelogs/4209204.txt new file mode 100644 index 000000000..156846bd2 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* Accesso più facile alla 'Informativa sulla privacy' nella versione Play Store (Quicksy e Conversations) +* Rimossa l'integrazione alla rubrica nella versione Play Store di Conversations diff --git a/fastlane/metadata/android/it-IT/changelogs/4209404.txt b/fastlane/metadata/android/it-IT/changelogs/4209404.txt new file mode 100644 index 000000000..bf3a2bcf7 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4209404.txt @@ -0,0 +1 @@ +* Corrette regressioni minori introdotte con la 2.13.1 diff --git a/fastlane/metadata/android/it-IT/changelogs/4210104.txt b/fastlane/metadata/android/it-IT/changelogs/4210104.txt new file mode 100644 index 000000000..eb4727682 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4210104.txt @@ -0,0 +1 @@ +* Migliorata l'integrazione di chiamate A/V nel sistema operativo diff --git a/fastlane/metadata/android/it-IT/changelogs/4210404.txt b/fastlane/metadata/android/it-IT/changelogs/4210404.txt new file mode 100644 index 000000000..21cd18a6f --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4210404.txt @@ -0,0 +1,3 @@ +* Corrette chiamate A/V su Android 8 +* Corretta race conditions nella nuova integrazione chiamate +* Correzioni sulla compressione video diff --git a/fastlane/metadata/android/it-IT/changelogs/4210504.txt b/fastlane/metadata/android/it-IT/changelogs/4210504.txt new file mode 100644 index 000000000..e1da9eb0d --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4210504.txt @@ -0,0 +1,2 @@ +* Ripristinato l'accesso alla scoperta dei canali su Android 6+7 +* Migliorati i log per integrazione fallita di chiamate diff --git a/fastlane/metadata/android/it-IT/changelogs/4210704.txt b/fastlane/metadata/android/it-IT/changelogs/4210704.txt new file mode 100644 index 000000000..76e3788b9 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* Utilizzo del tema Material 3 +* Riorganizzazione impostazioni +* Sincronizzazione stato di lettura tra dispositivi diff --git a/fastlane/metadata/android/it-IT/changelogs/4210804.txt b/fastlane/metadata/android/it-IT/changelogs/4210804.txt new file mode 100644 index 000000000..4a8100b23 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* Mostra lo stato dei messaggi come icone +* Introdotta impostazione 'Caratteri grandi' per i messaggi diff --git a/fastlane/metadata/android/it-IT/changelogs/4210904.txt b/fastlane/metadata/android/it-IT/changelogs/4210904.txt new file mode 100644 index 000000000..8e6d9c15b --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* Corretta registrazione a Quicksy su Android 6/7 +* Riproduci suoneria per chiamate in arrivo nel canale di notifica diff --git a/fastlane/metadata/android/it-IT/changelogs/4211004.txt b/fastlane/metadata/android/it-IT/changelogs/4211004.txt new file mode 100644 index 000000000..771eb3ba9 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* corretta l'integrazione delle chiamate su alcuni dispositivi con Android 14 +* Introdotta l'impostazione 'Inviti da estranei' diff --git a/fastlane/metadata/android/pl-PL/changelogs/4210704.txt b/fastlane/metadata/android/pl-PL/changelogs/4210704.txt new file mode 100644 index 000000000..3b80e52cf --- /dev/null +++ b/fastlane/metadata/android/pl-PL/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* Używanie motywu Material 3 +* Reorganizacja ustawień +* Synchronizacja stanu przeczytania pomiędzy urządzeniami diff --git a/fastlane/metadata/android/pl-PL/changelogs/4210804.txt b/fastlane/metadata/android/pl-PL/changelogs/4210804.txt new file mode 100644 index 000000000..068bc9096 --- /dev/null +++ b/fastlane/metadata/android/pl-PL/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* Pokazywanie stanu wiadomości poprzez ikony +* Wprowadzenia ustawienia „Duża czcionka” dla baniek wiadomości diff --git a/fastlane/metadata/android/pl-PL/changelogs/4210904.txt b/fastlane/metadata/android/pl-PL/changelogs/4210904.txt new file mode 100644 index 000000000..7284d0dee --- /dev/null +++ b/fastlane/metadata/android/pl-PL/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* Naprawienie rejestracji w Quicksy w Androidzie 6/7 +* Odtwarzanie dzwonka połączenia przychodzącego w kanale powiadomień diff --git a/fastlane/metadata/android/pl-PL/changelogs/4211004.txt b/fastlane/metadata/android/pl-PL/changelogs/4211004.txt new file mode 100644 index 000000000..bd200026c --- /dev/null +++ b/fastlane/metadata/android/pl-PL/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* Naprawienie integracji rozmów na niektórych urządzeniach z Androidem 14 +* Wprowadzenie ustawienia „Zaproszenia od nieznajomych” diff --git a/fastlane/metadata/android/ru-RU/changelogs/4209004.txt b/fastlane/metadata/android/ru-RU/changelogs/4209004.txt new file mode 100644 index 000000000..1ceb3240a --- /dev/null +++ b/fastlane/metadata/android/ru-RU/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* незначительные исправления +* значительные изменения приветствия Quicksy diff --git a/fastlane/metadata/android/ru-RU/changelogs/4209204.txt b/fastlane/metadata/android/ru-RU/changelogs/4209204.txt new file mode 100644 index 000000000..fba3c9be5 --- /dev/null +++ b/fastlane/metadata/android/ru-RU/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* Упрощён доступ к Политике конфиденциальности в версии для Play Маркета (Quicksy и Conversations) +* Из версии Conversations для Play Маркета удалена интеграция с Контактами diff --git a/fastlane/metadata/android/ru-RU/changelogs/4209404.txt b/fastlane/metadata/android/ru-RU/changelogs/4209404.txt new file mode 100644 index 000000000..475ea3349 --- /dev/null +++ b/fastlane/metadata/android/ru-RU/changelogs/4209404.txt @@ -0,0 +1 @@ +* Исправлены незначительные ухудшения, появившиеся в версии 2.13.1 diff --git a/fastlane/metadata/android/ru-RU/changelogs/4210104.txt b/fastlane/metadata/android/ru-RU/changelogs/4210104.txt new file mode 100644 index 000000000..3b2e3069b --- /dev/null +++ b/fastlane/metadata/android/ru-RU/changelogs/4210104.txt @@ -0,0 +1 @@ +* Улучшена интеграция вызовов A/V с операционной системой diff --git a/fastlane/metadata/android/sq/changelogs/42037.txt b/fastlane/metadata/android/sq/changelogs/42037.txt index 35e334aad..dab12a7a6 100644 --- a/fastlane/metadata/android/sq/changelogs/42037.txt +++ b/fastlane/metadata/android/sq/changelogs/42037.txt @@ -1,8 +1,8 @@ Version 2.10.9 -* Kërko leje Bluetooth, kur bëhen thirrje A/V (Mund ta hidhni tej këtë, nëse s’përdorni kufje Bluetooth me mikrofon) -* Ndreqje të mete, kur thirret dikush në Movim -* Ndreqje shfaqjeje avatari gabim për fjalosje në grup +* Kërko leje Bluetooth, kur bëhen thirrje A/V (Mund ta hidhni tej, nëse s’përdorni kufje Bluetooth me mikrofon) +* Ndreqje të mete, për thirrje në Movim +* Ndreqje shfaqjeje avatari të gabuar për fjalosje në grup * Pyet përherë për lënie jashtë optimizimesh për baterinë * Vendosje flamurke “vetëm vendore” për njoftime “x llogari të lidhura” -* Ndreqje ndërveprimi me shtojcën Google Maps Share Location Plugin -* Heqje poshtëshënimi lidhur me tarifa shërbyesi +* Ndreqje ndërveprimi me shtojcën Google Maps Share Location +* Heqje poshtëshënimi lidhur me tarifë shërbyesi diff --git a/fastlane/metadata/android/sq/changelogs/42050.txt b/fastlane/metadata/android/sq/changelogs/42050.txt new file mode 100644 index 000000000..30e4121e3 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/42050.txt @@ -0,0 +1 @@ +* Rritje rrezeje cepi për foto profilesh diff --git a/fastlane/metadata/android/sq/changelogs/42059.txt b/fastlane/metadata/android/sq/changelogs/42059.txt new file mode 100644 index 000000000..2896fb077 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/42059.txt @@ -0,0 +1,2 @@ +* Kalim i versionit për Target SDK sërish në 33 +* Ndreqje problemesh për shërbyes që mbulojnë SASL2 me/pa Administrim brendazi Rrjedhash diff --git a/fastlane/metadata/android/sq/changelogs/42060.txt b/fastlane/metadata/android/sq/changelogs/42060.txt new file mode 100644 index 000000000..dcd9dfe36 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/42060.txt @@ -0,0 +1 @@ +* Ndreqje e interpretimit gabimisht të 'q' si një shkronjë cirilike diff --git a/fastlane/metadata/android/sq/changelogs/42061.txt b/fastlane/metadata/android/sq/changelogs/42061.txt new file mode 100644 index 000000000..bb3622e75 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/42061.txt @@ -0,0 +1 @@ +* Heqje nga versioni në Google Play e veçorisë së pikasjes së kanaleve diff --git a/fastlane/metadata/android/sq/changelogs/42062.txt b/fastlane/metadata/android/sq/changelogs/42062.txt new file mode 100644 index 000000000..c9b0cac5e --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/42062.txt @@ -0,0 +1 @@ +* Çaktivizim i hapjes së kartelave kopjeruajtje (ceb) nga përgjegjës kartelash diff --git a/fastlane/metadata/android/sq/changelogs/42065.txt b/fastlane/metadata/android/sq/changelogs/42065.txt new file mode 100644 index 000000000..a6a7fa9fc --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/42065.txt @@ -0,0 +1 @@ +* Sjellje për herë të parë e formati të ri kartelash kopjeruajtje diff --git a/fastlane/metadata/android/sq/changelogs/42068.txt b/fastlane/metadata/android/sq/changelogs/42068.txt new file mode 100644 index 000000000..89ba9f52d --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/42068.txt @@ -0,0 +1,2 @@ +* mbulim rregullimesh njoftimi bazuar në bisedë specifike +* përdorim opus-i për mesazhe zanorë në Android 10 diff --git a/fastlane/metadata/android/sq/changelogs/42072.txt b/fastlane/metadata/android/sq/changelogs/42072.txt new file mode 100644 index 000000000..e836fb46c --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/42072.txt @@ -0,0 +1,3 @@ +* Kalim versioni për varësi libwebrtc në M117 dhe ndryshim edhe për libvpx +* Rikthim te AAC për mesazhe zanorë +* Mbulim rregullimesh gjuhe sipas aplikacioni diff --git a/fastlane/metadata/android/sq/changelogs/4207704.txt b/fastlane/metadata/android/sq/changelogs/4207704.txt new file mode 100644 index 000000000..9b77d5562 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4207704.txt @@ -0,0 +1,3 @@ +* Mbulim për DNS Private (DNS përmes TLS) +* Mbulim për ikonë nisësi të përshtatur nga temë +* Ndreqje problemi të rrallë me leje, kur ndahen kartela në Android 11+ diff --git a/fastlane/metadata/android/sq/changelogs/4208104.txt b/fastlane/metadata/android/sq/changelogs/4208104.txt new file mode 100644 index 000000000..6905c9f74 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4208104.txt @@ -0,0 +1,4 @@ +* Përdorim më i lehtë i “Shfaq kod QR” +* Mbulim për Faqerojtës PEP të vetëm sistemit +* Shtim mbulimi për Ofertë SDP / Model Përgjigjesh (Përdorur nga kanale SIP) +* Ngritje e versioni të synuar API në Android 14 diff --git a/fastlane/metadata/android/sq/changelogs/4208804.txt b/fastlane/metadata/android/sq/changelogs/4208804.txt new file mode 100644 index 000000000..2a49661a0 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4208804.txt @@ -0,0 +1,3 @@ +* Mbulim shpërnguljesh kartelash P2P përmes kanalesh WebRTC të dhënash +* Ndreqje problemesh shkalle ndërveprimi me Bind 2.0 në ejabberd +* Paketim dëshmish Let’s Encrypt rrënje për Android <= 7 diff --git a/fastlane/metadata/android/sq/changelogs/4209004.txt b/fastlane/metadata/android/sq/changelogs/4209004.txt new file mode 100644 index 000000000..1241fb7bb --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* ndreqje të metash të vockla +* ndryshime të vockla te hapat e mirëseardhjes në Quicksy diff --git a/fastlane/metadata/android/sq/changelogs/4209204.txt b/fastlane/metadata/android/sq/changelogs/4209204.txt new file mode 100644 index 000000000..08c5f1322 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* Furnizim hyrjeje më të lehtë te “Rregulla Privatësie” në versionin Play Store (Quicksy dhe Conversations) +* Heqje integrimi libri adresash te versioni në Play Store i Conversations diff --git a/fastlane/metadata/android/sq/changelogs/4209404.txt b/fastlane/metadata/android/sq/changelogs/4209404.txt new file mode 100644 index 000000000..bd417916b --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4209404.txt @@ -0,0 +1 @@ +* Ndreqje prapakthimesh të vockla të sjella me 2.13.1 diff --git a/fastlane/metadata/android/sq/changelogs/4210104.txt b/fastlane/metadata/android/sq/changelogs/4210104.txt new file mode 100644 index 000000000..d9ae9cd78 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4210104.txt @@ -0,0 +1 @@ +* Përmirësim integrimi thirrjesh A/V me sistemin operativ diff --git a/fastlane/metadata/android/sq/changelogs/4210404.txt b/fastlane/metadata/android/sq/changelogs/4210404.txt new file mode 100644 index 000000000..0c47aa05f --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4210404.txt @@ -0,0 +1,3 @@ +* Ndreqje thirrjesh A/V në Android 8 +* Ndreqje “race conditions” në integrim thirrjeje të re +* Ndreqje ngjeshjeje videosh që mbetet diff --git a/fastlane/metadata/android/sq/changelogs/4210504.txt b/fastlane/metadata/android/sq/changelogs/4210504.txt new file mode 100644 index 000000000..18277fa08 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4210504.txt @@ -0,0 +1,2 @@ +* Rikthim përdorimi i Pikasjes së Kanaleve për Android 6+7 +* Përmirësim regjistrimi për integrim thirrjesh të dështuara diff --git a/fastlane/metadata/android/sq/changelogs/4210704.txt b/fastlane/metadata/android/sq/changelogs/4210704.txt new file mode 100644 index 000000000..a41f370ea --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* Përdorim teme Material 3 +* Risistemim rregullimesh +* Njëkohësim nëpër pajisje gjendjeje “i lexuar” diff --git a/fastlane/metadata/android/sq/changelogs/4210804.txt b/fastlane/metadata/android/sq/changelogs/4210804.txt new file mode 100644 index 000000000..e77cdf026 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* Shfaqe gjendje mesazhesh si ikona +* Sjellje e rregullimit “Shkronja të mëdha” për flluska mesazhesh diff --git a/fastlane/metadata/android/sq/changelogs/4210904.txt b/fastlane/metadata/android/sq/changelogs/4210904.txt new file mode 100644 index 000000000..1a7c4e531 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* Ndreqje regjistrimi Quicksy në Android 6/7 +* Luajtje e ziles së thirrjes ardhëse në kanal njoftimi diff --git a/fastlane/metadata/android/sq/changelogs/4211004.txt b/fastlane/metadata/android/sq/changelogs/4211004.txt new file mode 100644 index 000000000..21be2d1b2 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* ndreqje integrimi thirrjesh në disa pajisje me Android 14 +* Sjellje për herë të parë e rregullimit “Ftesa nga të Panjohur” diff --git a/fastlane/metadata/android/uk/changelogs/4208804.txt b/fastlane/metadata/android/uk/changelogs/4208804.txt new file mode 100644 index 000000000..6aa707982 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4208804.txt @@ -0,0 +1,3 @@ +* Підтримка передачі файлів P2P через канали даних WebRTC +* Виправлено проблеми сумісності з Bind 2.0 на ejabberd +* Пакет кореневих сертифікатів Let's Encrypt для версій Android до 7-ї включно diff --git a/fastlane/metadata/android/uk/changelogs/4209004.txt b/fastlane/metadata/android/uk/changelogs/4209004.txt new file mode 100644 index 000000000..2863414a6 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* Незначні виправлення помилок +* Деякі зміни у процесі підключення до Quicksy diff --git a/fastlane/metadata/android/uk/changelogs/4209204.txt b/fastlane/metadata/android/uk/changelogs/4209204.txt new file mode 100644 index 000000000..652ea89d8 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* Простіший доступ до «Політики конфіденційності» у версії Play Store (Quicksy та Conversations) +* Видалено інтеграцію адресної книги у версії Conversations для Play Store diff --git a/fastlane/metadata/android/uk/changelogs/4209404.txt b/fastlane/metadata/android/uk/changelogs/4209404.txt new file mode 100644 index 000000000..90e81392d --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4209404.txt @@ -0,0 +1 @@ +* Виправлено незначні регресії, які з'явилися у версії 2.13.1 diff --git a/fastlane/metadata/android/uk/changelogs/4210104.txt b/fastlane/metadata/android/uk/changelogs/4210104.txt new file mode 100644 index 000000000..102af6b1b --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4210104.txt @@ -0,0 +1 @@ +* Покращено інтеграцію аудіо- та відеовикликів в операційну систему diff --git a/fastlane/metadata/android/uk/changelogs/4210404.txt b/fastlane/metadata/android/uk/changelogs/4210404.txt new file mode 100644 index 000000000..05688d8e9 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4210404.txt @@ -0,0 +1,3 @@ +* Виправлення голосових та відеовикликів на Android 8 +* Виправлення проблем у новій інтеграції дзвінків +* Виправлення проблем зі стисненням відео diff --git a/fastlane/metadata/android/uk/changelogs/4210504.txt b/fastlane/metadata/android/uk/changelogs/4210504.txt new file mode 100644 index 000000000..653536f7a --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4210504.txt @@ -0,0 +1,2 @@ +* Відновлено доступ до пошуку каналів на Android 6+7 +* Покращено ведення журналу для невдалої інтеграції викликів diff --git a/fastlane/metadata/android/uk/changelogs/4210704.txt b/fastlane/metadata/android/uk/changelogs/4210704.txt new file mode 100644 index 000000000..c8eb8e946 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* Використання теми Material 3 +* Реорганізація налаштувань +* Синхронізація стану «Прочитано» між пристроями diff --git a/fastlane/metadata/android/uk/changelogs/4210804.txt b/fastlane/metadata/android/uk/changelogs/4210804.txt new file mode 100644 index 000000000..402845d29 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* Показувати стан повідомлень у вигляді значків +* Додано налаштування «Великий шрифт» для повідомлень diff --git a/fastlane/metadata/android/uk/changelogs/4210904.txt b/fastlane/metadata/android/uk/changelogs/4210904.txt new file mode 100644 index 000000000..45c3122aa --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* Виправлено реєстрацію Quicksy на Android 6/7 +* Відтворення мелодії вхідних викликів у каналі сповіщень diff --git a/fastlane/metadata/android/uk/changelogs/4211004.txt b/fastlane/metadata/android/uk/changelogs/4211004.txt new file mode 100644 index 000000000..36b7f674e --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* Виправлено інтеграцію викликів на деяких пристроях Android 14 +* Додано налаштування «Запрошення від незнайомців» diff --git a/fastlane/metadata/android/zh-CN/changelogs/42018.txt b/fastlane/metadata/android/zh-CN/changelogs/42018.txt index 974bd0292..1a3b73176 100644 --- a/fastlane/metadata/android/zh-CN/changelogs/42018.txt +++ b/fastlane/metadata/android/zh-CN/changelogs/42018.txt @@ -1,3 +1,3 @@ * 当远程视频与屏幕宽高比不匹配时显示黑条 * 提高搜索性能 -* 添加防止截图的设置 +* 添加防止截屏的设置 diff --git a/fastlane/metadata/android/zh-CN/changelogs/42041.txt b/fastlane/metadata/android/zh-CN/changelogs/42041.txt index b809c9854..78fa23928 100644 --- a/fastlane/metadata/android/zh-CN/changelogs/42041.txt +++ b/fastlane/metadata/android/zh-CN/changelogs/42041.txt @@ -1,5 +1,5 @@ * 实施可扩展 SASL Profile、Bind 2.0 和 Fast,以加快重新连接速度 -* 实现频道绑定 +* 实现通道绑定 * 增加从音频通话切换到视频通话的功能 * 增加删除自己头像的功能 * 增加未接来电通知功能 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4208804.txt b/fastlane/metadata/android/zh-CN/changelogs/4208804.txt new file mode 100644 index 000000000..b35be34f5 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4208804.txt @@ -0,0 +1,3 @@ +* 支持通过 WebRTC 数据通道进行 P2P 文件传输 +* 修复 ejabberd 上 Bind 2.0 的互操作性问题 +* 捆绑适用于 Android <= 7 的 Let’s Encrypt 根证书 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4209004.txt b/fastlane/metadata/android/zh-CN/changelogs/4209004.txt new file mode 100644 index 000000000..da11d968f --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* 修正了一些小错误 +* Quicksy 板载流程略有修改 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4209204.txt b/fastlane/metadata/android/zh-CN/changelogs/4209204.txt new file mode 100644 index 000000000..37c544ff2 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* 在 Play 商店版本(Quicksy 和 Conversations)上提供对“隐私政策”的更轻松访问 +* 移除 Play 商店版本的 Conversations 上的通讯录集成 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4209404.txt b/fastlane/metadata/android/zh-CN/changelogs/4209404.txt new file mode 100644 index 000000000..e89631ebe --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4209404.txt @@ -0,0 +1 @@ +* 修复 2.13.1 中出现的小问题 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4210104.txt b/fastlane/metadata/android/zh-CN/changelogs/4210104.txt new file mode 100644 index 000000000..784da44bb --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4210104.txt @@ -0,0 +1 @@ +* 改进音频/视频通话与操作系统的集成 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4210404.txt b/fastlane/metadata/android/zh-CN/changelogs/4210404.txt new file mode 100644 index 000000000..5fc634f33 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4210404.txt @@ -0,0 +1,3 @@ +* 修复安卓 8 上的音频/视频通话 +* 修复新呼叫集成中的竞态条件 +* 修复视频压缩问题 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4210504.txt b/fastlane/metadata/android/zh-CN/changelogs/4210504.txt new file mode 100644 index 000000000..9aeaeabca --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4210504.txt @@ -0,0 +1,2 @@ +* 恢复对 Android 6 和 Android 7 频道发现的访问 +* 改进失败呼叫集成的日志记录 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4210704.txt b/fastlane/metadata/android/zh-CN/changelogs/4210704.txt new file mode 100644 index 000000000..05dcc5934 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* 使用 Material 3 主题 +* 重组设置 +* 跨设备同步阅读状态 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4210804.txt b/fastlane/metadata/android/zh-CN/changelogs/4210804.txt new file mode 100644 index 000000000..9d21986d9 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* 以图标形式显示消息状态 +* 为消息气泡引入“大字体”设置 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4210904.txt b/fastlane/metadata/android/zh-CN/changelogs/4210904.txt new file mode 100644 index 000000000..f503dd304 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* 修复 Android 6/7 上的 Quicksy 注册问题 +* 在通知通道上播放来电铃声 diff --git a/fastlane/metadata/android/zh-CN/changelogs/4211004.txt b/fastlane/metadata/android/zh-CN/changelogs/4211004.txt new file mode 100644 index 000000000..53e308fcb --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* 修复某些 Android 14 设备上的呼叫集成 +* 添加了“来自陌生人的邀请”设置 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42015.txt b/fastlane/metadata/android/zh-TW/changelogs/42015.txt new file mode 100644 index 000000000..004c1806f --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42015.txt @@ -0,0 +1 @@ +* 在音頻和視頻方面略有改善 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42018.txt b/fastlane/metadata/android/zh-TW/changelogs/42018.txt new file mode 100644 index 000000000..64603c144 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42018.txt @@ -0,0 +1,3 @@ +* 當遠程視頻與屏幕寬高比不匹配時顯示黑條 +* 提高搜索性能 +* 添加防止截屏的設置 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42022.txt b/fastlane/metadata/android/zh-TW/changelogs/42022.txt new file mode 100644 index 000000000..f9269a5bd --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42022.txt @@ -0,0 +1,2 @@ +* 修復某些視頻無法壓縮的問題 +* 修復打開通知時罕見的崩潰問題 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42023.txt b/fastlane/metadata/android/zh-TW/changelogs/42023.txt new file mode 100644 index 000000000..b260e0cf9 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42023.txt @@ -0,0 +1,2 @@ +* 修復渲染某些引用時的崩潰問題 +* 修復歡迎屏幕崩潰問題 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42037.txt b/fastlane/metadata/android/zh-TW/changelogs/42037.txt new file mode 100644 index 000000000..13e3ef2aa --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42037.txt @@ -0,0 +1,11 @@ +版本 2.10.9 +* 進行音視頻通話時請求藍牙權限(如果您不使用藍牙耳機可以拒絕) +* 修復呼叫 Movim 時的錯誤 +* 修復群組聊天的顯示錯誤頭像的問題 +* 始終要求選擇退出電池優化 +* 在“x 個已連接賬號”通知上設置僅本地標誌 +* 修復與 Google 地圖分享位置插件的交互 +* 移除有關服務器費用的腳註 +* 將文件存儲在適合 Android 11 的位置 +* 網絡切換後嘗試重新連接通話 +* 在來電屏幕中顯示來電者 JID 和帳戶 JID diff --git a/fastlane/metadata/android/zh-TW/changelogs/42038.txt b/fastlane/metadata/android/zh-TW/changelogs/42038.txt new file mode 100644 index 000000000..ca9a447c3 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42038.txt @@ -0,0 +1,2 @@ +* 修正了一些小錯誤 +* 恢復通過 JMP 和其他服務呼叫的能力(Playstore 版本) diff --git a/fastlane/metadata/android/zh-TW/changelogs/42041.txt b/fastlane/metadata/android/zh-TW/changelogs/42041.txt new file mode 100644 index 000000000..f88ad5b51 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42041.txt @@ -0,0 +1,5 @@ +* 實現可擴展 SASL Profile、Bind 2.0 和 Fast,以加快重新連接速度 +* 實現通道綁定 +* 增加從音頻通話切換到視頻通話的功能 +* 增加刪除自己頭像的功能 +* 增加未接來電通知功能 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42042.txt b/fastlane/metadata/android/zh-TW/changelogs/42042.txt new file mode 100644 index 000000000..19e92ff86 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42042.txt @@ -0,0 +1,2 @@ +* 修復僅支持 sm:2 的服務器上的重發循環 +* 僅當對方支持視頻時才顯示“切換到視頻” diff --git a/fastlane/metadata/android/zh-TW/changelogs/42043.txt b/fastlane/metadata/android/zh-TW/changelogs/42043.txt new file mode 100644 index 000000000..29ae668a1 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42043.txt @@ -0,0 +1 @@ +* 修復了 P2P 文件傳輸中的缺陷 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42044.txt b/fastlane/metadata/android/zh-TW/changelogs/42044.txt new file mode 100644 index 000000000..4d7ef7f82 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42044.txt @@ -0,0 +1,3 @@ +* 修復使用 SASL2 時重新發送消息的問題 +* 修復部分設備之間的黑屏問題 +* 修復空密碼崩潰問題 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42046.txt b/fastlane/metadata/android/zh-TW/changelogs/42046.txt new file mode 100644 index 000000000..a302ae7ff --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42046.txt @@ -0,0 +1 @@ +* 整合 UnifiedPush 分發程序,以便將消息推送到其他支持 UnifiedPush 的應用程序,例如 Tusky 和 Fedilab diff --git a/fastlane/metadata/android/zh-TW/changelogs/42059.txt b/fastlane/metadata/android/zh-TW/changelogs/42059.txt new file mode 100644 index 000000000..32a329bd6 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42059.txt @@ -0,0 +1,2 @@ +* 將 Target SDK 再次提升至 33 +* 修復支持 SASL2 且不支持內聯流管理的服務器上的問題 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42060.txt b/fastlane/metadata/android/zh-TW/changelogs/42060.txt new file mode 100644 index 000000000..16b5141f9 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42060.txt @@ -0,0 +1 @@ +* 修復“q”被錯誤識別爲西裏爾字母的問題 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42061.txt b/fastlane/metadata/android/zh-TW/changelogs/42061.txt new file mode 100644 index 000000000..c35ffeb50 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42061.txt @@ -0,0 +1 @@ +* 從 Google Play 版本中移除頻道探索功能 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42062.txt b/fastlane/metadata/android/zh-TW/changelogs/42062.txt new file mode 100644 index 000000000..9c6025be5 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42062.txt @@ -0,0 +1 @@ +* 禁止從文件管理器打開備份文件(.ceb) diff --git a/fastlane/metadata/android/zh-TW/changelogs/42065.txt b/fastlane/metadata/android/zh-TW/changelogs/42065.txt new file mode 100644 index 000000000..f6346f62a --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42065.txt @@ -0,0 +1 @@ +* 引入新的備份文件格式 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42068.txt b/fastlane/metadata/android/zh-TW/changelogs/42068.txt new file mode 100644 index 000000000..0d2fecdb3 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42068.txt @@ -0,0 +1,2 @@ +* 支持對話個別通知設置 +* 在 Android 10 上使用 opus 發送語音消息 diff --git a/fastlane/metadata/android/zh-TW/changelogs/42072.txt b/fastlane/metadata/android/zh-TW/changelogs/42072.txt new file mode 100644 index 000000000..7f84a4d0a --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/42072.txt @@ -0,0 +1,3 @@ +* 將 libwebrtc 依賴項提升到 M117 並提升 libvpx +* 回到 AAC 語音消息 +* 支持應用程序個別語言設置 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4207704.txt b/fastlane/metadata/android/zh-TW/changelogs/4207704.txt new file mode 100644 index 000000000..b455c5e14 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4207704.txt @@ -0,0 +1,3 @@ +* 支持私有 DNS(DNS over TLS) +* 支持主題啟動器圖標 +* 修復在 Android 11+ 上分享文件時罕見的權限問題 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4208104.txt b/fastlane/metadata/android/zh-TW/changelogs/4208104.txt new file mode 100644 index 000000000..bfeabda61 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4208104.txt @@ -0,0 +1,4 @@ +* 更容易訪問「顯示二維碼」 +* 支持 PEP Native Bookmarks +* 添加對 SDP 請求/響應模型的支持(由 SIP 網關使用) +* 將目標 API 提升到 Android 14 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4208804.txt b/fastlane/metadata/android/zh-TW/changelogs/4208804.txt new file mode 100644 index 000000000..e79d703fc --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4208804.txt @@ -0,0 +1,3 @@ +* 支持通過 WebRTC 數據通道進行 P2P 文件傳輸 +* 修復 ejabberd 上 Bind 2.0 的互操作性問題 +* 捆綁適用於 Android <= 7 的 Let’s Encrypt 根證書 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4209004.txt b/fastlane/metadata/android/zh-TW/changelogs/4209004.txt new file mode 100644 index 000000000..04c07d646 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4209004.txt @@ -0,0 +1,2 @@ +* 修正了一些小錯誤 +* Quicksy 嚮導流程略有修改 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4209204.txt b/fastlane/metadata/android/zh-TW/changelogs/4209204.txt new file mode 100644 index 000000000..792ee73cb --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4209204.txt @@ -0,0 +1,2 @@ +* 在 Play 商店版本(Quicksy 和 Conversations)上提供對“隱私政策”的更輕鬆訪問 +* 移除 Play 商店版本的 Conversations 上的通訊錄整合功能 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4209404.txt b/fastlane/metadata/android/zh-TW/changelogs/4209404.txt new file mode 100644 index 000000000..22c860090 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4209404.txt @@ -0,0 +1 @@ +* 修復 2.13.1 中出現的小問題 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4210104.txt b/fastlane/metadata/android/zh-TW/changelogs/4210104.txt new file mode 100644 index 000000000..3e6d47b6d --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4210104.txt @@ -0,0 +1 @@ +* 改進音頻/視頻通話與操作系統的整合 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4210404.txt b/fastlane/metadata/android/zh-TW/changelogs/4210404.txt new file mode 100644 index 000000000..541a50230 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4210404.txt @@ -0,0 +1,3 @@ +* 修復安卓 8 上的音頻/視頻通話 +* 修復新通話整合中的競態條件 +* 修復視頻壓縮問題 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4210504.txt b/fastlane/metadata/android/zh-TW/changelogs/4210504.txt new file mode 100644 index 000000000..238c4b600 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4210504.txt @@ -0,0 +1,2 @@ +* 恢復對 Android 6 和 Android 7 頻道探索的訪問 +* 改善失敗通話整合的日誌記錄 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4210704.txt b/fastlane/metadata/android/zh-TW/changelogs/4210704.txt new file mode 100644 index 000000000..30d613e89 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4210704.txt @@ -0,0 +1,3 @@ +* 使用 Material 3 主題 +* 重新組織設置介面 +* 跨設備同步閱讀狀態 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4210804.txt b/fastlane/metadata/android/zh-TW/changelogs/4210804.txt new file mode 100644 index 000000000..9c727b051 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4210804.txt @@ -0,0 +1,2 @@ +* 以圖標形式顯示訊息狀態 +* 爲訊息氣泡引入「大字體」設置 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4210904.txt b/fastlane/metadata/android/zh-TW/changelogs/4210904.txt new file mode 100644 index 000000000..38b7f0ebc --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4210904.txt @@ -0,0 +1,2 @@ +* 修復 Android 6/7 上的 Quicksy 註冊問題 +* 在通知通道上播放來電鈴聲 diff --git a/fastlane/metadata/android/zh-TW/changelogs/4211004.txt b/fastlane/metadata/android/zh-TW/changelogs/4211004.txt new file mode 100644 index 000000000..5381a3950 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/4211004.txt @@ -0,0 +1,2 @@ +* 修復某些 Android 14 設備上的通話整合 +* 添加了「來自陌生人的邀請」設置 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 8c0fb64a8..e6441136f 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f3491507e..b82aa23a4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ -#Sun Dec 17 21:30:13 CET 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 91a7e269e..1aa94a426 100755 --- a/gradlew +++ b/gradlew @@ -1,79 +1,127 @@ -#!/usr/bin/env bash +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum -warn ( ) { +warn () { echo "$*" -} +} >&2 -die ( ) { +die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -82,83 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec99730b..7101f8e46 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,4 +1,20 @@ -@if "%DEBUG%" == "" @echo off +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -8,26 +24,30 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -35,54 +55,36 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/proguard-rules.pro b/proguard-rules.pro index 03044d525..389e75904 100644 --- a/proguard-rules.pro +++ b/proguard-rules.pro @@ -34,6 +34,7 @@ -dontwarn org.openjsse.javax.net.ssl.SSLParameters -dontwarn org.openjsse.javax.net.ssl.SSLSocket -dontwarn org.openjsse.net.ssl.OpenJSSE +-dontwarn org.jetbrains.annotations.** -keepclassmembers class eu.siacs.conversations.http.services.** { !transient ; diff --git a/screenshots.png b/screenshots.png deleted file mode 100644 index af411ba3e..000000000 Binary files a/screenshots.png and /dev/null differ diff --git a/screenshots.xcf b/screenshots.xcf deleted file mode 100644 index 45f79ca5a..000000000 Binary files a/screenshots.xcf and /dev/null differ diff --git a/src/conversations/AndroidManifest.xml b/src/conversations/AndroidManifest.xml index 87c925fe6..5b111101e 100644 --- a/src/conversations/AndroidManifest.xml +++ b/src/conversations/AndroidManifest.xml @@ -5,6 +5,7 @@ OMEMO ou OpenPGP +* Envoi et réception d'images +* Appels audio et vidéo chiffrés (DTLS-SRTP) +* Interface utilisateur intuitive qui suit les directives de conception d'Android +* Images / avatars pour vos contacts +* Synchronisation avec des clients de bureau +* Conférences (avec prise en charge des marque-pages) +* Intégration avec le carnet d'adresses +* Plusieurs comptes / boîte de réception unifiée +* Impact très faible sur l'autonomie de la batterie + +Conversations facilite la création de compte sur le serveur gratuit conversations.im. Cependant Conversations fonctionne également avec n'importe quel autre serveur XMPP. De nombreux serveurs XMPP sont gérés par des bénévoles et gratuits. + +Fonctionnalités de XMPP : + +Conversations fonctionne avec n'importe quel serveur XMPP. Cependant XMPP est un protocole extensible. Ces extensions sont aussi standardisées dans ce que l'on appelle les XEP. Conversations en prend en charge quelques-unes pour rendre l'expérience utilisateur meilleure dans l'ensemble. Il y a des chances que votre serveur XMPP actuel ne les prenne pas en charge. Ainsi, pour tirer le meilleur parti de Conversations, vous devriez envisager soit de passer à un serveur XMPP qui le fait, ou encore mieux, gérer votre propre serveur XMPP pour vous et vos amis. + +Ces XEP sont actuellement : + +* XEP-0065: SOCKS5 Bytestreams (ou mod_proxy65). Sera utilisé pour transférer des fichiers si les deux correspondants sont derrière un pare-feu (NAT). +* XEP-0163: Personal Eventing Protocol pour les avatars +* XEP-0191: Blocking Command vous permet de mettre des spammeurs sur liste noire ou bloquer des contacts sans les retirer de vos contacts. +* XEP-0198: Stream Management permet à XMPP de survivre à des petites pannes de réseau et aux changements de la connexion TCP sous-jacente. +* XEP-0280: Message Carbons qui synchronise automatiquement les messages que vous envoyez à votre client de bureau et vous permet ainsi de passer sans heurt de votre client mobile à votre client de bureau et inversement dans une conversation. +* XEP-0237: Roster Versioning principalement pour économiser de la bande passante sur les connexions mobiles de mauvaise qualité. +* XEP-0313: Message Archive Management synchronise l'historique des messages avec le serveur. Retrouvez des messages qui ont été envoyés pendant que Conversations était hors ligne. +* XEP-0352: Client State Indication fait savoir au serveur si Conversations est ou n'est pas en arrière-plan. Permet au serveur d'économiser de la bande passante en différant des paquets non importants. +* XEP-0363: HTTP File Upload vous permet de partager des fichiers dans les conférences et avec des contacts hors-ligne. Nécessite un composant supplémentaire sur votre serveur. diff --git a/src/conversations/fastlane/metadata/android/fr-FR/short_description.txt b/src/conversations/fastlane/metadata/android/fr-FR/short_description.txt new file mode 100644 index 000000000..b4ae66d63 --- /dev/null +++ b/src/conversations/fastlane/metadata/android/fr-FR/short_description.txt @@ -0,0 +1 @@ +Messagerie instantanée XMPP chiffrée, facile à utiliser avec votre appareil mobile diff --git a/src/conversations/fastlane/metadata/android/ja-JP/short_description.txt b/src/conversations/fastlane/metadata/android/ja-JP/short_description.txt new file mode 100644 index 000000000..ade292722 --- /dev/null +++ b/src/conversations/fastlane/metadata/android/ja-JP/short_description.txt @@ -0,0 +1 @@ +携帯端末で簡単に操作できるXMPP暗号化インスタント・メッセンジャー diff --git a/src/conversations/fastlane/metadata/android/ru-RU/full_description.txt b/src/conversations/fastlane/metadata/android/ru-RU/full_description.txt new file mode 100644 index 000000000..77c8edbb9 --- /dev/null +++ b/src/conversations/fastlane/metadata/android/ru-RU/full_description.txt @@ -0,0 +1,39 @@ +Простой в использовании, надежный, экономный для батареи. Со встроенной поддержкой изображений, групповых чатов и сквозным шифрованием. + +Принципы дизайна: + +* Быть максимально красивым и простым в использовании, не жертвуя при этом безопасностью и конфиденциальностью. +* Полагаться на существующие, хорошо зарекомендовавшие себя протоколы. +* Не требовать учетную запись Google или, в частности, Google Cloud Messaging (GCM). +* Требовать как можно меньше разрешений. + +Функции: + +* Сквозное шифрование с помощью OMEMO или OpenPGP. +* Отправка и получение изображений +* Зашифрованные аудио и видео звонки (DTLS-SRTP) +* Интуитивно понятный пользовательский интерфейс, соответствующий Рекомендациям по дизайну Android +* Картинки / аватары для ваших контактов +* Синхронизация с настольным клиентом +* Конференции (с поддержкой закладок) +* Интеграция с адресной книгой +* Несколько учетных записей / единый почтовый ящик +* Очень низкое влияние на время работы от батареи + +Conversations позволяет очень легко создать учетную запись на бесплатном сервере conversations.im. Однако Conversations также будет работать с любым другим сервером XMPP. Многие XMPP серверы управляются добровольцами и предоставляются бесплатно. + +Возможности XMPP: + +Conversations работает со всеми существующими XMPP-серверами. Однако XMPP - это расширяемый протокол. Эти расширения также стандартизированы в так называемых XEP-протоколах. Conversations поддерживает несколько из них, чтобы улучшить общее взаимодействие с пользователем. Есть вероятность, что ваш текущий XMPP-сервер не поддерживает какие либо расширения. Поэтому, чтобы получить максимальную отдачу от Conversations, вам следует либо перейти на XMPP-сервер который поддерживает эти расширения, либо, что еще лучше, запустить свой собственный XMPP-сервер для вас и ваших друзей. + +На данный момент эти XEP: + +* XEP-0065: SOCKS5 Bytestreams SOCKS5 (или mod_proxy65): будет использоваться для передачи файлов если обе стороны находятся за брандмауэром (или NAT). +* XEP-0163: Personal Eventing Protocol: для аватаров. +* XEP-0191: Blocking command: позволяет вносить спамеров в черный список или блокировать контакты, не удаляя их из своего списка. +* XEP-0198: Stream Management: позволяет XMPP справляться с небольшими перебоями в сети и изменениями нижележащего TCP-соединения. +* XEP-0280: Message Carbons: автоматически синхронизирует отправляемые вами сообщения с вашим клиентом на настольном компьютере и таким образом позволяет вам плавно переключаться с мобильного клиента на настольный клиент и обратно в рамках одного разговора. +* XEP-0237: Roster Versioning: в основном, для экономии полосы пропускания при плохом мобильном соединении. +* XEP-0313: Message Archive Management: синхронизирует историю сообщений с сервером. Отслеживание сообщений, отправленных во время разговоров в автономном режиме. +* XEP-0352: Client State Indication: позволяет серверу узнать ведутся ли разговоры в фоновом режиме. Позволяет серверу экономить пропускную способность, удерживая неважные пакеты. +* XEP-0363: HTTP File Upload: позволяет обмениваться файлами в конференциях и с контактами в автономном режиме. Требует дополнительный компонент на вашем сервере. diff --git a/src/conversations/fastlane/metadata/android/ru-RU/short_description.txt b/src/conversations/fastlane/metadata/android/ru-RU/short_description.txt new file mode 100644 index 000000000..059ec9eb7 --- /dev/null +++ b/src/conversations/fastlane/metadata/android/ru-RU/short_description.txt @@ -0,0 +1 @@ +Зашифрованный и простой в использовании XMPP мессенджер для вашего мобильного diff --git a/src/conversations/fastlane/metadata/android/tr-TR/full_description.txt b/src/conversations/fastlane/metadata/android/tr-TR/full_description.txt new file mode 100644 index 000000000..889d502e0 --- /dev/null +++ b/src/conversations/fastlane/metadata/android/tr-TR/full_description.txt @@ -0,0 +1,39 @@ +Kullanımı kolay, güvenilir, pil ömrü dostu. Resimler, gruplar ve uçtan uca şifreleme için yerleşik destek. + +Tasarım ilkeleri: + +* Gizlilik ve güvenlikten tasarruf etmeden olabildiğince iyi görünümlü ve kolay kullanımlı olmak +* Halihazırda var olan, köklü protokollere dayanmak +* Bir Google hesabına, özellikle Google Bulut Mesajlaşması (GCM)'e, gerek duymamak +* Olabildiğince az izine gerek duymak + +Özellikler: + +* OMEMO veya OpenPGP ile uçtan uca şifreleme +* Fotoğraf gönderme ve alma +* Şifrelenmiş görüntülü ve sesli aramalar (DTLS-SRTP) +* Android tasarım standartlarına uyan öğrenmesi kolay arayüz +* Kişileriniz için profil fotoğrafları / Avatarlar +* Masaüstü uygulamasıyla senkronizasyon +* Konferanslar (yer imi desteği ile) +* Kişiler listesiyle entegrasyon +* Birden fazla hesap / Birleşik gelen kutusu +* Pil ömrüne çok düşük etki + +Conversations, kolayca ve ücretsiz olarak conversations.im sunucusunda hesap oluşturmanıza olanak tanır. Conversations başka herhangi bir XMPP sunucusuyla da çalışır. Çoğu XMPP sunucusu gönüllüler tarafından işletilir ve ücretsizdir. + +XMPP Özellikleri: + +Conversations var olan bütün XMPP sunucularıyla kullanılabilir. Ancak XMPP, eklentiler ile genişletilebilen bir protokoldür. Bu eklentiler XEP'ler olarak standardize edilmiştir. Conversations kullanıcı deneyimini iyileştirmek için bu eklentilerden birkaçını destekler. Kullandığınız XMPP sunucusu bu eklentileri desteklemiyor olabilir. Bu yüzden Conversations'tan en iyi şekilde faydalanmak için bu eklentileri destekleyen bir sunucuya geçmeli veya, daha da iyisi, siz ve arkadaşlarınız için kendi XMPP sunucunuzu kurmalısınız. + +Şimdilik bu XEP'ler: + +* XEP-0065: SOCKS5 Bytestreams (mod_proxy65). İki taraf da bir güvenlik duvarı (NAT) arkasında ise dosya aktarımı için kullanılacaktır. +* XEP-0163: Avatarlar için Kişisel Olay Protokolü (Personal Eventing Protocol) +* XEP-0191: Engelleme komutu - Spam atanları ve kişilerinizi listenizden kaldırmadan engellemenizi sağlar. +* XEP-0198: Akış Kontrolü (Stream Management) - XMPP'yi ve altındaki TCP bağlantısını küçük çaplı bağlantı kopmalarına karşı korur. +* XEP-0280: Mesaj Karbonları - Mesajlarınızı masaüstü uygulamasıyla senkronize ederek cihazlarınız arasında kesintisiz geçiş yapmanızı sağlar. +* XEP-0237: Roster Versioning (Liste Sürüm Takibi) - Zayıf mobil ağlarda bant aralığından tasarruf etmek amacıyla. +* XEP-0313: Mesaj Arşivi Yönetimi - Çevrimdışı olduğunuzda bile mesaj almaya devam edebilmeniz için mesajlarınızı sunucuyla senkronize eder. +* XEP-0352: İstemci Durum Bildirimi - Conversations'un arkaplanda çalıştığını sunucuya bildir. Sunucunun önemsiz paketleri saklayarak veriden tasarruf etmesini sağlar. +* XEP-0363: HTTP Dosya Yükleme - Konferanslarla ve çevrimdışı kişilerle dosya paylaşabilmenizi sağlar. Sunucunuzda ek bileşen gerektirir. diff --git a/src/conversations/fastlane/metadata/android/tr-TR/short_description.txt b/src/conversations/fastlane/metadata/android/tr-TR/short_description.txt new file mode 100644 index 000000000..1eb74ef8f --- /dev/null +++ b/src/conversations/fastlane/metadata/android/tr-TR/short_description.txt @@ -0,0 +1 @@ +Mobil cihazınız için şifrelenmiş, kullanımı kolay bir XMPP mesajlaşma uygulaması diff --git a/src/conversations/fastlane/metadata/android/zh-CN/full_description.txt b/src/conversations/fastlane/metadata/android/zh-CN/full_description.txt index 085d21191..87d4ecea0 100644 --- a/src/conversations/fastlane/metadata/android/zh-CN/full_description.txt +++ b/src/conversations/fastlane/metadata/android/zh-CN/full_description.txt @@ -1,4 +1,4 @@ -易于使用、性能可靠、电池友好。内置支持图片、群聊和 e2e 加密功能。 +易用、可靠、省电。内置支持图片、群聊和端到端加密功能。 设计原则: @@ -9,7 +9,7 @@ 特点: -* 使用 OMEMOOpenPGP 进行端对端加密 +* 使用 OMEMOOpenPGP 进行端到端加密 * 发送和接收图片 * 加密音视频通话(DTLS-SRTP) * 直观的用户界面,遵循 Android 设计准则 @@ -24,11 +24,11 @@ Conversations 使在免费的 conversations.im 服务器上创建账号变得非 XMPP 功能: -Conversations 适用于所有 XMPP 服务器。然而,XMPP 是一种可扩展的协议。这些扩展在所谓的 XEP 中也是标准化的。Conversations 支持其中的一些扩展,以使整体用户体验更好。有一种可能是您当前的 XMPP 服务器不支持这些扩展。因此,要想充分使用 Conversations 的功能,您应该考虑切换到支持这些扩展的 XMPP 服务器,甚至有更好的方式,或者为您和您的朋友运行自己的 XMPP 服务器。 +Conversations 适用于所有 XMPP 服务器。然而,XMPP 是一种可扩展的协议。这些扩展在所谓的 XMPP 扩展协议中也是标准化的。Conversations 支持其中的一些扩展,以使整体用户体验更好。有一种可能是您当前的 XMPP 服务器不支持这些扩展。因此,要想充分使用 Conversations 的功能,您应该考虑切换到支持这些扩展的 XMPP 服务器,甚至有更好的方式,或者为您和您的朋友运行自己的 XMPP 服务器。 -到目前为止,这些 XEP 是: +到目前为止,这些 XMPP 扩展协议是: -* XEP-0065:SOCKS5 字节流(or mod_proxy65)。如果双方都在防火墙(NAT)后面,将用于传输文件。 +* XEP-0065:SOCKS5 字节流(或 mod_proxy65)。如果双方都在防火墙(NAT)后面,将用于传输文件。 * XEP-0163:个人事件协议(头像) * XEP-0191:屏蔽命令可让您将垃圾消息发送者列入黑名单或屏蔽的联系人中,而不会将其从花名册中删除。 * XEP-0198:流管理允许 XMPP 在小规模网络中断和底层 TCP 连接发生变化时继续运行。 diff --git a/src/conversations/fastlane/metadata/android/zh-CN/short_description.txt b/src/conversations/fastlane/metadata/android/zh-CN/short_description.txt index 913d97480..40275beb3 100644 --- a/src/conversations/fastlane/metadata/android/zh-CN/short_description.txt +++ b/src/conversations/fastlane/metadata/android/zh-CN/short_description.txt @@ -1 +1 @@ -加密、易于使用的 XMPP 即时通讯软件,适用于您的移动设备 +为您的移动设备提供加密、易用的 XMPP 即时通讯软件 diff --git a/src/conversations/java/eu/siacs/conversations/services/ImportBackupService.java b/src/conversations/java/eu/siacs/conversations/services/ImportBackupService.java index 377070941..17c76d167 100644 --- a/src/conversations/java/eu/siacs/conversations/services/ImportBackupService.java +++ b/src/conversations/java/eu/siacs/conversations/services/ImportBackupService.java @@ -37,6 +37,7 @@ import eu.siacs.conversations.persistance.FileBackend; import eu.siacs.conversations.ui.ManageAccountActivity; import eu.siacs.conversations.utils.BackupFileHeader; import eu.siacs.conversations.utils.SerialSingleThreadExecutor; +import eu.siacs.conversations.worker.ExportBackupWorker; import eu.siacs.conversations.xmpp.Jid; import org.bouncycastle.crypto.engines.AESEngine; @@ -58,6 +59,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -188,12 +190,7 @@ public class ImportBackupService extends Service { } } Collections.sort( - backupFiles, - (a, b) -> - a.header - .getJid() - .toString() - .compareTo(b.header.getJid().toString())); + backupFiles, Comparator.comparing(a -> a.header.getJid().toString())); onBackupFilesLoaded.onBackupFilesLoaded(backupFiles); }); } @@ -225,7 +222,7 @@ public class ImportBackupService extends Service { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getBaseContext(), "backup"); mBuilder.setContentTitle(getString(R.string.restoring_backup)) - .setSmallIcon(R.drawable.ic_unarchive_white_24dp) + .setSmallIcon(R.drawable.ic_unarchive_24dp) .setProgress(max, progress, max == 1 && progress == 0); return mBuilder.build(); } @@ -277,7 +274,7 @@ public class ImportBackupService extends Service { return false; } - final byte[] key = ExportBackupService.getKey(password, backupFileHeader.getSalt()); + final byte[] key = ExportBackupWorker.getKey(password, backupFileHeader.getSalt()); final AEADBlockCipher cipher = new GCMBlockCipher(new AESEngine()); cipher.init( @@ -415,7 +412,7 @@ public class ImportBackupService extends Service { ? PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT : PendingIntent.FLAG_UPDATE_CURRENT)) - .setSmallIcon(R.drawable.ic_unarchive_white_24dp); + .setSmallIcon(R.drawable.ic_unarchive_24dp); notificationManager.notify(NOTIFICATION_ID, mBuilder.build()); } diff --git a/src/conversations/java/eu/siacs/conversations/ui/EasyOnboardingInviteActivity.java b/src/conversations/java/eu/siacs/conversations/ui/EasyOnboardingInviteActivity.java index fea92401b..9228a5170 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/EasyOnboardingInviteActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/EasyOnboardingInviteActivity.java @@ -2,6 +2,7 @@ package eu.siacs.conversations.ui; import android.app.Activity; import android.content.Intent; +import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Point; import android.os.Bundle; @@ -11,8 +12,10 @@ import android.view.MenuItem; import android.view.View; import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.databinding.DataBindingUtil; +import com.google.android.material.color.MaterialColors; import com.google.common.base.Strings; import eu.siacs.conversations.Config; @@ -23,19 +26,20 @@ import eu.siacs.conversations.services.BarcodeProvider; import eu.siacs.conversations.utils.EasyOnboardingInvite; import eu.siacs.conversations.xmpp.Jid; -public class EasyOnboardingInviteActivity extends XmppActivity implements EasyOnboardingInvite.OnInviteRequested { +public class EasyOnboardingInviteActivity extends XmppActivity + implements EasyOnboardingInvite.OnInviteRequested { private ActivityEasyInviteBinding binding; private EasyOnboardingInvite easyOnboardingInvite; - @Override public void onCreate(final Bundle bundle) { super.onCreate(bundle); this.binding = DataBindingUtil.setContentView(this, R.layout.activity_easy_invite); setSupportActionBar(binding.toolbar); configureActionBar(getSupportActionBar(), true); + Activities.setStatusAndNavigationBarColors(this, binding.getRoot()); this.binding.shareButton.setOnClickListener(v -> share()); if (bundle != null && bundle.containsKey("invite")) { this.easyOnboardingInvite = bundle.getParcelable("invite"); @@ -65,11 +69,11 @@ public class EasyOnboardingInviteActivity extends XmppActivity implements EasyOn } private void share() { - final String shareText = getString( - R.string.easy_invite_share_text, - easyOnboardingInvite.getDomain(), - easyOnboardingInvite.getShareableLink() - ); + final String shareText = + getString( + R.string.easy_invite_share_text, + easyOnboardingInvite.getDomain(), + easyOnboardingInvite.getShareableLink()); final Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, shareText); @@ -95,16 +99,47 @@ public class EasyOnboardingInviteActivity extends XmppActivity implements EasyOn private void showInvite(final EasyOnboardingInvite invite) { this.binding.inProgress.setVisibility(View.GONE); this.binding.invite.setVisibility(View.VISIBLE); - this.binding.tapToShare.setText(getString(R.string.tap_share_button_send_invite, invite.getDomain())); + this.binding.tapToShare.setText( + getString(R.string.tap_share_button_send_invite, invite.getDomain())); final Point size = new Point(); getWindowManager().getDefaultDisplay().getSize(size); final int width = Math.min(size.x, size.y); - final Bitmap bitmap = BarcodeProvider.create2dBarcodeBitmap(invite.getShareableLink(), width); + final boolean nightMode = + (this.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) + == Configuration.UI_MODE_NIGHT_YES; + final int black; + final int white; + if (nightMode) { + black = + MaterialColors.getColor( + this, + com.google.android.material.R.attr.colorSurface, + "No surface color configured"); + white = + MaterialColors.getColor( + this, + com.google.android.material.R.attr.colorSurfaceInverse, + "No inverse surface color configured"); + } else { + black = + MaterialColors.getColor( + this, + com.google.android.material.R.attr.colorSurfaceInverse, + "No inverse surface color configured"); + white = + MaterialColors.getColor( + this, + com.google.android.material.R.attr.colorSurface, + "No surface color configured"); + } + final Bitmap bitmap = + BarcodeProvider.create2dBarcodeBitmap( + invite.getShareableLink(), width, black, white); binding.qrCode.setImageBitmap(bitmap); } @Override - public void onSaveInstanceState(Bundle bundle) { + public void onSaveInstanceState(@NonNull Bundle bundle) { super.onSaveInstanceState(bundle); if (easyOnboardingInvite != null) { bundle.putParcelable("invite", easyOnboardingInvite); @@ -112,7 +147,7 @@ public class EasyOnboardingInviteActivity extends XmppActivity implements EasyOn } @Override - void onBackendConnected() { + protected void onBackendConnected() { if (easyOnboardingInvite != null) { return; } @@ -141,11 +176,12 @@ public class EasyOnboardingInviteActivity extends XmppActivity implements EasyOn @Override public void inviteRequestFailed(final String message) { - runOnUiThread(() -> { - if (!Strings.isNullOrEmpty(message)) { - Toast.makeText(this, message, Toast.LENGTH_LONG).show(); - } - finish(); - }); + runOnUiThread( + () -> { + if (!Strings.isNullOrEmpty(message)) { + Toast.makeText(this, message, Toast.LENGTH_LONG).show(); + } + finish(); + }); } } diff --git a/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java b/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java index 342aa0144..21b8fb237 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/ImportBackupActivity.java @@ -1,11 +1,14 @@ package eu.siacs.conversations.ui; +import android.Manifest; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; +import android.content.pm.PackageManager; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.util.Log; @@ -14,14 +17,15 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; import com.google.android.material.snackbar.Snackbar; - -import java.io.IOException; -import java.util.List; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; @@ -29,11 +33,18 @@ import eu.siacs.conversations.databinding.ActivityImportBackupBinding; import eu.siacs.conversations.databinding.DialogEnterPasswordBinding; import eu.siacs.conversations.services.ImportBackupService; import eu.siacs.conversations.ui.adapter.BackupFileAdapter; -import eu.siacs.conversations.ui.util.SettingsUtils; import eu.siacs.conversations.utils.BackupFileHeader; -import eu.siacs.conversations.utils.ThemeHelper; -public class ImportBackupActivity extends ActionBarActivity implements ServiceConnection, ImportBackupService.OnBackupFilesLoaded, BackupFileAdapter.OnItemClickedListener, ImportBackupService.OnBackupProcessed { +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +public class ImportBackupActivity extends ActionBarActivity + implements ServiceConnection, + ImportBackupService.OnBackupFilesLoaded, + BackupFileAdapter.OnItemClickedListener, + ImportBackupService.OnBackupProcessed { private ActivityImportBackupBinding binding; @@ -41,8 +52,18 @@ public class ImportBackupActivity extends ActionBarActivity implements ServiceCo private ImportBackupService service; private boolean mLoadingState = false; - - private int mTheme; + private final ActivityResultLauncher requestPermissions = + registerForActivityResult( + new ActivityResultContracts.RequestMultiplePermissions(), + results -> { + if (results.containsValue(Boolean.TRUE)) { + final var service = this.service; + if (service == null) { + return; + } + service.loadBackupFiles(this); + } + }); @Override protected void onCreate(final Bundle savedInstanceState) { @@ -55,17 +76,13 @@ public class ImportBackupActivity extends ActionBarActivity implements ServiceCo super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_import_backup); setSupportActionBar(binding.toolbar); - setLoadingState(savedInstanceState != null && savedInstanceState.getBoolean("loading_state", false)); + setLoadingState( + savedInstanceState != null + && savedInstanceState.getBoolean("loading_state", false)); this.backupFileAdapter = new BackupFileAdapter(); this.binding.list.setAdapter(this.backupFileAdapter); this.backupFileAdapter.setOnItemClickedListener(this); } - - @Override - protected void onResume(){ - super.onResume(); - SettingsUtils.applyScreenshotPreventionSetting(this); - } @Override public boolean onCreateOptionsMenu(final Menu menu) { @@ -91,12 +108,51 @@ public class ImportBackupActivity extends ActionBarActivity implements ServiceCo bindService(new Intent(this, ImportBackupService.class), this, Context.BIND_AUTO_CREATE); } final Intent intent = getIntent(); - if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction()) && !this.mLoadingState) { + if (intent != null + && Intent.ACTION_VIEW.equals(intent.getAction()) + && !this.mLoadingState) { Uri uri = intent.getData(); if (uri != null) { openBackupFileFromUri(uri, true); + return; } } + final List desiredPermission; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + desiredPermission = + ImmutableList.of( + Manifest.permission.READ_MEDIA_IMAGES, + Manifest.permission.READ_MEDIA_VIDEO, + Manifest.permission.READ_MEDIA_AUDIO, + Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED); + } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) { + desiredPermission = + ImmutableList.of( + Manifest.permission.READ_MEDIA_IMAGES, + Manifest.permission.READ_MEDIA_VIDEO, + Manifest.permission.READ_MEDIA_AUDIO); + } else { + desiredPermission = ImmutableList.of(Manifest.permission.READ_EXTERNAL_STORAGE); + } + final Set declaredPermission = getDeclaredPermission(); + if (declaredPermission.containsAll(desiredPermission)) { + requestPermissions.launch(desiredPermission.toArray(new String[0])); + } else { + Log.d(Config.LOGTAG, "Manifest is lacking some desired permission. not requesting"); + } + } + + private Set getDeclaredPermission() { + final String[] permissions; + try { + permissions = + getPackageManager() + .getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS) + .requestedPermissions; + } catch (final PackageManager.NameNotFoundException e) { + return Collections.emptySet(); + } + return ImmutableSet.copyOf(permissions); } @Override @@ -110,7 +166,8 @@ public class ImportBackupActivity extends ActionBarActivity implements ServiceCo @Override public void onServiceConnected(ComponentName name, IBinder service) { - ImportBackupService.ImportBackupServiceBinder binder = (ImportBackupService.ImportBackupServiceBinder) service; + ImportBackupService.ImportBackupServiceBinder binder = + (ImportBackupService.ImportBackupServiceBinder) service; this.service = binder.getService(); this.service.addOnBackupProcessedListener(this); setLoadingState(this.service.getLoadingState()); @@ -134,55 +191,78 @@ public class ImportBackupActivity extends ActionBarActivity implements ServiceCo private void openBackupFileFromUri(final Uri uri, final boolean finishOnCancel) { try { - final ImportBackupService.BackupFile backupFile = ImportBackupService.BackupFile.read(this, uri); + final ImportBackupService.BackupFile backupFile = + ImportBackupService.BackupFile.read(this, uri); showEnterPasswordDialog(backupFile, finishOnCancel); } catch (final BackupFileHeader.OutdatedBackupFileVersion e) { - Snackbar.make(binding.coordinator, R.string.outdated_backup_file_format, Snackbar.LENGTH_LONG).show(); + Snackbar.make( + binding.coordinator, + R.string.outdated_backup_file_format, + Snackbar.LENGTH_LONG) + .show(); } catch (final IOException | IllegalArgumentException e) { Log.d(Config.LOGTAG, "unable to open backup file " + uri, e); - Snackbar.make(binding.coordinator, R.string.not_a_backup_file, Snackbar.LENGTH_LONG).show(); + Snackbar.make(binding.coordinator, R.string.not_a_backup_file, Snackbar.LENGTH_LONG) + .show(); } catch (final SecurityException e) { - Snackbar.make(binding.coordinator, R.string.sharing_application_not_grant_permission, Snackbar.LENGTH_LONG).show(); + Snackbar.make( + binding.coordinator, + R.string.sharing_application_not_grant_permission, + Snackbar.LENGTH_LONG) + .show(); } } - private void showEnterPasswordDialog(final ImportBackupService.BackupFile backupFile, final boolean finishOnCancel) { - final DialogEnterPasswordBinding enterPasswordBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.dialog_enter_password, null, false); + private void showEnterPasswordDialog( + final ImportBackupService.BackupFile backupFile, final boolean finishOnCancel) { + final DialogEnterPasswordBinding enterPasswordBinding = + DataBindingUtil.inflate( + LayoutInflater.from(this), R.layout.dialog_enter_password, null, false); Log.d(Config.LOGTAG, "attempting to import " + backupFile.getUri()); enterPasswordBinding.explain.setText(getString(R.string.enter_password_to_restore, backupFile.getHeader().getJid().toString())); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(enterPasswordBinding.getRoot()); builder.setTitle(R.string.enter_password); - builder.setNegativeButton(R.string.cancel, (dialog, which) -> { - if (finishOnCancel) { - finish(); - } - }); + builder.setNegativeButton( + R.string.cancel, + (dialog, which) -> { + if (finishOnCancel) { + finish(); + } + }); builder.setPositiveButton(R.string.restore, null); builder.setCancelable(false); final AlertDialog dialog = builder.create(); - dialog.setOnShowListener((d) -> { - dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(v -> { - final String password = enterPasswordBinding.accountPassword.getEditableText().toString(); - if (password.isEmpty()) { - enterPasswordBinding.accountPasswordLayout.setError(getString(R.string.please_enter_password)); - return; - } - final Uri uri = backupFile.getUri(); - Intent intent = new Intent(this, ImportBackupService.class); - intent.setAction(Intent.ACTION_SEND); - intent.putExtra("password", password); - if ("file".equals(uri.getScheme())) { - intent.putExtra("file", uri.getPath()); - } else { - intent.setData(uri); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - } - setLoadingState(true); - ContextCompat.startForegroundService(this, intent); - d.dismiss(); - }); - }); + dialog.setOnShowListener( + (d) -> { + dialog.getButton(DialogInterface.BUTTON_POSITIVE) + .setOnClickListener( + v -> { + final String password = + enterPasswordBinding + .accountPassword + .getEditableText() + .toString(); + if (password.isEmpty()) { + enterPasswordBinding.accountPasswordLayout.setError( + getString(R.string.please_enter_password)); + return; + } + final Uri uri = backupFile.getUri(); + Intent intent = new Intent(this, ImportBackupService.class); + intent.setAction(Intent.ACTION_SEND); + intent.putExtra("password", password); + if ("file".equals(uri.getScheme())) { + intent.putExtra("file", uri.getPath()); + } else { + intent.setData(uri); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + } + setLoadingState(true); + ContextCompat.startForegroundService(this, intent); + d.dismiss(); + }); + }); dialog.show(); } @@ -207,36 +287,55 @@ public class ImportBackupActivity extends ActionBarActivity implements ServiceCo @Override public void onAccountAlreadySetup() { - runOnUiThread(() -> { - setLoadingState(false); - Snackbar.make(binding.coordinator, R.string.account_already_setup, Snackbar.LENGTH_LONG).show(); - }); + runOnUiThread( + () -> { + setLoadingState(false); + Snackbar.make( + binding.coordinator, + R.string.account_already_setup, + Snackbar.LENGTH_LONG) + .show(); + }); } @Override public void onBackupRestored() { - runOnUiThread(() -> { - Intent intent = new Intent(this, ConversationActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - startActivity(intent); - finish(); - }); + runOnUiThread( + () -> { + Intent intent = new Intent(this, ConversationActivity.class); + intent.addFlags( + Intent.FLAG_ACTIVITY_CLEAR_TOP + | Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(intent); + finish(); + }); } @Override public void onBackupDecryptionFailed() { - runOnUiThread(() -> { - setLoadingState(false); - Snackbar.make(binding.coordinator, R.string.unable_to_decrypt_backup, Snackbar.LENGTH_LONG).show(); - }); + runOnUiThread( + () -> { + setLoadingState(false); + Snackbar.make( + binding.coordinator, + R.string.unable_to_decrypt_backup, + Snackbar.LENGTH_LONG) + .show(); + }); } @Override public void onBackupRestoreFailed() { - runOnUiThread(() -> { - setLoadingState(false); - Snackbar.make(binding.coordinator, R.string.unable_to_restore_backup, Snackbar.LENGTH_LONG).show(); - }); + runOnUiThread( + () -> { + setLoadingState(false); + Snackbar.make( + binding.coordinator, + R.string.unable_to_restore_backup, + Snackbar.LENGTH_LONG) + .show(); + }); } @Override @@ -253,6 +352,7 @@ public class ImportBackupActivity extends ActionBarActivity implements ServiceCo intent.setType("*/*"); intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false); intent.addCategory(Intent.CATEGORY_OPENABLE); - startActivityForResult(Intent.createChooser(intent, getString(R.string.open_backup)), 0xbac); + startActivityForResult( + Intent.createChooser(intent, getString(R.string.open_backup)), 0xbac); } } diff --git a/src/conversations/java/eu/siacs/conversations/ui/MagicCreateActivity.java b/src/conversations/java/eu/siacs/conversations/ui/MagicCreateActivity.java index 38761befd..b6d4d452e 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/MagicCreateActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/MagicCreateActivity.java @@ -10,45 +10,32 @@ import android.widget.Toast; import androidx.databinding.DataBindingUtil; -import java.security.SecureRandom; - import eu.siacs.conversations.Config; import eu.siacs.conversations.R; -import eu.siacs.conversations.databinding.MagicCreateBinding; +import eu.siacs.conversations.databinding.ActivityMagicCreateBinding; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.utils.CryptoHelper; import eu.siacs.conversations.utils.InstallReferrerUtils; import eu.siacs.conversations.xmpp.Jid; +import java.security.SecureRandom; + public class MagicCreateActivity extends XmppActivity implements TextWatcher { public static final String EXTRA_DOMAIN = "domain"; public static final String EXTRA_PRE_AUTH = "pre_auth"; public static final String EXTRA_USERNAME = "username"; - private MagicCreateBinding binding; + private ActivityMagicCreateBinding binding; private String domain; private String username; private String preAuth; @Override - protected void refreshUiReal() { - - } + protected void refreshUiReal() {} @Override - void onBackendConnected() { - - } - - @Override - public void onStart() { - super.onStart(); - final int theme = findTheme(); - if (this.mTheme != theme) { - recreate(); - } - } + protected void onBackendConnected() {} @Override protected void onCreate(final Bundle savedInstanceState) { @@ -60,7 +47,8 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } super.onCreate(savedInstanceState); - this.binding = DataBindingUtil.setContentView(this, R.layout.magic_create); + this.binding = DataBindingUtil.setContentView(this, R.layout.activity_magic_create); + Activities.setStatusAndNavigationBarColors(this, binding.getRoot()); setSupportActionBar(this.binding.toolbar); configureActionBar(getSupportActionBar(), this.domain == null); if (username != null && domain != null) { @@ -72,51 +60,64 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher { } else if (domain != null) { binding.instructions.setText(getString(R.string.magic_create_text_on_x, domain)); } - binding.createAccount.setOnClickListener(v -> { - try { - final String username = binding.username.getText().toString(); - final Jid jid; - final boolean fixedUsername; - if (this.domain != null && this.username != null) { - fixedUsername = true; - jid = Jid.ofLocalAndDomainEscaped(this.username, this.domain); - } else if (this.domain != null) { - fixedUsername = false; - jid = Jid.ofLocalAndDomainEscaped(username, this.domain); - } else { - fixedUsername = false; - jid = Jid.ofLocalAndDomainEscaped(username, Config.MAGIC_CREATE_DOMAIN); - } - if (!jid.getEscapedLocal().equals(jid.getLocal()) || (this.username == null && username.length() < 3)) { - binding.username.setError(getString(R.string.invalid_username)); - binding.username.requestFocus(); - } else { - binding.username.setError(null); - Account account = xmppConnectionService.findAccountByJid(jid); - if (account == null) { - account = new Account(jid, CryptoHelper.createPassword(new SecureRandom())); - account.setOption(Account.OPTION_REGISTER, true); - account.setOption(Account.OPTION_DISABLED, true); - account.setOption(Account.OPTION_MAGIC_CREATE, true); - account.setOption(Account.OPTION_FIXED_USERNAME, fixedUsername); - if (this.preAuth != null) { - account.setKey(Account.KEY_PRE_AUTH_REGISTRATION_TOKEN, this.preAuth); + binding.createAccount.setOnClickListener( + v -> { + try { + final String username = binding.username.getText().toString(); + final Jid jid; + final boolean fixedUsername; + if (this.domain != null && this.username != null) { + fixedUsername = true; + jid = Jid.ofLocalAndDomainEscaped(this.username, this.domain); + } else if (this.domain != null) { + fixedUsername = false; + jid = Jid.ofLocalAndDomainEscaped(username, this.domain); + } else { + fixedUsername = false; + jid = Jid.ofLocalAndDomainEscaped(username, Config.MAGIC_CREATE_DOMAIN); } - xmppConnectionService.createAccount(account); + if (!jid.getEscapedLocal().equals(jid.getLocal()) + || (this.username == null && username.length() < 3)) { + binding.usernameLayout.setError(getString(R.string.invalid_username)); + binding.username.requestFocus(); + } else { + binding.usernameLayout.setError(null); + Account account = xmppConnectionService.findAccountByJid(jid); + if (account == null) { + account = + new Account( + jid, + CryptoHelper.createPassword(new SecureRandom())); + account.setOption(Account.OPTION_REGISTER, true); + account.setOption(Account.OPTION_DISABLED, true); + account.setOption(Account.OPTION_MAGIC_CREATE, true); + account.setOption(Account.OPTION_FIXED_USERNAME, fixedUsername); + if (this.preAuth != null) { + account.setKey( + Account.KEY_PRE_AUTH_REGISTRATION_TOKEN, this.preAuth); + } + xmppConnectionService.createAccount(account); + } + Intent intent = + new Intent(MagicCreateActivity.this, EditAccountActivity.class); + intent.putExtra("jid", account.getJid().asBareJid().toString()); + intent.putExtra("init", true); + intent.setFlags( + Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_CLEAR_TASK); + Toast.makeText( + MagicCreateActivity.this, + R.string.secure_password_generated, + Toast.LENGTH_SHORT) + .show(); + StartConversationActivity.addInviteUri(intent, getIntent()); + startActivity(intent); + } + } catch (final IllegalArgumentException e) { + binding.usernameLayout.setError(getString(R.string.invalid_username)); + binding.username.requestFocus(); } - Intent intent = new Intent(MagicCreateActivity.this, EditAccountActivity.class); - intent.putExtra("jid", account.getJid().asBareJid().toString()); - intent.putExtra("init", true); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - Toast.makeText(MagicCreateActivity.this, R.string.secure_password_generated, Toast.LENGTH_SHORT).show(); - StartConversationActivity.addInviteUri(intent, getIntent()); - startActivity(intent); - } - } catch (IllegalArgumentException e) { - binding.username.setError(getString(R.string.invalid_username)); - binding.username.requestFocus(); - } - }); + }); binding.username.addTextChangedListener(this); } @@ -127,14 +128,10 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher { } @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - - } + public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(final Editable s) { @@ -153,8 +150,10 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher { } else { jid = Jid.ofLocalAndDomainEscaped(username, this.domain); } - binding.fullJid.setText(getString(R.string.your_full_jid_will_be, jid.toEscapedString())); - } catch (IllegalArgumentException e) { + binding.fullJid.setText( + getString(R.string.your_full_jid_will_be, jid.toEscapedString())); + binding.usernameLayout.setError(null); + } catch (final IllegalArgumentException e) { binding.fullJid.setVisibility(View.INVISIBLE); } } diff --git a/src/conversations/java/eu/siacs/conversations/ui/ManageAccountActivity.java b/src/conversations/java/eu/siacs/conversations/ui/ManageAccountActivity.java index 22e208b90..427a2527f 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/ManageAccountActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/ManageAccountActivity.java @@ -1,10 +1,14 @@ package eu.siacs.conversations.ui; +import static eu.siacs.conversations.utils.PermissionUtils.allGranted; +import static eu.siacs.conversations.utils.PermissionUtils.writeGranted; + import android.content.ActivityNotFoundException; import android.content.Intent; import android.os.Bundle; import android.security.KeyChain; import android.security.KeyChainAliasCallback; +import android.util.Log; import android.util.Pair; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; @@ -12,23 +16,17 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView.AdapterContextMenuInfo; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.ListView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AlertDialog; +import androidx.databinding.DataBindingUtil; -import org.openintents.openpgp.util.OpenPgpApi; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; +import com.google.common.base.Strings; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; +import eu.siacs.conversations.databinding.ActivityManageAccountsBinding; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.services.XmppConnectionService.OnAccountUpdate; @@ -37,10 +35,17 @@ import eu.siacs.conversations.ui.util.MenuDoubleTabUtil; import eu.siacs.conversations.xmpp.Jid; import eu.siacs.conversations.xmpp.XmppConnection; -import static eu.siacs.conversations.utils.PermissionUtils.allGranted; -import static eu.siacs.conversations.utils.PermissionUtils.writeGranted; +import org.openintents.openpgp.util.OpenPgpApi; -public class ManageAccountActivity extends XmppActivity implements OnAccountUpdate, KeyChainAliasCallback, XmppConnectionService.OnAccountCreated, AccountAdapter.OnTglAccountState { +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +public class ManageAccountActivity extends XmppActivity + implements OnAccountUpdate, + KeyChainAliasCallback, + XmppConnectionService.OnAccountCreated, + AccountAdapter.OnTglAccountState { private final String STATE_SELECTED_ACCOUNT = "selected_account"; @@ -50,7 +55,6 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda protected Jid selectedAccountJid = null; protected final List accountList = new ArrayList<>(); - protected ListView accountListView; protected AccountAdapter mAccountAdapter; protected AtomicBoolean mInvokedAddAccount = new AtomicBoolean(false); @@ -67,7 +71,7 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda accountList.clear(); accountList.addAll(xmppConnectionService.getAccounts()); } - ActionBar actionBar = getSupportActionBar(); + final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setHomeButtonEnabled(this.accountList.size() > 0); actionBar.setDisplayHomeAsUpEnabled(this.accountList.size() > 0); @@ -81,8 +85,10 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda super.onCreate(savedInstanceState); - setContentView(R.layout.activity_manage_accounts); - setSupportActionBar(findViewById(R.id.toolbar)); + ActivityManageAccountsBinding binding = + DataBindingUtil.setContentView(this, R.layout.activity_manage_accounts); + + setSupportActionBar(binding.toolbar); configureActionBar(getSupportActionBar()); if (savedInstanceState != null) { String jid = savedInstanceState.getString(STATE_SELECTED_ACCOUNT); @@ -95,11 +101,11 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda } } - accountListView = findViewById(R.id.account_list); this.mAccountAdapter = new AccountAdapter(this, accountList); - accountListView.setAdapter(this.mAccountAdapter); - accountListView.setOnItemClickListener((arg0, view, position, arg3) -> switchToAccount(accountList.get(position))); - registerForContextMenu(accountListView); + binding.accountList.setAdapter(this.mAccountAdapter); + binding.accountList.setOnItemClickListener( + (arg0, view, position, arg3) -> switchToAccount(accountList.get(position))); + registerForContextMenu(binding.accountList); } @Override @@ -112,9 +118,10 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda } @Override - public void onSaveInstanceState(final Bundle savedInstanceState) { + public void onSaveInstanceState(@NonNull final Bundle savedInstanceState) { if (selectedAccount != null) { - savedInstanceState.putString(STATE_SELECTED_ACCOUNT, selectedAccount.getJid().asBareJid().toEscapedString()); + savedInstanceState.putString( + STATE_SELECTED_ACCOUNT, selectedAccount.getJid().asBareJid().toEscapedString()); } super.onSaveInstanceState(savedInstanceState); } @@ -122,8 +129,7 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); - ManageAccountActivity.this.getMenuInflater().inflate( - R.menu.manageaccounts_context, menu); + ManageAccountActivity.this.getMenuInflater().inflate(R.menu.manageaccounts_context, menu); AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo; this.selectedAccount = accountList.get(acmi.position); @@ -148,15 +154,16 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda } @Override - void onBackendConnected() { + protected void onBackendConnected() { if (selectedAccountJid != null) { this.selectedAccount = xmppConnectionService.findAccountByJid(selectedAccountJid); } refreshUiReal(); if (this.mPostponedActivityResult != null) { - this.onActivityResult(mPostponedActivityResult.first, RESULT_OK, mPostponedActivityResult.second); + this.onActivityResult( + mPostponedActivityResult.first, RESULT_OK, mPostponedActivityResult.second); } - if (Config.X509_VERIFICATION && this.accountList.size() == 0) { + if (Config.X509_VERIFICATION && this.accountList.isEmpty()) { if (mInvokedAddAccount.compareAndSet(false, true)) { addAccountFromKey(); } @@ -246,9 +253,9 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda return super.onOptionsItemSelected(item); } - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + public void onRequestPermissionsResult( + int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (grantResults.length > 0) { if (allGranted(grantResults)) { @@ -271,13 +278,14 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda @Override public boolean onNavigateUp() { if (xmppConnectionService.getConversations().size() == 0) { - Intent contactsIntent = new Intent(this, - StartConversationActivity.class); + Intent contactsIntent = new Intent(this, StartConversationActivity.class); contactsIntent.setFlags( // if activity exists in stack, pop the stack and go back to it - Intent.FLAG_ACTIVITY_CLEAR_TOP | + Intent.FLAG_ACTIVITY_CLEAR_TOP + | // otherwise, make a new task for it - Intent.FLAG_ACTIVITY_NEW_TASK | + Intent.FLAG_ACTIVITY_NEW_TASK + | // don't use the new activity animation; finish // animation runs instead Intent.FLAG_ACTIVITY_NO_ANIMATION); @@ -299,16 +307,17 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda } private void addAccountFromKey() { + Log.d(Config.LOGTAG, "add account from key"); try { KeyChain.choosePrivateKeyAlias(this, this, null, null, null, -1, null); - } catch (ActivityNotFoundException e) { - Toast.makeText(this, R.string.device_does_not_support_certificates, Toast.LENGTH_LONG).show(); + } catch (final ActivityNotFoundException e) { + Toast.makeText(this, R.string.device_does_not_support_certificates, Toast.LENGTH_LONG) + .show(); } } private void publishAvatar(Account account) { - Intent intent = new Intent(getApplicationContext(), - PublishProfilePictureActivity.class); + Intent intent = new Intent(getApplicationContext(), PublishProfilePictureActivity.class); intent.putExtra(EXTRA_ACCOUNT, account.getJid().asBareJid().toEscapedString()); startActivity(intent); } @@ -403,7 +412,8 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda if (xmppConnectionServiceBound) { if (requestCode == REQUEST_CHOOSE_PGP_ID) { if (data.getExtras().containsKey(OpenPgpApi.EXTRA_SIGN_KEY_ID)) { - selectedAccount.setPgpSignId(data.getExtras().getLong(OpenPgpApi.EXTRA_SIGN_KEY_ID)); + selectedAccount.setPgpSignId( + data.getExtras().getLong(OpenPgpApi.EXTRA_SIGN_KEY_ID)); announcePgp(selectedAccount, null, null, onOpenPGPKeyPublished); } else { choosePgpSignId(selectedAccount); @@ -420,9 +430,17 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda @Override public void alias(final String alias) { - if (alias != null) { - xmppConnectionService.createAccountFromKey(alias, this); + if (Strings.isNullOrEmpty(alias)) { + runOnUiThread( + () -> + Toast.makeText( + this, + R.string.no_certificate_selected, + Toast.LENGTH_LONG) + .show()); + return; } + xmppConnectionService.createAccountFromKey(alias, this); } @Override @@ -435,6 +453,7 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda @Override public void informUser(final int r) { - runOnUiThread(() -> Toast.makeText(ManageAccountActivity.this, r, Toast.LENGTH_LONG).show()); + runOnUiThread( + () -> Toast.makeText(ManageAccountActivity.this, r, Toast.LENGTH_LONG).show()); } } diff --git a/src/conversations/java/eu/siacs/conversations/ui/PickServerActivity.java b/src/conversations/java/eu/siacs/conversations/ui/PickServerActivity.java index 06320d33d..f96a17ffc 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/PickServerActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/PickServerActivity.java @@ -22,19 +22,10 @@ public class PickServerActivity extends XmppActivity { } @Override - void onBackendConnected() { + protected void onBackendConnected() { } - @Override - public void onStart() { - super.onStart(); - final int theme = findTheme(); - if (this.mTheme != theme) { - recreate(); - } - } - @Override public boolean onOptionsItemSelected(final MenuItem item) { @@ -53,7 +44,8 @@ public class PickServerActivity extends XmppActivity { } @Override - public void onNewIntent(Intent intent) { + public void onNewIntent(final Intent intent) { + super.onNewIntent(intent); if (intent != null) { setIntent(intent); } @@ -66,6 +58,7 @@ public class PickServerActivity extends XmppActivity { } super.onCreate(savedInstanceState); ActivityPickServerBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_pick_server); + Activities.setStatusAndNavigationBarColors(this, binding.getRoot()); setSupportActionBar(binding.toolbar); configureActionBar(getSupportActionBar()); binding.useCim.setOnClickListener(v -> { @@ -81,7 +74,7 @@ public class PickServerActivity extends XmppActivity { if (accounts.size() == 1) { intent.putExtra("jid", accounts.get(0).getJid().asBareJid().toString()); intent.putExtra("init", true); - } else if (accounts.size() >= 1) { + } else if (!accounts.isEmpty()) { intent = new Intent(this, ManageAccountActivity.class); } addInviteUri(intent); diff --git a/src/conversations/java/eu/siacs/conversations/ui/ShareViaAccountActivity.java b/src/conversations/java/eu/siacs/conversations/ui/ShareViaAccountActivity.java index 8b0f22eb8..73609635c 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/ShareViaAccountActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/ShareViaAccountActivity.java @@ -57,16 +57,7 @@ public class ShareViaAccountActivity extends XmppActivity { } @Override - protected void onStart() { - super.onStart(); - final int theme = findTheme(); - if (this.mTheme != theme) { - recreate(); - } - } - - @Override - void onBackendConnected() { + protected void onBackendConnected() { final int numAccounts = xmppConnectionService.getAccounts().size(); if (numAccounts == 1) { diff --git a/src/conversations/java/eu/siacs/conversations/ui/WelcomeActivity.java b/src/conversations/java/eu/siacs/conversations/ui/WelcomeActivity.java index d61c64a9c..b2a40976c 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/WelcomeActivity.java +++ b/src/conversations/java/eu/siacs/conversations/ui/WelcomeActivity.java @@ -34,7 +34,10 @@ import eu.siacs.conversations.xmpp.Jid; import static eu.siacs.conversations.utils.PermissionUtils.allGranted; import static eu.siacs.conversations.utils.PermissionUtils.writeGranted; -public class WelcomeActivity extends XmppActivity implements XmppConnectionService.OnAccountCreated, KeyChainAliasCallback { +import com.google.common.base.Strings; + +public class WelcomeActivity extends XmppActivity + implements XmppConnectionService.OnAccountCreated, KeyChainAliasCallback { private static final int REQUEST_IMPORT_BACKUP = 0x63fb; @@ -66,7 +69,8 @@ public class WelcomeActivity extends XmppActivity implements XmppConnectionServi final Intent intent; if (xmppUri.isAction(XmppUri.ACTION_REGISTER)) { intent = SignupUtils.getTokenRegistrationIntent(this, jid, preAuth); - } else if (xmppUri.isAction(XmppUri.ACTION_ROSTER) && "y".equals(xmppUri.getParameter(XmppUri.PARAMETER_IBR))) { + } else if (xmppUri.isAction(XmppUri.ACTION_ROSTER) + && "y".equals(xmppUri.getParameter(XmppUri.PARAMETER_IBR))) { intent = SignupUtils.getTokenRegistrationIntent(this, jid.getDomain(), preAuth); intent.putExtra(StartConversationActivity.EXTRA_INVITE_URI, xmppUri.toString()); } else { @@ -81,22 +85,14 @@ public class WelcomeActivity extends XmppActivity implements XmppConnectionServi } @Override - protected void refreshUiReal() { - - } + protected void refreshUiReal() {} @Override - void onBackendConnected() { - - } + protected void onBackendConnected() {} @Override public void onStart() { super.onStart(); - final int theme = findTheme(); - if (this.mTheme != theme) { - recreate(); - } new InstallReferrerUtils(this); } @@ -119,42 +115,44 @@ public class WelcomeActivity extends XmppActivity implements XmppConnectionServi setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } super.onCreate(savedInstanceState); - ActivityWelcomeBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_welcome); + ActivityWelcomeBinding binding = + DataBindingUtil.setContentView(this, R.layout.activity_welcome); + Activities.setStatusAndNavigationBarColors(this, binding.getRoot()); setSupportActionBar(binding.toolbar); configureActionBar(getSupportActionBar(), false); - binding.registerNewAccount.setOnClickListener(v -> { - final Intent intent = new Intent(this, PickServerActivity.class); - addInviteUri(intent); - startActivity(intent); - }); - binding.useExisting.setOnClickListener(v -> { - final List accounts = xmppConnectionService.getAccounts(); - Intent intent = new Intent(WelcomeActivity.this, EditAccountActivity.class); - intent.putExtra(EditAccountActivity.EXTRA_FORCE_REGISTER, false); - if (accounts.size() == 1) { - intent.putExtra("jid", accounts.get(0).getJid().asBareJid().toString()); - intent.putExtra("init", true); - } else if (accounts.size() >= 1) { - intent = new Intent(WelcomeActivity.this, ManageAccountActivity.class); - } - addInviteUri(intent); - startActivity(intent); - }); - + setTitle(null); + binding.registerNewAccount.setOnClickListener( + v -> { + final Intent intent = new Intent(this, PickServerActivity.class); + addInviteUri(intent); + startActivity(intent); + }); + binding.useExisting.setOnClickListener( + v -> { + final List accounts = xmppConnectionService.getAccounts(); + Intent intent = new Intent(this, EditAccountActivity.class); + intent.putExtra(EditAccountActivity.EXTRA_FORCE_REGISTER, false); + if (accounts.size() == 1) { + intent.putExtra("jid", accounts.get(0).getJid().asBareJid().toString()); + intent.putExtra("init", true); + } else if (!accounts.isEmpty()) { + intent = new Intent(this, ManageAccountActivity.class); + } + addInviteUri(intent); + startActivity(intent); + }); } @Override - public boolean onCreateOptionsMenu(Menu menu) { + public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.welcome_menu, menu); final MenuItem scan = menu.findItem(R.id.action_scan_qr_code); scan.setVisible(Compatibility.hasFeatureCamera(this)); return super.onCreateOptionsMenu(menu); } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { + public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case R.id.action_import_backup: if (hasStoragePermission(REQUEST_IMPORT_BACKUP)) { @@ -174,16 +172,25 @@ public class WelcomeActivity extends XmppActivity implements XmppConnectionServi private void addAccountFromKey() { try { KeyChain.choosePrivateKeyAlias(this, this, null, null, null, -1, null); - } catch (ActivityNotFoundException e) { - Toast.makeText(this, R.string.device_does_not_support_certificates, Toast.LENGTH_LONG).show(); + } catch (final ActivityNotFoundException e) { + Toast.makeText(this, R.string.device_does_not_support_certificates, Toast.LENGTH_LONG) + .show(); } } @Override public void alias(final String alias) { - if (alias != null) { - xmppConnectionService.createAccountFromKey(alias, this); + if (Strings.isNullOrEmpty(alias)) { + runOnUiThread( + () -> + Toast.makeText( + this, + R.string.no_certificate_selected, + Toast.LENGTH_LONG) + .show()); + return; } + xmppConnectionService.createAccountFromKey(alias, this); } @Override @@ -201,7 +208,8 @@ public class WelcomeActivity extends XmppActivity implements XmppConnectionServi } @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + public void onRequestPermissionsResult( + int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); UriHandlerActivity.onRequestPermissionResult(this, requestCode, grantResults); if (grantResults.length > 0) { @@ -211,7 +219,8 @@ public class WelcomeActivity extends XmppActivity implements XmppConnectionServi startActivity(new Intent(this, ImportBackupActivity.class)); break; } - } else if (Arrays.asList(permissions).contains(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + } else if (Arrays.asList(permissions) + .contains(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show(); } } @@ -232,5 +241,4 @@ public class WelcomeActivity extends XmppActivity implements XmppConnectionServi to.putExtra(StartConversationActivity.EXTRA_INVITE_URI, this.inviteUri.toString()); } } - } diff --git a/src/conversations/java/eu/siacs/conversations/ui/adapter/BackupFileAdapter.java b/src/conversations/java/eu/siacs/conversations/ui/adapter/BackupFileAdapter.java index 9857dcd8a..9f32352ee 100644 --- a/src/conversations/java/eu/siacs/conversations/ui/adapter/BackupFileAdapter.java +++ b/src/conversations/java/eu/siacs/conversations/ui/adapter/BackupFileAdapter.java @@ -22,7 +22,7 @@ import java.util.List; import java.util.concurrent.RejectedExecutionException; import eu.siacs.conversations.R; -import eu.siacs.conversations.databinding.AccountRowBinding; +import eu.siacs.conversations.databinding.ItemAccountBinding; import eu.siacs.conversations.services.AvatarService; import eu.siacs.conversations.services.ImportBackupService; import eu.siacs.conversations.utils.BackupFileHeader; @@ -39,7 +39,7 @@ public class BackupFileAdapter extends RecyclerView.Adapter(imageView); DisplayMetrics metrics = imageView.getContext().getResources().getDisplayMetrics(); this.size = ((int) (48 * metrics.density)); @@ -146,8 +146,7 @@ public class BackupFileAdapter extends RecyclerView.Adapter + + + + diff --git a/src/conversations/res/layout/activity_easy_invite.xml b/src/conversations/res/layout/activity_easy_invite.xml index 8bbf11c03..6f1c8fc57 100644 --- a/src/conversations/res/layout/activity_easy_invite.xml +++ b/src/conversations/res/layout/activity_easy_invite.xml @@ -1,17 +1,23 @@ - + - + + + + + + android:textAppearance="?textAppearanceBodyMedium" /> + android:textAppearance="?textAppearanceBodyMedium" />