diff --git a/.gitlab-ci-files/job-android.yml b/.gitlab-ci-files/job-android.yml index f1ede3e0f..946909ca4 100644 --- a/.gitlab-ci-files/job-android.yml +++ b/.gitlab-ci-files/job-android.yml @@ -24,13 +24,12 @@ job-android: artifacts: paths: - - ./app/build/outputs/apk/debug/linphone-android-debug-*.apk - ./app/build/outputs/apk/release/linphone-android-release-*.apk when: always - expire_in: 1 week + expire_in: 1 day .scheduled-job-android: extends: job-android only: - - schedules \ No newline at end of file + - schedules diff --git a/CHANGELOG.md b/CHANGELOG.md index 4469ba211..4307142ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ Group changes to describe their impact on the project, as follows: Security to invite users to upgrade in case of vulnerabilities. -## [6.0.0] - 2024-??-?? +## [6.0.0] - 2025-03-11 6.0.0 release is a complete rework of Linphone Android, with a fully redesigned UI, so it is impossible to list everything here. @@ -20,30 +20,38 @@ Group changes to describe their impact on the project, as follows: - Asymmetrical video : you no longer need to send your own camera feed to receive the one from the remote end of the call, and vice versa. - Improved multi account: you'll only see history, conversations, meetings etc... related to currently selected account, and you can switch the default account in two clicks. - Call transfer: Blind & Attended call transfer have been merged into one: during a call, if you initiate a transfer action, either pick another call to do the attended transfer or select a contact from the list (you can input a SIP URI not already in the suggestions list) to start a blind transfer. +- User can only send up to 12 files in a single chat message. +- IMDNs are now only sent to the message sender, preventing huge traffic in large groups, and thus the delivery status icon for received messages is now hidden in groups (as it was in 1-1 conversations). - Settings: a lot of them are gone, the one that are still there have been reworked to increase user friendliness. - Default screen (between contacts, call history, conversations & meetings list) will change depending on where you were when the app was paused or killed, and you will return to that last visited screen on the next startup. - Gradle files have been migrated from Groovy to Kotlin DSL, and dependencies are now in a separated file (libs.versions.toml). - Account creation no longer allows you to use your phone number as username, but it is still required to provide it to receive activation code by SMS. - Minimum supported Android OS version is now 9 (API level 28). - Telecom Manager support is now based on androidx.core.core-telecom package. +- Some settings have changed name and/or section in linphonerc file. ### Added -- Contacts trust: contacts for which all devices have been validated through a ZRTP call with SAS exchange are now highlighted with a blue circle (and with a red one in case of mistrust). That trust is now handled at contact level (instead of conversation level in previous versions). +- Contacts trust: contacts for which all devices have been validated through a ZRTP call with SAS exchange are now highlighted with a blue circle (and with a red one in case of mistrust). That trust is now handled at contact level (instead of conversation level in previous versions). - Media & documents exchanged in a conversation can be easily found through a dedicated screen. - A brand new chat message search feature has been added to conversations. - You can now react to a chat message using any emoji. - If next message is also a voice recording, playback will automatically start after the currently playing one ends. - Chat while in call: a shortcut to a conversation screen with the remote. - Chat while in a conference: if the conference has a text stream enabled, you can chat with the other participants of the conference while it lasts. At the end, you'll find the messages history in the call history (and not in the list of conversations). +- Auto export of media to native gallery even when auto download is enabled (but still not if VFS is enabled nor for ephemeral messages). +- Save / export document & media from ephemeral messages will be disabled, and secure policy that prevents screenshots will be enforced in file viewer even if the setting is disabled. +- Notification showing upload/download of files shared through chat will let user know the progress and keep the app alive during that process. - Screen sharing in conference: only desktop app starting with 6.0 version is able to start it, but on mobiles you'll be able to see it. - You can choose whatever ringtone you'd like for incoming calls (in Android notification channel settings). - Security focus: security & trust is more visible than ever, and unsecure conversations & calls are even more visible than before. - CardDAV: you can configure as many CardDAV servers you want to synchronize you contacts in Linphone (in addition or in replacement of native addressbook import). - OpenID: when used with a SSO compliant SIP server (such as Flexisip), we support single-sign-on login. - MWI support: display and allow to call your voicemail when you have new messages (if supported by your VoIP provider and properly configured in your account params). +- CCMP support: if you configure a CCMP server URL in your accounts params, it will be used when scheduling meetings & to fetch list of meetings you've organized/been invited to. - Devices list: check on which device your sip.linphone.org account is connected and the last connection date & time (like on subscribe.linphone.org). - Protobuf dependency to allow logging native crashes stack traces at next app startup. - Android 15 startup listener, allowing us to log type of start (cold, warm, etc...) and some other useful info. +- Dialer & in-call numpad show letters under the digit. ### Removed - Dialer: the previous home screen (dialer) has been removed, you'll find it as an input option in the new start call screen. diff --git a/README.md b/README.md index 99fc7f372..748fd7d8c 100644 --- a/README.md +++ b/README.md @@ -134,6 +134,8 @@ adb logcat -d | ndk-stack -sym ./libs-debug/`adb shell getprop ro.product.cpu.ab ``` Warning: This command won't print anything until you reproduce the crash! +Starting [NDK r29](https://github.com/android/ndk/wiki/Changelog-r29) you will be able to directly use the ```libs-debug.zip``` file in ```ndk-stack -sym``` argument. + ## Create an APK with a different package name Simply edit the ```app/build.gradle.kts``` file and change the value of the ```packageName``` variable. diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 14af2afc8..76a87511e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -103,7 +103,7 @@ android { versionCode = 600000 // 6.00.000 versionName = "6.0.0" - manifestPlaceholders["appAuthRedirectScheme"] = "org.linphone" + manifestPlaceholders["appAuthRedirectScheme"] = packageName ndk { //noinspection ChromeOsAbiSupport @@ -155,6 +155,7 @@ android { } resValue("string", "linphone_app_version", gitVersion.trim()) resValue("string", "linphone_app_branch", gitBranch.toString().trim()) + resValue("string", "linphone_openid_callback_scheme", packageName) if (crashlyticsAvailable) { val path = File("$sdkPath/libs-debug/").toString() @@ -177,6 +178,7 @@ android { resValue("string", "file_provider", "$packageName.fileprovider") resValue("string", "linphone_app_version", gitVersion.trim()) resValue("string", "linphone_app_branch", gitBranch.toString().trim()) + resValue("string", "linphone_openid_callback_scheme", packageName) if (crashlyticsAvailable) { val path = File("$sdkPath/libs-debug/").toString() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b8543bc29..04a51f47f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,6 +60,7 @@ + @@ -122,18 +123,6 @@ - - - - + + + + Adresse SIP ID du téléphone - utilisateur@domaine Nom d\'affichage Domaine Nom d\'utilisateur @@ -14,7 +13,7 @@ Mot de passe Numéro de téléphone ou - suivant + Suivant Commencer Aujourd\'hui Hier @@ -90,6 +89,7 @@ Volume faible : vous risquez de ne pas entendre Configuration appliquée Erreur lors du chargement ou de l\'application de la configuration + Erreur lors de la création du lecteur média Conditions de service & politique de confidentialité @@ -97,16 +97,18 @@ politique de confidentialité En continuant, vous acceptez nos %1$s et %2$s. Confirmez votre numéro de téléphone - Êtes-vous sûr de vouloir utiliser ce numéro de téléphone ? + Êtes-vous sûr que le %s est votre numéro de téléphone ? Connexion Scanner un QR code Ce QR code est invalide ! J\'ai un compte SIP tiers + Compte SIP tiers Single sign on Adresse SIP invalide L\'adresse SIP ne contient pas de nom d\'utilisateur ! Pas encore de compte ? Créer un compte + Confirmez votre numéro On vous a envoyé un code de vérification par SMS au numéro %1$s.\n\nMerci de le saisir ci-dessous : Numéro incorrect ? Créer @@ -116,7 +118,6 @@ Certaines fonctionnalités telles que les conversations de groupe, les vidéo-conférences, etc… nécessitent un compte &appName;.\n\nCes fonctionnalités seront masquées si vous utilisez un compte SIP tiers.\n\nPour les activer dans un projet commercial, merci de nous contacter. Je préfère créer un compte J\'ai compris - Nom d\'utilisateur ou identité SIP* Notifications push indisponible, la création de compte est donc désactivée. Notification push non reçue, merci de réessayer plus tard Un erreur inattendue est survenue, merci de réessayer plus tard @@ -180,6 +181,7 @@ Chiffrer tous les fichiers Attention, vous ne pourrez pas revenir en arrière ! Échec à l\'activation du module d\'encryption + Module d\'encryption activé Confirmer l\'activation du chiffrement Une fois la fonctionnalité activée, toutes les données de l\'application seront chiffrées et accessibles uniquement via celle-ci.\n\nCe changement est irréversible. Empêcher l\'interface d\'être enregistrée @@ -199,6 +201,7 @@ Changer de sonnerie Conversations Télécharger automatiquement les fichiers + Rendre visible dans la galerie les médias téléchargés Marquer la conversation comme lue lorsqu\'une notification de message est supprimée Contacts Ajouter un serveur LDAP @@ -261,6 +264,7 @@ URL du serveur de partage de fichier Chiffrement du média Rendre le chiffrement du média obligatoire + Créer en mode chiffré de bout en bout les réunions et les appels de groupe Accepter l\'early media Autoriser l\'early media pour les appels sortants URL de configuration distante @@ -572,13 +576,17 @@ Envoyer l\'invitation par message aux participants Rejoindre la réunion Organisateur - Supprimer la réunion Ajouter dans le calendrier Réunion supprimée + Réunion introuvable ! Description Modifier la réunion Annuler la réunion? Voulez-vous annuler la réunion et envoyer une notification aux participants ? + Annuler la réunion + Supprimer la réunion ? + Voulez-vous supprimer la réunion ? + Supprimer la réunion Réunion créée Réunion mise à jour Réunion annulée @@ -599,7 +607,8 @@ Appel sortant Appel entrant Appel vidéo entrant - Appel terminé + Vous avez terminé l\'appel + Votre correspondant a terminé l\'appel Appel entrant pour %s Appel vidéo entrant pour %s Transférer %s à… @@ -633,6 +642,7 @@ Appel chiffré de point à point Appel non chiffré Liste des appels + L\'appel est enregistré %s enregistre l\'appel %s appels %s appels en pause diff --git a/app/src/main/res/values-sw600dp/dimen.xml b/app/src/main/res/values-sw600dp/dimen.xml new file mode 100644 index 000000000..78da8b09d --- /dev/null +++ b/app/src/main/res/values-sw600dp/dimen.xml @@ -0,0 +1,5 @@ + + + 150dp + 600dp + \ No newline at end of file diff --git a/app/src/main/res/values/dimen.xml b/app/src/main/res/values/dimen.xml index 12b62c7c6..f46aad053 100644 --- a/app/src/main/res/values/dimen.xml +++ b/app/src/main/res/values/dimen.xml @@ -14,6 +14,7 @@ 24dp 48dp 100dp + 30dp 30dp 45dp @@ -99,8 +100,6 @@ 425dp 340dp - 200dp - 15dp 30dp 15dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f23abecea..cfc3398f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,7 +44,6 @@ SIP address Device ID - username@domain Display name Domain Username @@ -52,7 +51,7 @@ Password Phone number or - next + Next Start Today Yesterday @@ -129,6 +128,7 @@ Media volume is low, you may not hear anything! Configuration successfully applied Error while trying to download and apply remote configuration + Error trying to create media player General terms & privacy policy @@ -141,11 +141,13 @@ Scan QR code Invalid QR code! Use a third party SIP account + Third party SIP account Single sign on SIP address is invalid! SIP address doesn\'t contains a username! No account yet? Register + Confirm your phone number We have sent a verification code on your phone number %1$s.\n\nPlease enter the verification code below: Wrong number? Create @@ -155,7 +157,6 @@ Some features require a &appName; account, such as group messaging, video conferences…\n\nThese features are hidden when you register with a third party SIP account.\n\nTo enable it in a commercial project, please contact us. I prefer to create an account I understand - Username or SIP identity* Push notifications not available, account creation disabled Push notification with auth token not received in 5 seconds, please try again later Unexpected error occurred, please try again later @@ -219,6 +220,7 @@ Encrypt everything Warning: once enabled it can\'t be disabled! Failed to enable encryption module! + Encryption module enabled Do you really want to encrypt everything? Be careful, it can\'t be undone! Prevent interface from being recorded @@ -238,6 +240,7 @@ Change ringtone Conversations Auto-download files + Make downloaded media public Mark conversation as read when dismissing message notification Contacts Add LDAP server @@ -300,6 +303,7 @@ File sharing server URL Media encryption Media encryption mandatory + Create end-to-end encrypted meetings & group calls Accept early media Allow outgoing early media Remote provisioning URL @@ -612,13 +616,17 @@ Send invitation to participants Join the meeting now Organizer - Delete meeting Create calendar event Meeting has been deleted + Meeting cannot be found! Description Edit meeting Cancel the meeting? Do you want to cancel the meeting and send a notification to all participants? + Cancel meeting + Delete the meeting? + Do you want to delete the meeting? + Delete meeting Meeting has been created Meeting has been updated Meeting has been cancelled @@ -639,7 +647,8 @@ Outgoing call Incoming call Incoming video call - Call ended + You have ended the call + Correspondent has ended the call Incoming call for %s Incoming video call for %s Transfer %s to… @@ -673,6 +682,7 @@ Point-to-point encrypted by SRTP Call is not encrypted Calls list + Call is being recorded %s is recording %s calls %s paused calls @@ -911,6 +921,7 @@ Go to conversation Copy text to clipboard Voice message are available + Long press to dial voicemail diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index adab3cc5b..5b54e32e7 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -149,15 +149,7 @@ ?attr/color_danger_500 8dp - +