There was some confusion around host and self addresses, where they're
created, default values, removing conTypes from defaults that are not
in received host addr, etc. I left in some asserts to help understand
if code that seems wrong but hard to fix is still getting called.
Current networking, based on invitations rather than a relay that
plays matchmaker, allows host to know its address when a game is
created, and for guest to know its host's address in
addition. Enforcing this makes inviting and rematching in common
code (coming soon) easier. Big change on Android is I used to create a
new game prior to passing it to GameConfigDelegate, but now I have to
wait for user to configure (including choosing how to communicate)
before I can create it.
Somehow getLangIsoCode() is returning null when called early in app
launch, on some subset of devices the Play Store isn't
identifying. I'm just going to default to "en" when that happens.
I'd removed it when the relay went away, but MQTT apparently doesn't
listen for network changes on its own and so there was no attempt to
resend messages when the device regained connectivity. Now there
is. Old logic to avoid thrashing remains and is not tested with MQTT
-- shouldn't need to be....
Add checkboxes to allow delete or archive action to be scheduled for
after a rematch is done. The UI's a bit awkward. NA tips help,
but it may be possible to make it easier to understand.
The assertion's clearly blocking testing, but I'm not sure it's not an
error for two move explanations to want to co-exist. For now they're
concatenated.
I was getting language name and iso code confused so adding a new type
to keep them separate. Keep string type for crossing JNI boundary and
passing as param e.g. in URLs and Bundles.
I want receiver to know when message was originally created. This adds
timestamp to messages and passes it via send proc. Client needs to
send it where possible. So far, MQTT format can't include it without
change, so I'm adding a new proto version. This change can read the
new version. Once that's well-enough distributed I can start sending
using it. Other transmission types than MQTT are for later.
Logic to set the fire time in the future wasn't firing when display of
the nag was diabled, so timers fired every few ms because they always
existed in the past.
Because I can't filter for file type, user may ask to open the wrong
thing. So put up an alert with a "try again" button. And include the
name of the chosen file for clarity.
After a hard-reset I can't open an archive file if I'm looking for
x-zip, because, I guess, the mime type is something the OS records
rather than deduced from the file. With this change, I can export,
hard-reset, and then import the file to get my settings and games
going again.
Main problem, aside from the explanations being stubbed out, is that
zip file overwriting doesn't work: once an entry is in the file, it'll
be there when the file's overwritten even if that entry is
excluded. This happens even if I create the file in memory and then
overwrite using the bytes.
A bit of testing says this works (to allow somebody moving to a new
phone to export and then import sharedpreferences in addition to the
games DB. There may be race conditions, but it probably works better
than nothing.
Remove it from known set so it can be used to test. Get rid of
filenames having umlaut since that screws up URLs between Android and
nginx (not sure whose fault and not going there now.) Lang name should
be able to have an umlaut, but it gets used for filename for now so
fix later....
Now we use only ISOCode string internally to identify languages, and
since that's universal it can be built into an wordlist and used
without the build of CrossWords knowing about that language
specifically (though it'll have to know about it to have the language
name be localizable.) For legacy support, though, the old int codes
are transmitted in invitations and URLs IFF available, otherwise the
string's used. If a newer build invites and older build to play in a
too-new language there will be trouble.