commit 3d6a265d76
Author: Bernard Massot <bmassot@free.fr>
Date: Mon Mar 22 20:30:12 2021 +0000
Translated using Weblate (French)
Currently translated at 99.2% (885 of 892 strings)
At least where QR was being used, it didn't go away. Not sure why, but a
global was getting nulled when it shouldn't have been. Race condition I
guess.
commit 1f8a46156f
Author: Bernard Massot <bmassot@free.fr>
Date: Sun Mar 21 22:03:07 2021 +0000
Translated using Weblate (French)
Currently translated at 99.2% (885 of 892 strings)
commit aaa8346e29
Author: Bernard Massot <bmassot@free.fr>
Date: Fri Mar 19 21:47:26 2021 +0000
Translated using Weblate (French)
Currently translated at 99.4% (884 of 889 strings)
Often I want to view a different wordlist from what's in use in the
game. So make the in-board long-tap shortcut to a wordlist remember what
the short-tap gesture chose most recently and use that instead of
assuming the game's list is what's wanted. Remember the choice on a
per-language rather than per-game basis.
This seems to do what I want: cause it to be dismissed whenever the
board fragment behind it (that launched it) goes away, e.g. because the
remote deleted first and local got a deleted-elsewhere-so-delete-here?
alert.
The old API required passing dict into game creation/loading. New
doesn't, but in some places I was doing other stuff there (like checking
existance), so can't remove there. Still code goes away.
Recent change added Delete button to game-over alert, but only when no
unacked messages remained (since deleted games can't continue trying to
send messages other games might still need to know the game's over.)
Typically the alert would go up and then, if the remote device is
online, shortly after acks would arrive. Now when that happens the alert
gets updated to offer to delete and archive.
Once in the archive games don't ever send unless opened explicitly (no
resend-all-on-gained-network stuff for them). So don't offer to put a
game there if it has unsent (unacked) messages. Should prevent problem
of a host being archived before it's managed to send its final move to
all guests.
Scroller is allowed only one child and I guess I wanted the TableLayout
to suffice, but having unrelated stuff in it sucked. So wrap it in a
LinearLayout and move the unrelated stuff out.
commit f68186cafb
Author: Bernard Massot <bmassot@free.fr>
Date: Sun Feb 21 19:22:45 2021 +0000
Translated using Weblate (French)
Currently translated at 99.4% (883 of 888 strings)
commit fabc29dfef
Author: Bernard Massot <bmassot@free.fr>
Date: Sun Feb 21 18:25:36 2021 +0000
Translated using Weblate (French)
Currently translated at 99.3% (882 of 888 strings)
commit b26f383d32
Author: Hosted Weblate <hosted@weblate.org>
Date: Sun Feb 21 19:09:29 2021 +0100
Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Translation: Crosswords/Android
Translate-URL: https://hosted.weblate.org/projects/xwords/android/
I want to encourage people not to think there's action to be taken
between when they invite and an invitee responds, e.g. to email. So make
the "Close Game" button the "positive" one that case.
I balked at writing code consisting of a bunch of classes there only to
provide a mapping to resource file IDs, instead opting to generate them.
(The right move might have been to generate everything from the old
xwprefs.xml, but it's too late for that. :-)
I realized I'd made some mistakes and so rebuilt them from the old
xwprefs.xml file. Didn't find any new mistakes, but there are fewer
unnecessary changes so the release-to-release diff should make more
sense.
commit 8e985b09a7
Author: Bernard Massot <bmassot@free.fr>
Date: Wed Feb 17 22:47:17 2021 +0000
Translated using Weblate (French)
Currently translated at 99.3% (883 of 889 strings)
We've decided that on upgrade users shouldn't be surprised by a busy
board and unaware of how to fix it. So keep it the way it's been and let
the curious discover the new ability. Also, simplify code.
commit 3176272c43
Author: Muha Aliss <muhaaliss@pm.me>
Date: Tue Feb 9 17:56:50 2021 +0000
Translated using Weblate (Turkish)
Currently translated at 4.2% (38 of 887 strings)
commit 5579eae91d
Author: Bernard Massot <bmassot@free.fr>
Date: Thu Feb 11 21:27:37 2021 +0000
Translated using Weblate (French)
Currently translated at 99.2% (880 of 887 strings)
This is an experiment. I suspect the eventual fix will be to have two
modes, one of which draws the values and the other doesn't, replacing
the TILES/VALUES pref.
Use the current recommended classes and organization of app
settings. Means breaking xwprefs.xml into eight or so files and a bunch
of changes to classes derived from Preference. Seems to work, but there
will be bugs. Also got rid of most Activity subclasses that were
alternatives to Fragments, since all Android versions I'm allowed to
support now support Fragments.
commit 663c0c3395
Author: Wellington Terumi Uemura <wellingtonuemura@gmail.com>
Date: Sat Jan 23 16:22:50 2021 +0000
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (887 of 887 strings)
commit d255dc7758
Author: Allan Nordhøy <epost@anotheragency.no>
Date: Sun Jan 17 18:26:54 2021 +0000
Translated using Weblate (Norwegian Bokmål)
Currently translated at 69.3% (619 of 892 strings)
commit 542af0a287
Author: Allan Nordhøy <epost@anotheragency.no>
Date: Sun Jan 17 18:27:24 2021 +0000
Translated using Weblate (English)
Currently translated at 100.0% (892 of 892 strings)
commit 8ced0990d0
Author: Luca De Filippo <luca.defilippo@translationcommons.org>
Date: Thu Jan 14 15:41:05 2021 +0000
Translated using Weblate (Italian)
Currently translated at 96.3% (859 of 892 strings)
commit 8ced0990d0
Author: Luca De Filippo <luca.defilippo@translationcommons.org>
Date: Thu Jan 14 15:41:05 2021 +0000
Translated using Weblate (Italian)
Currently translated at 96.3% (859 of 892 strings)
Returning null from createDialog() isn't allowed, so return this as a
fallback as before. But the old code immediately dismissed it and
created another in an infinite loop. So just suck it up and display it.
And as always hope users don't see it.
commit ef81d3ce08
Author: joaooliva <joaooliva@protonmail.com>
Date: Sun Jan 3 18:15:16 2021 +0000
Translated using Weblate (Portuguese (Brazil))
Currently translated at 97.1% (867 of 892 strings)
Author: joaooliva <joaooliva@protonmail.com>
Date: Sun Jan 3 03:54:00 2021 +0000
Translated using Weblate (Portuguese (Brazil))
Currently translated at 88.4% (784 of 886 strings)
Author: Luca De Filippo <luca.defilippo@translationcommons.org>
Date: Mon Dec 14 15:04:16 2020 +0000
Translated using Weblate (Italian)
Currently translated at 2.8% (25 of 883 strings)
Fix -- I think -- problem where game-deleted message received but not
handled by ChatDelegate would loop forever. Fix is to let non-visible
fragments take a shot, the BoardDelegate in this case. Seems to work,
but wasn't 100% reproducible AND the fix may break something else.
For some reason, in Spanish but not Catalan, filtering doesn't work with
two-letter tiles. The reason is that e.g. with RR two patterns, R.R and
RR (i.e. two R tiles, or one RR tile), are returned. The first shouldn't
be there since there are no words with RR that are spelled with two R
tiles. Until I can fix this picking the second (last) pattern seems to
work better.
If I can't figure out how to register for .xwd files, next best idea is
to encode a download in a custom url. This is one way of doing that, and
works with the urls just added to BYOD. Will likely change.
Known Players is a feature I'm devloping and right now want to keep it
capitalized as players learn what it is. It's only in debug builds at
the moment anyway.
Catch the onCancelled event, and treat as "close" button tap. Also
disable cancel via taps outside the alert, which I think is less
confusing than leaving the unplayable game up without the alert or
closing it without explanation.
BoardDelegate can have a one-to-one relationship to this thing, and
occasional leakage was preventing opening a new alert, so some fix was
needed. This one's simple.
Because I'm doing a singleton thing, if I miss the alert going away I
won't up another up. This tries to always catch dismissal. Might still
be screwed if it's not actually put up for some reason. Needs testing.
Try using both secure and insecure sockets. The latter appears to cause
fewer problems on OS/device combos with crappy BT. It's only possible if
I know the addr of the device I want to, so hack around that being
secret by passing it on request.
If inviting known players to a more-than-two-player game, can select all
at once. Required using checkboxes instead of radiobuttons for the case
where nMissing > 1.
Create new class that owns the alert. Let it decide whether to post,
remove, etc. Seems to work, but I've removed some of the "reinvite"
options I'm not sure were helpful anyway. To be considered...
When thumbnail was required but couldn't be produced list item showed up
tiny as height followed thumbnail's. Instead, when there's no thumbnail
behave as if it's disabled, a layout that looks ok.
There are ways I can't record a close, e.g. user swiping app to kill
it. To avoid that leading to a corrupt-game warning, or to failure to
open in background, drop the count to 0 rather then merely decrementing
it when it closes correctly. Assumption is that if it closes ok once
it's ok.
Invitations over MQTT were handled by different code that always opened
the new game on top of any other open one. Use instead existing code
that puts up a notification instead where appropriate.
I'm fixing android client not showing stats for or allowing to disable
mqtt after it's added automatically to a game that connects
otherwise. Problem was that only the channel got the mqtt address
flag. So now add the flag for any type that's added.
Don't wait for user to tap one of the buttons. Instead notice when
scrolling becomes possible, and offer once per launch until user says
"hide" or clicks the don't-ask-again box.
This won't impact shipping code, but if during development I add then
remove a new INVITEMEANS I can crash with AIOOB trying to load by
ordinal. So check first.
It's simpler this way, and I'm tired of stuff not happening because the
OS chooses not to schedule e.g. an invitation send for minutes. Goal's
to be running BluetoothServerSocket.accept() as much as possible when
there are active BT games in play OR when the game's in the foreground.
If that's happening, sent invitations and moves will be received when
users expect. When there's no traffic and app isn't being brought to
foreground, backoff will ensure I don't try to run accept() too often.
FWIW, BTLE seems to offer a better way to do this (to have an app be
responsive to incoming invitations when it hasn't run in the foreground
in a while), but it requires users to accept FINE_LOCATION
permission. I'm hoping I can make this work to avoid asking for that
permission.
Add a single method to provide candidate devices; don't bother passing
bogus BT MAC addrs; let instance belonging to background-user start
communicating again when user becomes foreground.
I was comparing the wrong strings and so broke deleting known BT
devices. And wanted to see how often since I'd seen them updated, though
every 10 seconds is still 10 seconds.
Some devices unpair themselves and needed to stop being listed so user'd
know to fix. And my Nexus 5x is neither a PHONE nor a COMPUTER per BT,
so accept a larger range of BT classes when scanning.