From c42de3b146288d4fac83c96a17cd95d26cd9fa55 Mon Sep 17 00:00:00 2001 From: Bernard Massot Date: Wed, 25 Mar 2020 12:19:17 +0000 Subject: [PATCH 01/10] Translated using Weblate (French) Currently translated at 89.5% (739 of 825 strings) --- xwords4/android/res_src/values-fr/strings.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/xwords4/android/res_src/values-fr/strings.xml b/xwords4/android/res_src/values-fr/strings.xml index f3152d3ba..88cf47fc8 100644 --- a/xwords4/android/res_src/values-fr/strings.xml +++ b/xwords4/android/res_src/values-fr/strings.xml @@ -2869,8 +2869,7 @@ changement, ou l\'éditer pour lui attribuer une façon de se connecter ? - Items de menu, etc. (uniquement pour -les release builds) + Items de menu, etc. Envoyer les SMS comme données @@ -3230,5 +3229,7 @@ Vous pouvez la ré-ouvrir pour que la permission soit redemandée. Ou vous pouve Aucun périphérique appairé détecté pour le moment. Archiver Lire davantage - - + Minutes par tour + QI du robot + Montrer les messages en attente + \ No newline at end of file From 109075e6298b14909d2d4e382b4c051cdcfb92f6 Mon Sep 17 00:00:00 2001 From: Nathan Date: Sun, 29 Mar 2020 18:42:41 +0000 Subject: [PATCH 02/10] Translated using Weblate (French) Currently translated at 91.5% (755 of 825 strings) --- xwords4/android/res_src/values-fr/strings.xml | 45 ++++++++----------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/xwords4/android/res_src/values-fr/strings.xml b/xwords4/android/res_src/values-fr/strings.xml index 88cf47fc8..0e1168bbd 100644 --- a/xwords4/android/res_src/values-fr/strings.xml +++ b/xwords4/android/res_src/values-fr/strings.xml @@ -2180,7 +2180,7 @@ illimités ? Annulez si vous n\'êtes pas sûr. SMS - Autoriser les parties par SMS + Autoriser les parties par MMS Seulement si vous avez un forfait SMS @@ -2195,15 +2195,12 @@ illimité ! played. If you don\'t have an unlimited plan your carrier may charge you for each and every message!\n\nShould play via SMS be enabled?--> - Attention : Cette fonctionnalité est faite -pour les téléphones avec un forfait SMS illimités. Une fois que vous l\'aurez -activée, des douzaines de SMS seront envoyés (de façon invisible) pour chaque -partie jouée. Si vous n\'avez pas un forfait illimité votre opérateur pourrait -vous faire payer pour chaque message !\n\nLes parties par SMS devraient-elles -être activées ? + Attention : Cette fonctionnalité est faite pour les téléphones avec un forfait SMS/MMS illimités. Une fois que vous l\'aurez activée, des douzaines de MMS seront envoyés (de façon invisible) pour chaque partie jouée. Si vous n\'avez pas un forfait illimité votre opérateur pourrait vous faire payer pour chaque message ! +\n +\nLes parties par MMS devraient-elles être activées \? - Activer les parties par SMS ? + Activer les parties par MMS \? Non : laisser désactivé @@ -2222,9 +2219,9 @@ vous faire payer pour chaque message !\n\nLes parties par SMS devraient-elles désactivées, donc aucun coup ne sera envoyé pour cette partie. (Si vous voulez activer les parties par SMS, allez dans Paramètres->Paramètres des parties en réseau.)--> - Les parties par SMS sont actuellement désactivées. Aucun coup ne sera envoyé par SMS. -\n -\nVous pouvez activer les parties par SMS maintenant, ou plus tard. + Les parties par MMS sont actuellement désactivées. Aucun coup ne sera envoyé par MMS. +\n +\nVous pouvez activer les parties par MMS maintenant, ou plus tard. Vérifier les mises à jour @@ -2694,9 +2691,7 @@ parties sur l\'écran principal permet de voir plus de parties phone with number \"%1$s\" is incompatible with this one for play using SMS. One of you may need to upgrade before you can continue.--> - La version de CrossWords sur le téléphone -de numéro \"%1$s\" est incompatible avec celle-ci pour jouer par SMS. L\'un de -vous doit faire une mise à jour avant de pouvoir continuer. + La version de CrossWords sur le téléphone de numéro « %1$s » est incompatible avec celle-ci pour jouer par MMS. L\'un de vous doit faire une mise à jour avant de pouvoir continuer. Nommez votre partie @@ -2716,7 +2711,7 @@ vous doit faire une mise à jour avant de pouvoir continuer. \nVous pouvez activer le Bluetooth maintenant, ou plus tard. - Activer les SMS + Activer les MMS Activer le Bluetooth @@ -2743,8 +2738,7 @@ avant de pouvoir être ouverte. - (Vous aurez la possibilité d\'inviter -d\'autres joueurs quand elle sera ouverte.) + (Vous aurez la possibilité d\'inviter d\'autres joueurs après qu\'elle soit ouverte.) Utiliser param. par défaut @@ -3009,8 +3003,7 @@ pour la langue \u0020Vous pourriez, par exemple, avoir besoin d\'être sur un réseau Wi-Fi différent. Le Bluetooth ne marche que pour les appareils proches. - Jouer par SMS n\'est pas - possible avec tous les opérateurs. + Jouer par MMS n\'est pas possible avec tous les opérateurs. Message de discussion dans la partie %1$s %1$s : %2$s @@ -3019,7 +3012,7 @@ pour la langue Activer Le \"relai\" est un serveur sur Internet qui permet l\'échange de messages entre appareils qui font tourner CrossWords. Il fonctionne dès que vous avez une connexion à Internet pleinement fonctionnelle, mais peut avoir des problèmes sur des réseaux Wifi restreints. - Les parties par SMS utilisent la même technologie que l\'envoi de SMS normaux. Bien que les messages soient invisibles pour vous, votre opérateur les considère comme des messages normaux, donc vous pourriez vouloir éviter cette fonctionnalité si vous n\'avez pas un forfait (ou un budget) illimité. + Les parties par MMS utilisent la même technologie que l\'envoi de SMS normaux. Bien que les messages soient invisibles pour vous, votre opérateur les considère comme des messages normaux, donc vous pourriez vouloir éviter cette fonctionnalité si vous n\'avez pas un forfait (ou un budget) illimité. "Utilisez le Bluetooth pour jouer contre un appareil à proximité appairé avec le votre." Ne peut trouver aucun coup @@ -3078,7 +3071,7 @@ pour la langue Revanche : %1$s Revanche en cours Invitations à la revanche envoyées - Invitation envoyée par SMS au numéro de téléphone %1$s sur %2$s + Invitation envoyée par MMS au numéro de téléphone %1$s sur %2$s Invitation envoyée par Bluetooth à l\'appareil appairé \"%1$s\" sur %2$s Invitation transmise par le relai à un autre appareil sur %1$s Invitation envoyée par %1$s sur %2$s. Destinataire inconnu. @@ -3133,9 +3126,9 @@ Merci de me faire savoir si vous aimez cette fonctionnalité, de signaler les pl Vous pouvez la ré-ouvrir pour que la permission soit redemandée. Ou vous pouvez retirer le réglage de communication par SMS. Crosswords a besoin d\'accéder à un stockage temporaire pour conserver ce que vous êtes sur le point de télécharger. - Crosswords a besoin de la permission d\'envoyer une invitation par SMS. + Crosswords a besoin de la permission d\'envoyer une invitation par MMS. Permission non accordée - Crosswords veut accéder à vos contacts pour pouvoir mettre un nom sur les numéros de téléphones qui vous envoient des invitations par SMS. Vous pourrez toujours recevoir des invitations si vous n\'accordez pas cette permission, mais seul le numéro de téléphone de l\'expéditeur s\'affichera. + Crosswords veut accéder à vos contacts pour pouvoir mettre un nom sur les numéros de téléphones qui vous envoient des invitations par MMS. Vous pourrez toujours recevoir des invitations si vous n\'accordez pas cette permission, mais seul le numéro de téléphone de l\'expéditeur s\'affichera. Redemander Pas dans les contacts Échec de l\'envoi de SMS @@ -3170,9 +3163,9 @@ Vous pouvez la ré-ouvrir pour que la permission soit redemandée. Ou vous pouve CrossWords peut enregistrer et accéder à des listes de mots dans l\'espace de Téléchargements de votre appareil mais a besoin de la permission d\'y accéder à cet endroit. \n \nVous pouvez refuser cette permission sans crainte si vous ne téléchargerez jamais de listes de mots excepté depuis CrossWords et n\'en avez jamais enregistrées là. - Pour rejouer une revanche qui utilise les SMS, CrossWords a besoin de la permission d\'accéder à votre numéro de téléphone. - Jouer cette revanche par SMS uniquement n\'est pas possible sans cette permission. - Sans cette permission, la revanche continuera mais créera une partie qui ne peut pas être jouée par SMS. + Pour rejouer une revanche qui utilise les MMS, CrossWords a besoin de la permission d\'accéder à votre numéro de téléphone. + Jouer cette revanche par MMS uniquement n\'est pas possible sans cette permission. + Sans cette permission, la revanche continuera mais créera une partie qui ne peut pas être jouée par MMS. Enregistrer une liste de mots dans l\'espace de Téléchargements nécessite la permission. Utiliser les API web en premier Utiliser le code SMS expérimental/nouveau From 45ae6c0fcac29d5dbd724495dbf4259fda1300d0 Mon Sep 17 00:00:00 2001 From: Eric House Date: Mon, 30 Mar 2020 18:35:17 -0700 Subject: [PATCH 03/10] fix app name capitalization --- xwords4/android/res_src/values-ca/strings.xml | 4 ++-- xwords4/android/res_src/values-de/strings.xml | 2 +- xwords4/android/res_src/values-fr/strings.xml | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/xwords4/android/res_src/values-ca/strings.xml b/xwords4/android/res_src/values-ca/strings.xml index ea1e48359..2f02f80ca 100644 --- a/xwords4/android/res_src/values-ca/strings.xml +++ b/xwords4/android/res_src/values-ca/strings.xml @@ -856,7 +856,7 @@ aparells seleccionats? Selecciona Treu la selecció Aquesta partida no té cap invitació - Tornar a iniciar el Crosswords + Tornar a iniciar el CrossWords S\'està sortint de l\'aplicació… Habilita el joc via repetidor Inhabilitat el joc via repetidor @@ -969,5 +969,5 @@ aparells seleccionats? SMS de dades Encara no s\'ha detectat cap aparell aparellat. Mou a l\'arxiu - Toca l\'enllaç per a acceptar la invitació i unir-te al joc de Crosswords: %1$s + Toca l\'enllaç per a acceptar la invitació i unir-te al joc de CrossWords: %1$s diff --git a/xwords4/android/res_src/values-de/strings.xml b/xwords4/android/res_src/values-de/strings.xml index bbb59bfca..085b1bf6f 100644 --- a/xwords4/android/res_src/values-de/strings.xml +++ b/xwords4/android/res_src/values-de/strings.xml @@ -953,7 +953,7 @@ Offiziell kopieren Letzter Kontakt von: %1$s Schließen - Diese Anzeige wird immer dann gezeigt, wenn Crosswords im Hintergrund läuft, um Bluetooth-Nachrichten zu empfangen. Normalerweise läuft es 15 Minuten lang nach dem Start oder nach Empfang der letzten Bluetooth-Nachricht. + Diese Anzeige wird immer dann gezeigt, wenn CrossWords im Hintergrund läuft, um Bluetooth-Nachrichten zu empfangen. Normalerweise läuft es 15 Minuten lang nach dem Start oder nach Empfang der letzten Bluetooth-Nachricht. Bluetooth-Nachrichten im Hintergrund empfangen Ereignisse während der Partie Wenn beim Scannen das erwartete Gerät nicht gefunden wird: diff --git a/xwords4/android/res_src/values-fr/strings.xml b/xwords4/android/res_src/values-fr/strings.xml index 0e1168bbd..121855b99 100644 --- a/xwords4/android/res_src/values-fr/strings.xml +++ b/xwords4/android/res_src/values-fr/strings.xml @@ -3122,13 +3122,13 @@ Merci de me faire savoir si vous aimez cette fonctionnalité, de signaler les pl Seuls les appareils actuellement disponibles sont affichés. Si un appareil à proximité ne s\'affiche pas, assurez-vous que le WiFi est allumé, que CrossWords est installé, et que le WiFi Direct est activé. Il n\'y a actuellement pas d\'appareils accessibles par WiFi Direct qui ont CrossWords installé. Utiliser le WiFi Direct pour jouer contre un appareil faisant du WiFi Direct, sur lequel CrossWords est installé. - Cette partie est configurée pour communiquer par SMS mais Crosswords n\'a pas la permission de le faire. Vous pouvez toujours ouvrir cette partie, mais elle pourrait ne pas être en capacité d\'envoyer ou recevoir des coups. + Cette partie est configurée pour communiquer par SMS mais CrossWords n\'a pas la permission de le faire. Vous pouvez toujours ouvrir cette partie, mais elle pourrait ne pas être en capacité d\'envoyer ou recevoir des coups. Vous pouvez la ré-ouvrir pour que la permission soit redemandée. Ou vous pouvez retirer le réglage de communication par SMS. - Crosswords a besoin d\'accéder à un stockage temporaire pour conserver ce que vous êtes sur le point de télécharger. - Crosswords a besoin de la permission d\'envoyer une invitation par MMS. + CrossWords a besoin d\'accéder à un stockage temporaire pour conserver ce que vous êtes sur le point de télécharger. + CrossWords a besoin de la permission d\'envoyer une invitation par MMS. Permission non accordée - Crosswords veut accéder à vos contacts pour pouvoir mettre un nom sur les numéros de téléphones qui vous envoient des invitations par MMS. Vous pourrez toujours recevoir des invitations si vous n\'accordez pas cette permission, mais seul le numéro de téléphone de l\'expéditeur s\'affichera. + CrossWords veut accéder à vos contacts pour pouvoir mettre un nom sur les numéros de téléphones qui vous envoient des invitations par MMS. Vous pourrez toujours recevoir des invitations si vous n\'accordez pas cette permission, mais seul le numéro de téléphone de l\'expéditeur s\'affichera. Redemander Pas dans les contacts Échec de l\'envoi de SMS @@ -3225,4 +3225,4 @@ Vous pouvez la ré-ouvrir pour que la permission soit redemandée. Ou vous pouve Minutes par tour QI du robot Montrer les messages en attente - \ No newline at end of file + From 3b80e51439bac7550d20a6da148a57efa7879cc4 Mon Sep 17 00:00:00 2001 From: Eric House Date: Wed, 25 Mar 2020 22:27:01 -0700 Subject: [PATCH 04/10] recover from corrupt chat player index This should never happen, but it did and I want to stop local crashes to investigate. --- .../src/main/java/org/eehouse/android/xw4/ChatDelegate.java | 5 +++-- xwords4/common/server.c | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java index 4d62cef2a..4597b4b32 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/ChatDelegate.java @@ -162,8 +162,9 @@ public class ChatDelegate extends DelegateBase { TextView view = (TextView)row.findViewById( R.id.chat_row_text ); view.setText( msg ); view = (TextView)row.findViewById( R.id.chat_row_name ); - view.setText( getString( R.string.chat_sender_fmt, - m_names[playerIndx] ) ); + + String name = playerIndx < m_names.length ? m_names[playerIndx] : ""; + view.setText( getString( R.string.chat_sender_fmt, name ) ); if ( tsSeconds > 0 ) { long now = 1000L * Utils.getCurSeconds(); diff --git a/xwords4/common/server.c b/xwords4/common/server.c index 771d92987..6a7a58180 100644 --- a/xwords4/common/server.c +++ b/xwords4/common/server.c @@ -722,6 +722,7 @@ sendChatTo( ServerCtxt* server, XP_U16 devIndex, const XP_UCHAR* msg, XWStreamCtxt* stream = messageStreamWithHeader( server, devIndex, XWPROTO_CHAT ); stringToStream( stream, msg ); + XP_ASSERT( from < server->vol.gi->nPlayers ); stream_putU8( stream, from ); stream_putU32( stream, timestamp ); stream_destroy( stream ); @@ -765,6 +766,7 @@ receiveChat( ServerCtxt* server, XWStreamCtxt* incoming ) sendChatToClientsExcept( server, sourceClientIndex, msg, from, timestamp ); } + XP_ASSERT( from < server->vol.gi->nPlayers ); util_showChat( server->vol.util, msg, from, timestamp ); XP_FREE( server->mpool, msg ); return XP_TRUE; From de3809aa7d70db3c9e225951c0226bb4ca91df8d Mon Sep 17 00:00:00 2001 From: Eric House Date: Thu, 26 Mar 2020 18:12:37 -0700 Subject: [PATCH 05/10] fix crash when chat message is too long Len byte was limited to 255, but would get clipped (masked with 0xFF) then all the string data would get written. So on receipt, the clipped length was taken to be that of the string data, with the rest of the string to be interpreted as something else. An array index, in this case. --- .../src/main/java/org/eehouse/android/xw4/DBUtils.java | 2 +- xwords4/common/server.c | 2 -- xwords4/common/strutils.c | 8 ++++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java index 25f53e470..4d6c1cb56 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DBUtils.java @@ -1868,7 +1868,7 @@ public class DBUtils { { Assert.assertNotNull( msg ); Assert.assertFalse( -1 == fromPlayer ); - ArrayList valuess = new ArrayList(); + ArrayList valuess = new ArrayList<>(); valuess.add( cvForChat( rowid, msg, fromPlayer, tsSeconds ) ); appendChatHistory( context, valuess ); Log.i( TAG, "appendChatHistory: inserted \"%s\" from player %d", diff --git a/xwords4/common/server.c b/xwords4/common/server.c index 6a7a58180..771d92987 100644 --- a/xwords4/common/server.c +++ b/xwords4/common/server.c @@ -722,7 +722,6 @@ sendChatTo( ServerCtxt* server, XP_U16 devIndex, const XP_UCHAR* msg, XWStreamCtxt* stream = messageStreamWithHeader( server, devIndex, XWPROTO_CHAT ); stringToStream( stream, msg ); - XP_ASSERT( from < server->vol.gi->nPlayers ); stream_putU8( stream, from ); stream_putU32( stream, timestamp ); stream_destroy( stream ); @@ -766,7 +765,6 @@ receiveChat( ServerCtxt* server, XWStreamCtxt* incoming ) sendChatToClientsExcept( server, sourceClientIndex, msg, from, timestamp ); } - XP_ASSERT( from < server->vol.gi->nPlayers ); util_showChat( server->vol.util, msg, from, timestamp ); XP_FREE( server->mpool, msg ); return XP_TRUE; diff --git a/xwords4/common/strutils.c b/xwords4/common/strutils.c index ba7b5c986..82054d8fc 100644 --- a/xwords4/common/strutils.c +++ b/xwords4/common/strutils.c @@ -267,8 +267,12 @@ stringFromStreamHere( XWStreamCtxt* stream, XP_UCHAR* buf, XP_U16 buflen ) void stringToStream( XWStreamCtxt* stream, const XP_UCHAR* str ) { - XP_U16 len = str==NULL? 0: XP_STRLEN( str ); - XP_ASSERT( len < 0xFF ); + XP_U16 len = str == NULL? 0: XP_STRLEN( str ); + if ( len > 0xFF ) { + XP_LOGFF( "truncating string '%s', dropping len from %d to %d", + str, len, 0xFF ); + len = 0xFF; + } stream_putU8( stream, (XP_U8)len ); stream_putBytes( stream, str, len ); } /* putStringToStream */ From 24ffa9139b04076c9adf69ced73a6b578973f98a Mon Sep 17 00:00:00 2001 From: Eric House Date: Thu, 26 Mar 2020 18:24:46 -0700 Subject: [PATCH 06/10] hack: limit chat field length to 255 The common code truncates to 255 *bytes*, not chars, so this isn't even right, but at least for ascii users it'll make it less likely that what's typed doesn't all get sent. The right fix is to change the format to not limit sent str len to 255 bytes. See commit 512a8e1af. --- xwords4/android/app/src/main/res/layout/chat.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/xwords4/android/app/src/main/res/layout/chat.xml b/xwords4/android/app/src/main/res/layout/chat.xml index b0ac5d6eb..0a9b0a5d1 100644 --- a/xwords4/android/app/src/main/res/layout/chat.xml +++ b/xwords4/android/app/src/main/res/layout/chat.xml @@ -34,6 +34,7 @@ android:layout_weight="1" android:scrollHorizontally="false" android:hint="@string/chat_hint" + android:maxLength="255" />