v0.5.1 googl

EBO <eric@ebii.fr> committé le 2026-09-26 20:58

71c7b0794f97f0d3ab10698698652f2aec6ab003

1 parent(s)

33 fichiers modifiés +399 -11
A CONFIDENTIALITE.md
+178 -0
@@ -0,0 +1,178 @@
1 +# Politique de confidentialité — PicLead
2 +
3 +**Éditeur** : Eric Bouhana Ingénierie Informatique (ebii)
4 +**Contact** : contact@ebii.fr
5 +**Application** : PicLead pour Android (`fr.ebii.piclead`)
6 +**Dernière mise à jour** : 26 septembre 2026
7 +
8 +*English version below — [Privacy policy](#privacy-policy--piclead).*
9 +
10 +## En résumé
11 +
12 +PicLead photographie une carte de visite, en lit le texte **sur l'appareil** et en tire une fiche
13 +contact enregistrée dans un carnet local. Sans serveur configuré, **aucune donnée ne quitte votre
14 +appareil**. Aucun service Google, aucune analyse à distance, aucune télémétrie, aucune publicité,
15 +aucun profilage, aucune vente de données.
16 +
17 +## Données traitées sur l'appareil
18 +
19 +Tout est stocké dans une base SQLite privée à l'application, dans son espace de stockage interne :
20 +
21 +- fiches contact (nom, société, fonction, téléphones, e-mails, adresses, notes) ;
22 +- images des cartes scannées et photos de contact ;
23 +- notes vocales et leur transcription ;
24 +- projets, tâches et comptes-rendus.
25 +
26 +La reconnaissance de texte (Tesseract) et la transcription des notes vocales (Vosk) s'exécutent
27 +**localement**. Aucun enregistrement audio et aucune image ne sont envoyés à un service de
28 +reconnaissance.
29 +
30 +Ces données disparaissent de l'appareil quand vous supprimez les éléments concernés dans
31 +l'application, ou quand vous la désinstallez.
32 +
33 +## Accès au réseau
34 +
35 +PicLead n'utilise le réseau que dans deux cas, jamais en arrière-plan à votre insu :
36 +
37 +1. **Téléchargement des modèles de reconnaissance**, que vous déclenchez vous-même depuis
38 + *Paramètres → Modèles hors-ligne*. La requête HTTPS va au dépôt `tessdata_fast` (ou au miroir que
39 + vous avez configuré) et ne transporte aucune de vos données. L'intégrité de chaque fichier est
40 + vérifiée par une empreinte SHA-256 fixée dans l'application.
41 +2. **Synchronisation avec un serveur PicLead**, uniquement si vous en configurez un.
42 +
43 +## Synchronisation (optionnelle)
44 +
45 +Si — et seulement si — vous renseignez l'adresse d'un serveur PicLead et vos identifiants,
46 +l'application transmet à **ce serveur** :
47 +
48 +| Données | Détail |
49 +|---|---|
50 +| Fiches contact | nom, société, fonction, coordonnées, notes |
51 +| Images | photo de la carte scannée, photo de contact |
52 +| Agenda | rendez-vous et réservations des calendriers PicLead, si vous activez le pont Agenda |
53 +| Activité | projets, tâches, comptes-rendus |
54 +
55 +Points importants :
56 +
57 +- **Le serveur est choisi et hébergé par vous** (ou par votre organisation), pas par l'éditeur.
58 + L'éditeur n'exploite aucun serveur central et ne reçoit aucune de vos données.
59 +- Les échanges se font en **HTTPS**. Le HTTP en clair n'est possible qu'en cochant explicitement
60 + *Autoriser HTTP (clair)* dans les paramètres, pour un usage en réseau interne ou en démonstration.
61 +- Les identifiants de connexion sont conservés chiffrés sur l'appareil.
62 +- La conservation et la suppression des données côté serveur relèvent de l'instance que vous
63 + utilisez ; adressez-vous à son administrateur.
64 +
65 +## Agenda de l'appareil (optionnel)
66 +
67 +Si vous activez le pont Agenda, l'application crée des calendriers dédiés (« Mes RDV », « Salles »,
68 +« Matériel », « Véhicules ») et y écrit les rendez-vous et réservations venant du serveur. Elle lit
69 +ces calendriers pour les afficher. Retirer un calendrier depuis les paramètres supprime ses
70 +événements de l'appareil. L'application n'exporte jamais le contenu de vos autres calendriers.
71 +
72 +## Permissions demandées
73 +
74 +| Permission | Finalité |
75 +|---|---|
76 +| `CAMERA` | photographier la carte de visite à scanner |
77 +| `RECORD_AUDIO` | enregistrer une note vocale, transcrite sur l'appareil |
78 +| `INTERNET` | télécharger les modèles (à votre demande) et synchroniser avec votre serveur |
79 +| `READ_CALENDAR` / `WRITE_CALENDAR` | pont Agenda, activé depuis les paramètres |
80 +
81 +## Vos droits
82 +
83 +Vous restez maître de vos données : elles sont sur votre appareil et, le cas échéant, sur votre
84 +serveur. Vous pouvez les consulter, les corriger, les exporter au format vCard et les supprimer
85 +depuis l'application. Pour toute question relative au RGPD, écrivez à **contact@ebii.fr**.
86 +
87 +## Code source
88 +
89 +PicLead est un logiciel libre sous licence GNU AGPL v3. Le code est public :
90 +<https://gitrust.ebii.fr/eric/piclead-client>.
91 +
92 +---
93 +
94 +# Privacy policy — PicLead
95 +
96 +**Publisher**: Eric Bouhana Ingénierie Informatique (ebii)
97 +**Contact**: contact@ebii.fr
98 +**App**: PicLead for Android (`fr.ebii.piclead`)
99 +**Last updated**: 26 September 2026
100 +
101 +## In short
102 +
103 +PicLead photographs a business card, reads its text **on the device** and turns it into a contact
104 +record stored in a local address book. With no server configured, **no data leaves your device**. No
105 +Google services, no remote processing, no telemetry, no advertising, no profiling, no data selling.
106 +
107 +## Data processed on the device
108 +
109 +Everything is stored in an app-private SQLite database, inside the app's internal storage:
110 +
111 +- contact records (name, company, job title, phone numbers, e-mails, addresses, notes);
112 +- scanned card images and contact photos;
113 +- voice notes and their transcription;
114 +- projects, tasks and reports.
115 +
116 +Text recognition (Tesseract) and voice note transcription (Vosk) run **locally**. No audio
117 +recording and no image is sent to any recognition service.
118 +
119 +This data is removed from the device when you delete the corresponding items in the app, or when you
120 +uninstall it.
121 +
122 +## Network access
123 +
124 +PicLead uses the network in two cases only, never silently in the background:
125 +
126 +1. **Downloading recognition models**, which you trigger yourself from *Settings → Offline models*.
127 + The HTTPS request goes to the `tessdata_fast` repository (or the mirror you configured) and
128 + carries none of your data. Each file's integrity is checked against a SHA-256 digest pinned in
129 + the app.
130 +2. **Syncing with a PicLead server**, only if you configure one.
131 +
132 +## Sync (optional)
133 +
134 +If — and only if — you enter a PicLead server address and your credentials, the app sends to **that
135 +server**:
136 +
137 +| Data | Detail |
138 +|---|---|
139 +| Contact records | name, company, job title, contact details, notes |
140 +| Images | scanned card photo, contact photo |
141 +| Calendar | appointments and bookings of the PicLead calendars, if you enable the calendar bridge |
142 +| Activity | projects, tasks, reports |
143 +
144 +Key points:
145 +
146 +- **The server is chosen and hosted by you** (or your organisation), not by the publisher. The
147 + publisher operates no central server and receives none of your data.
148 +- Traffic uses **HTTPS**. Cleartext HTTP is only possible if you explicitly tick *Allow HTTP
149 + (cleartext)* in the settings, for internal-network or demonstration use.
150 +- Login credentials are stored encrypted on the device.
151 +- Server-side retention and deletion are handled by the instance you use; contact its administrator.
152 +
153 +## Device calendar (optional)
154 +
155 +If you enable the calendar bridge, the app creates dedicated calendars ("My appointments", "Rooms",
156 +"Equipment", "Vehicles") and writes the appointments and bookings coming from the server into them.
157 +It reads those calendars to display them. Removing a calendar from the settings deletes its events
158 +from the device. The app never exports the contents of your other calendars.
159 +
160 +## Permissions requested
161 +
162 +| Permission | Purpose |
163 +|---|---|
164 +| `CAMERA` | photograph the business card being scanned |
165 +| `RECORD_AUDIO` | record a voice note, transcribed on the device |
166 +| `INTERNET` | download models (at your request) and sync with your server |
167 +| `READ_CALENDAR` / `WRITE_CALENDAR` | calendar bridge, enabled from the settings |
168 +
169 +## Your rights
170 +
171 +You stay in control: your data sits on your device and, where applicable, on your own server. You
172 +can view, correct, export (vCard) and delete it from the app. For any GDPR-related question, write
173 +to **contact@ebii.fr**.
174 +
175 +## Source code
176 +
177 +PicLead is free software under the GNU AGPL v3 licence. The source is public:
178 +<https://gitrust.ebii.fr/eric/piclead-client>.
M README.md
+8 -3
@@ -208,6 +208,8 @@ Vérification optionnelle de la signature avant envoi :
208 208
209 209 Distribution : envoyez le fichier `PicLead-<version>-direct-release.apk` tel quel (mail, lien) ; à l'installation, Android demandera d'autoriser l'installation depuis une source inconnue.
210 210
211 +> Publication en magasin : `docs/publication-fdroid.md` (F-Droid) et `docs/publication-google-play.md` (Google Play, App Bundle signé avec la même clé d’upload). La politique de confidentialité déclarée à Play est `CONFIDENTIALITE.md`, versionnée à la racine de ce dossier.
212 +
211 213 ## Build
212 214
213 215 Quatre variantes : deux saveurs (`fdroid`, `direct`) × deux types (`debug`, `release`).
@@ -261,7 +263,7 @@ Prérequis : JDK 21, Android SDK (API 35).
261 263
262 264 UI N&B éditoriale (`design.md`) : coins carrés, hairlines, polices TTF embarquées (Playfair Display, Lora, Manrope — sous licence **OFL**). Icône : `icon.png`.
263 265
264 -> Le texte de la licence OFL est présent en local dans `docs/licenses/OFL-fonts.txt` mais **n’est pas versionné** (cf. ci-dessous). L’OFL impose que sa copie accompagne les polices redistribuées : à corriger avant toute publication du dépôt ou de l’APK.
266 +> L’OFL impose que sa copie accompagne les polices redistribuées : le texte et les trois notices de copyright sont embarqués dans l’app (`app/src/main/res/raw/licence_polices_ofl.txt`) et accessibles par **À propos → Texte de la licence des polices**. C’est la source unique ; `docs/licenses/OFL-fonts.txt` n’est qu’une archive locale.
265 267
266 268 ## Documentation locale (non versionnée)
267 269
@@ -272,15 +274,18 @@ Présent en local seulement, côté client :
272 274 | Fichier | Contenu |
273 275 |---|---|
274 276 | `docs/publication-fdroid.md` | Procédure de publication F-Droid (recette YAML, checklist) |
277 +| `docs/publication-google-play.md` | Procédure de publication Google Play (signature, AAB, fiche, Sécurité des données) |
275 278 | `docs/superpowers/specs/2026-07-22-sync-agenda-rdv-ressources-v2-design.md` | Conception de la sync agenda / ressources v2 |
276 279 | `docs/audit-securite-2026-07-27.md` | Audit de sécurité |
277 -| `docs/licenses/OFL-fonts.txt` | Licence des polices embarquées |
280 +| `docs/licenses/OFL-fonts.txt` | Archive locale de la licence des polices (la version embarquée est dans `res/raw`) |
281 +| `docs/bandeau-play.sh` | Génère le bandeau 1024 × 500 de Play depuis l’icône et la charte |
282 +| `docs/captures-fastlane.sh` | Captures fastlane (téléphone et tablettes) sur une copie isolée de l’app |
278 283
279 284 Les plans du monorepo (`docs/plans/` à la racine, dont les chantiers **modèles OCR téléchargeables** et **planification des tâches**) sont dans le même cas.
280 285
281 286 Seuls les six plans historiques de `Client/docs/plans/` restent suivis : ils avaient été committés avant l’ajout des règles d’exclusion.
282 287
283 -> Deux points à trancher, hors périmètre de ce README : l’exclusion de `docs/plans` contredit son propre commentaire dans le `.gitignore` (« les plans versionnés restent dans `docs/plans/` ») et la consigne du `CLAUDE.md` (« les plans vivent dans le dépôt, avec le code »). Et la licence OFL devrait être redistribuée avec les polices.
288 +> Un point à trancher, hors périmètre de ce README : l’exclusion de `docs/plans` contredit son propre commentaire dans le `.gitignore` (« les plans versionnés restent dans `docs/plans/` ») et la consigne du `CLAUDE.md` (« les plans vivent dans le dépôt, avec le code »).
284 289
285 290 ## Origine du code
286 291
M android/app/build.gradle.kts
+4 -4
@@ -42,13 +42,13 @@ val keystoreProperties = Properties().apply {
42 42
43 43 android {
44 44 namespace = "fr.ebii.card2vcf"
45 - compileSdk = 35
45 + compileSdk = 36
46 46 defaultConfig {
47 47 applicationId = "fr.ebii.piclead"
48 48 minSdk = 30
49 - targetSdk = 35
50 - versionCode = 4
51 - versionName = "0.5.0"
49 + targetSdk = 36
50 + versionCode = 5
51 + versionName = "0.5.1"
52 52 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
53 53 ndk {
54 54 abiFilters += listOf("arm64-v8a")
M android/app/src/main/java/fr/ebii/card2vcf/MainActivity.kt
+5 -1
@@ -7,6 +7,7 @@ import androidx.activity.enableEdgeToEdge
7 7 import androidx.compose.foundation.background
8 8 import androidx.compose.foundation.layout.Box
9 9 import androidx.compose.foundation.layout.fillMaxSize
10 +import androidx.compose.foundation.layout.imePadding
10 11 import androidx.compose.foundation.layout.systemBarsPadding
11 12 import androidx.compose.ui.Modifier
12 13 import fr.ebii.card2vcf.contact.ContactInsertIntent
@@ -41,7 +42,10 @@ class MainActivity : ComponentActivity() {
41 42 Modifier
42 43 .fillMaxSize()
43 44 .background(Canvas)
44 - .systemBarsPadding(),
45 + .systemBarsPadding()
46 + // Sans cela, le clavier fait translater la fenêtre et le contenu
47 + // passe sous la barre d'état (edge-to-edge imposé depuis Android 16).
48 + .imePadding(),
45 49 ) {
46 50 Card2vcfNavHost(
47 51 repository = repository,
M android/app/src/main/java/fr/ebii/card2vcf/ui/apropos/AProposScreen.kt
+23 -0
@@ -34,6 +34,7 @@ import fr.ebii.card2vcf.ui.theme.TexteFaible
34 34 @Composable
35 35 fun AProposScreen(
36 36 onBack: () -> Unit,
37 + onLicencePolices: () -> Unit,
37 38 modifier: Modifier = Modifier,
38 39 ) {
39 40 val context = LocalContext.current
@@ -99,6 +100,20 @@ fun AProposScreen(
99 100 )
100 101 }
101 102
103 + val urlConfidentialite = stringResource(R.string.apropos_lien_confidentialite_url)
104 + TextButton(
105 + onClick = {
106 + context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(urlConfidentialite)))
107 + },
108 + contentPadding = PaddingValues(0.dp),
109 + ) {
110 + Text(
111 + stringResource(R.string.apropos_lien_confidentialite_label),
112 + color = Link,
113 + style = MaterialTheme.typography.bodyMedium,
114 + )
115 + }
116 +
102 117 val email = stringResource(R.string.apropos_contact_email)
103 118 TextButton(
104 119 onClick = {
@@ -138,6 +153,14 @@ fun AProposScreen(
138 153 Text(stringResource(R.string.apropos_composant_tesseract), style = MaterialTheme.typography.bodySmall, color = TexteFaible)
139 154 Text(stringResource(R.string.apropos_composant_vosk), style = MaterialTheme.typography.bodySmall, color = TexteFaible)
140 155 Text(stringResource(R.string.apropos_composant_markwon), style = MaterialTheme.typography.bodySmall, color = TexteFaible)
156 + Text(stringResource(R.string.apropos_composant_polices), style = MaterialTheme.typography.bodySmall, color = TexteFaible)
157 + TextButton(onClick = onLicencePolices, contentPadding = PaddingValues(0.dp)) {
158 + Text(
159 + stringResource(R.string.apropos_licence_polices_label),
160 + color = Link,
161 + style = MaterialTheme.typography.bodyMedium,
162 + )
163 + }
141 164 }
142 165 }
143 166 }
A android/app/src/main/java/fr/ebii/card2vcf/ui/apropos/LicencePolicesScreen.kt
+57 -0
@@ -0,0 +1,57 @@
1 +package fr.ebii.card2vcf.ui.apropos
2 +
3 +import androidx.compose.foundation.background
4 +import androidx.compose.foundation.layout.Box
5 +import androidx.compose.foundation.layout.Column
6 +import androidx.compose.foundation.layout.fillMaxSize
7 +import androidx.compose.foundation.layout.fillMaxWidth
8 +import androidx.compose.foundation.layout.padding
9 +import androidx.compose.foundation.rememberScrollState
10 +import androidx.compose.foundation.verticalScroll
11 +import androidx.compose.material3.MaterialTheme
12 +import androidx.compose.material3.Text
13 +import androidx.compose.runtime.Composable
14 +import androidx.compose.runtime.remember
15 +import androidx.compose.ui.Modifier
16 +import androidx.compose.ui.platform.LocalContext
17 +import androidx.compose.ui.res.stringResource
18 +import androidx.compose.ui.unit.dp
19 +import fr.ebii.card2vcf.R
20 +import fr.ebii.card2vcf.ui.composants.AppTopBar
21 +import fr.ebii.card2vcf.ui.theme.Fond
22 +import fr.ebii.card2vcf.ui.theme.Ink
23 +import fr.ebii.card2vcf.ui.theme.Surface
24 +
25 +/** Licence OFL des polices embarquées, redistribuée avec l'application (exigence de l'OFL 1.1). */
26 +@Composable
27 +fun LicencePolicesScreen(
28 + onBack: () -> Unit,
29 + modifier: Modifier = Modifier,
30 +) {
31 + val context = LocalContext.current
32 + val texte = remember {
33 + context.resources.openRawResource(R.raw.licence_polices_ofl)
34 + .bufferedReader()
35 + .use { it.readText() }
36 + }
37 +
38 + Column(modifier.fillMaxSize().background(Fond)) {
39 + Box(Modifier.fillMaxWidth().background(Surface)) {
40 + AppTopBar(
41 + titre = stringResource(R.string.licence_polices_titre),
42 + onBack = onBack,
43 + modifier = Modifier.padding(horizontal = 8.dp),
44 + )
45 + }
46 +
47 + Text(
48 + texte,
49 + style = MaterialTheme.typography.bodySmall,
50 + color = Ink,
51 + modifier = Modifier
52 + .fillMaxSize()
53 + .verticalScroll(rememberScrollState())
54 + .padding(horizontal = 24.dp, vertical = 20.dp),
55 + )
56 + }
57 +}
M android/app/src/main/java/fr/ebii/card2vcf/ui/nav/Card2vcfNavHost.kt
+9 -1
@@ -52,6 +52,7 @@ import fr.ebii.card2vcf.ui.projets.ProjetDetailViewModel
52 52 import fr.ebii.card2vcf.ui.projets.ProjetsListScreen
53 53 import fr.ebii.card2vcf.ui.projets.ProjetsViewModel
54 54 import fr.ebii.card2vcf.ui.apropos.AProposScreen
55 +import fr.ebii.card2vcf.ui.apropos.LicencePolicesScreen
55 56 import fr.ebii.card2vcf.ui.settings.SettingsScreen
56 57 import fr.ebii.card2vcf.ui.settings.SettingsViewModel
57 58 import fr.ebii.card2vcf.ui.sync.SyncChromeViewModel
@@ -68,6 +69,7 @@ object Routes {
68 69 const val ImportVcf = "import_vcf"
69 70 const val Settings = "settings"
70 71 const val APropos = "apropos"
72 + const val LicencePolices = "licence_polices"
71 73 const val Projets = "projets"
72 74 const val ProjetDetail = "projet/{serverId}"
73 75
@@ -327,7 +329,13 @@ fun Card2vcfNavHost(
327 329 )
328 330 }
329 331 composable(Routes.APropos) {
330 - AProposScreen(onBack = { navController.popBackStack() })
332 + AProposScreen(
333 + onBack = { navController.popBackStack() },
334 + onLicencePolices = { navController.navigate(Routes.LicencePolices) },
335 + )
336 + }
337 + composable(Routes.LicencePolices) {
338 + LicencePolicesScreen(onBack = { navController.popBackStack() })
331 339 }
332 340 }
333 341 }
A android/app/src/main/res/raw/licence_polices_ofl.txt
+96 -0
@@ -0,0 +1,96 @@
1 +Copyright 2017 The Playfair Display Project Authors (https://github.com/clauseggers/Playfair-Display), with Reserved Font Name "Playfair Display"
2 +
3 +Copyright 2011 The Lora Project Authors (https://github.com/cyrealtype/Lora-Cyrillic), with Reserved Font Name "Lora".
4 +
5 +Copyright 2018 The Manrope Project Authors (https://github.com/googlefonts/manrope)
6 +
7 +These fonts are used by PicLead under the SIL Open Font License, Version 1.1.
8 +The license text is copied below, and is also available with a FAQ at:
9 +http://scripts.sil.org/OFL
10 +
11 +-----------------------------------------------------------
12 +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
13 +-----------------------------------------------------------
14 +
15 +PREAMBLE
16 +The goals of the Open Font License (OFL) are to stimulate worldwide
17 +development of collaborative font projects, to support the font creation
18 +efforts of academic and linguistic communities, and to provide a free and
19 +open framework in which fonts may be shared and improved in partnership
20 +with others.
21 +
22 +The OFL allows the licensed fonts to be used, studied, modified and
23 +redistributed freely as long as they are not sold by themselves. The
24 +fonts, including any derivative works, can be bundled, embedded,
25 +redistributed and/or sold with any software provided that any reserved
26 +names are not used by derivative works. The fonts and derivatives,
27 +however, cannot be released under any other type of license. The
28 +requirement for fonts to remain under this license does not apply
29 +to any document created using the fonts or their derivatives.
30 +
31 +DEFINITIONS
32 +"Font Software" refers to the set of files released by the Copyright
33 +Holder(s) under this license and clearly marked as such. This may
34 +include source files, build scripts and documentation.
35 +
36 +"Reserved Font Name" refers to any names specified as such after the
37 +copyright statement(s).
38 +
39 +"Original Version" refers to the collection of Font Software components as
40 +distributed by the Copyright Holder(s).
41 +
42 +"Modified Version" refers to any derivative made by adding to, deleting,
43 +or substituting -- in part or in whole -- any of the components of the
44 +Original Version, by changing formats or by porting the Font Software to a
45 +new environment.
46 +
47 +"Author" refers to any designer, engineer, programmer, technical
48 +writer or other person who contributed to the Font Software.
49 +
50 +PERMISSION & CONDITIONS
51 +Permission is hereby granted, free of charge, to any person obtaining
52 +a copy of the Font Software, to use, study, copy, merge, embed, modify,
53 +redistribute, and sell modified and unmodified copies of the Font
54 +Software, subject to the following conditions:
55 +
56 +1) Neither the Font Software nor any of its individual components,
57 +in Original or Modified Versions, may be sold by itself.
58 +
59 +2) Original or Modified Versions of the Font Software may be bundled,
60 +redistributed and/or sold with any software, provided that each copy
61 +contains the above copyright notice and this license. These can be
62 +included either as stand-alone text files, human-readable headers or
63 +in the appropriate machine-readable metadata fields within text or
64 +binary files as long as those fields can be easily viewed by the user.
65 +
66 +3) No Modified Version of the Font Software may use the Reserved Font
67 +Name(s) unless explicit written permission is granted by the corresponding
68 +Copyright Holder. This restriction only applies to the primary font name as
69 +presented to the users.
70 +
71 +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
72 +Software shall not be used to promote, endorse or advertise any
73 +Modified Version, except to acknowledge the contribution(s) of the
74 +Copyright Holder(s) and the Author(s) or with their explicit written
75 +permission.
76 +
77 +5) The Font Software, modified or unmodified, in part or in whole,
78 +must be distributed entirely under this license, and must not be
79 +distributed under any other license. The requirement for fonts to
80 +remain under this license does not apply to any document created
81 +using the Font Software.
82 +
83 +TERMINATION
84 +This license becomes null and void if any of the above conditions are
85 +not met.
86 +
87 +DISCLAIMER
88 +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
89 +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
90 +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
91 +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
92 +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
93 +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
94 +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
95 +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
96 +OTHER DEALINGS IN THE FONT SOFTWARE.
M android/app/src/main/res/values-en/strings.xml
+5 -0
@@ -189,6 +189,8 @@
189 189 <string name="apropos_editeur_nom">Eric Bouhana Ingénierie Informatique (ebii)</string>
190 190 <string name="apropos_editeur_description">Open source digital services</string>
191 191 <string name="apropos_lien_produit_label">Product page</string>
192 + <string name="apropos_lien_confidentialite_url" translatable="false">https://gitrust.ebii.fr/eric/piclead-client/blob/main/CONFIDENTIALITE.md</string>
193 + <string name="apropos_lien_confidentialite_label">Privacy policy</string>
192 194 <string name="apropos_lien_produit_url" translatable="false">https://www.ebii.fr/fr/editions/piclead</string>
193 195 <string name="apropos_contact_label">Contact</string>
194 196 <string name="apropos_contact_email" translatable="false">contact@ebii.fr</string>
@@ -198,6 +200,9 @@
198 200 <string name="apropos_composant_tesseract">Tesseract4Android — Apache 2.0</string>
199 201 <string name="apropos_composant_vosk">Vosk — Apache 2.0</string>
200 202 <string name="apropos_composant_markwon">Markwon — Apache 2.0</string>
203 + <string name="apropos_composant_polices">Playfair Display, Lora, Manrope — SIL Open Font License 1.1</string>
204 + <string name="apropos_licence_polices_label">Font licence text</string>
205 + <string name="licence_polices_titre">Font licence</string>
201 206
202 207 <!-- Settings — transcription -->
203 208 <string name="settings_transcription_titre">Voice note transcription</string>
M android/app/src/main/res/values/strings.xml
+5 -0
@@ -204,6 +204,8 @@
204 204 <string name="apropos_editeur_nom">Eric Bouhana Ingénierie Informatique (ebii)</string>
205 205 <string name="apropos_editeur_description">Services numériques open source</string>
206 206 <string name="apropos_lien_produit_label">Page produit</string>
207 + <string name="apropos_lien_confidentialite_url" translatable="false">https://gitrust.ebii.fr/eric/piclead-client/blob/main/CONFIDENTIALITE.md</string>
208 + <string name="apropos_lien_confidentialite_label">Politique de confidentialité</string>
207 209 <string name="apropos_lien_produit_url" translatable="false">https://www.ebii.fr/fr/editions/piclead</string>
208 210 <string name="apropos_contact_label">Contact</string>
209 211 <string name="apropos_contact_email" translatable="false">contact@ebii.fr</string>
@@ -213,6 +215,9 @@
213 215 <string name="apropos_composant_tesseract">Tesseract4Android — Apache 2.0</string>
214 216 <string name="apropos_composant_vosk">Vosk — Apache 2.0</string>
215 217 <string name="apropos_composant_markwon">Markwon — Apache 2.0</string>
218 + <string name="apropos_composant_polices">Playfair Display, Lora, Manrope — SIL Open Font License 1.1</string>
219 + <string name="apropos_licence_polices_label">Texte de la licence des polices</string>
220 + <string name="licence_polices_titre">Licence des polices</string>
216 221
217 222 <!-- Paramètres — transcription -->
218 223 <string name="settings_transcription_titre">Transcription des notes vocales</string>
M android/build.gradle.kts
+1 -1
@@ -1,5 +1,5 @@
1 1 plugins {
2 - id("com.android.application") version "8.6.0" apply false
2 + id("com.android.application") version "8.13.2" apply false
3 3 id("org.jetbrains.kotlin.android") version "2.0.20" apply false
4 4 id("org.jetbrains.kotlin.plugin.compose") version "2.0.20" apply false
5 5 id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20" apply false
A android/fastlane/metadata/android/en-US/changelogs/5.txt
+3 -0
@@ -0,0 +1,3 @@
1 +Android 16 (API 36) compatibility.
2 +
3 +Bundled font licence and privacy policy now reachable from the About screen.
A android/fastlane/metadata/android/en-US/images/featureGraphic.png
+0 -0
A android/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
+0 -0
A android/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
+0 -0
A android/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
+0 -0
A android/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
+0 -0
A android/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
+0 -0
A android/fastlane/metadata/android/en-US/images/sevenInchScreenshots/1.png
+0 -0
A android/fastlane/metadata/android/en-US/images/sevenInchScreenshots/2.png
+0 -0
A android/fastlane/metadata/android/en-US/images/sevenInchScreenshots/3.png
+0 -0
A android/fastlane/metadata/android/en-US/images/tenInchScreenshots/1.png
+0 -0
A android/fastlane/metadata/android/en-US/images/tenInchScreenshots/2.png
+0 -0
A android/fastlane/metadata/android/en-US/images/tenInchScreenshots/3.png
+0 -0
A android/fastlane/metadata/android/fr-FR/changelogs/5.txt
+4 -0
@@ -0,0 +1,4 @@
1 +Compatibilité Android 16 (API 36).
2 +
3 +Licence des polices embarquées et politique de confidentialité accessibles depuis
4 +l'écran À propos.
A android/fastlane/metadata/android/fr-FR/images/featureGraphic.png
+0 -0
A android/fastlane/metadata/android/fr-FR/images/sevenInchScreenshots/1.png
+0 -0
A android/fastlane/metadata/android/fr-FR/images/sevenInchScreenshots/2.png
+0 -0
A android/fastlane/metadata/android/fr-FR/images/sevenInchScreenshots/3.png
+0 -0
A android/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/1.png
+0 -0
A android/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/2.png
+0 -0
A android/fastlane/metadata/android/fr-FR/images/tenInchScreenshots/3.png
+0 -0
M android/gradle/wrapper/gradle-wrapper.properties
+1 -1
@@ -1,6 +1,6 @@
1 1 distributionBase=GRADLE_USER_HOME
2 2 distributionPath=wrapper/dists
3 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
3 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
4 4 networkTimeout=10000
5 5 retries=0
6 6 retryBackOffMs=500