Commit graph

698 commits

Author SHA1 Message Date
Eric House
e23129c0e7 always increment failure count on send failure 2019-06-23 10:13:31 -07:00
Eric House
5cb2be33d2 Rewrite BT proto to batch messages
Lots of changes. Old BT proto is no longer compatible. New one
batches messages per device and sends all on a single connection.
The queue (now a single buffer) is now a static global and the thread
that services it doesn't die (but gloms onto whatever Service instance
is most recent.) Code to pack and unpack the protocol can probably be
reused for wifi-direct or any other pass-through transport.
2019-06-23 10:13:31 -07:00
Eric House
e13d90409c replace some firing asserts with log messages
I'm getting crashes on a device with an iffy wifi connection and no SIM.
May need to look into these.
2019-06-23 10:13:31 -07:00
Eric House
997aad84ff don't open game just because it was created
Posting a notification is enough. And existing code already handles the
missing dict case, so GamesListDelegate doesn't even need to know.
2019-06-23 10:13:31 -07:00
Eric House
54fb43ec62 double scan progress time
Since the BT stuff tends to timeout late when failing, this looks better.
2019-06-23 10:13:31 -07:00
Eric House
de9b0851d5 add env to map immediately, in initGame()
I'm seeing an assertion failure in cleanup that could be explained by
the cleanup happening when initGame() has been called but no subsequent
jni method that would have added the env to the map. So let's add it
immediately so that can't happen.
2019-06-23 10:13:31 -07:00
Eric House
989f7524d6 unselect any game moved into a closed group
Fixes GameOver game moved via "archive" checkbox remaining selected
2019-06-23 10:12:05 -07:00
Eric House
76957fe4eb don't move selected games via context menu
Both ways of invoking move-to-group were working on the set of selected
games. Instead pass what's meant to be operated on as a parameter.
2019-06-23 10:12:05 -07:00
Eric House
682501814b put GameOver view layout into a ScrollView
When device in landscape the archive box is otherwise unreachable on a
four-player game
2019-06-23 10:12:05 -07:00
Eric House
dc1431fd08 make GamePtr AutoCloseable and use where possible 2019-06-23 10:12:05 -07:00
Eric House
c706205cd1 Make JNIThread autoclosable and use everywhere
JNIThread is somehow sticking around sometimes and holding the lock for
a game so that that game can never be opened again. On the theory that
there's some place retain() was called but not release(), use the thing
in try-with-resources wherever possible. Which is pretty much
everywhere.

Also added age to the lock-holder report being uploaded.
2019-06-23 10:12:05 -07:00
Eric House
e56770ea29 include stack of lock owner when logging failure to lock 2019-06-23 10:12:05 -07:00
Eric House
ceb68b9787 Fix NPE when url for delete game has changed
I think it's only an issue for debug builds where I've manually pointed
at a different server, but just in case.
2019-06-23 10:12:05 -07:00
Eric House
58882fe52f make text in new GameOver alert bigger
To match how it was when using the system-provided view.
2019-06-23 10:12:05 -07:00
Eric House
25509c729a report stack of lock owner to crashlytics when can't get it
I'm seeing something permanently lock a game so it can't be opened. So
add code to report the stack of the owner to Crashlytics when opening
fails 3 times in a row. It's stubbed out for non-debug builds.
2019-06-23 10:12:05 -07:00
Eric House
babca4a696 Add custom GameOver alert for GameOver with Archive checkbox
I didn't like having to re-open a game to archive it after
rematching, so now there's a checkbox that lets you archive it after
either rematching OR just using OK to dismiss the alert. Also fixed
rematch of a solo game causing new game to be created in Archive
group if that's where the source game was.

squash me
2019-06-23 10:12:05 -07:00
Eric House
0ad9b0f891 up copyright year 2019-06-23 10:12:05 -07:00
Eric House
fce0eb2acc add git rev to crashlytics reports 2019-06-23 10:12:05 -07:00
Eric House
0cd0bd4c03 plug leak 2019-06-23 10:12:05 -07:00
Eric House
2afce586a3 avoid crashes when BT turned off
Test at enqueueWork() and onHandleWorkImpl(). Seems to do it. Maybe
turning it off mid-send will still crash...
2019-06-23 10:12:05 -07:00
Eric House
601eaf395c don't create threads we won't use 2019-06-23 10:12:05 -07:00
Eric House
7ba2f92645 null listener thread ref so will be restarted
Once it died it stayed dead: bad.
2019-06-23 10:12:05 -07:00
Eric House
ef602baa18 cleanup 2019-06-23 10:12:05 -07:00
Eric House
7ccb576214 Recast BTService as a JobIntentService
Got tired of the space the forground-service notification icons were
taking. So now BT sends and receives are done via static threads and
onHandleWork(). The send thread times itself out quickly. The receive
thread doesn't yet. We'll see how long the OS lets it run and what
needs to be done to deal with that.
2019-06-23 10:12:05 -07:00
Eric House
438e134870 add debug-only option for invitee players to be robots
It's useful when testing to have the remote device play without human
interaction. So add an option, and UI to trigger it, for the players
created remotely in response to an invitation to be robots. There are
guards in place to catch the feature slipping into a release build.
2019-06-23 10:12:05 -07:00
Eric House
136fa6ac7d remove some logging 2019-06-23 10:12:05 -07:00
Eric House
842509d84a remove methods overridden just for logging
looks like I've fixed the crash I wanted to diagnose.
2019-06-23 10:12:05 -07:00
Eric House
29661d2a7e fix relay interactions again
Eliminate the writer thread, since onHandleWork() is already getting
called on a thread and can process the outbound queue itself. And get
rid of reader thread needing to wait for an instance of the RelayService
to be available to process a packet (which was taking 5-10 seconds all
the time): just post received packets via an enqueueWork() call using
the app context that's always available.
2019-06-23 10:12:05 -07:00
Eric House
34b462b97c pass context and use to post lock-failure toast 2019-06-23 10:12:05 -07:00
Eric House
888109ce4e tweak/reduce logging 2019-06-23 10:12:05 -07:00
Eric House
c4d21b7b59 move constant from XWApp to build.gradle 2019-06-23 10:12:05 -07:00
Eric House
781da8ccb6 avoid NPE (and log to root-cause it later) 2019-06-23 10:12:05 -07:00
Eric House
37085b0ba1 ensure writer gets run every time OS schedules via onHandleWork() 2019-06-23 10:12:05 -07:00
Eric House
130487f7df remove some logging 2019-06-23 10:12:05 -07:00
Eric House
122b270025 fix NPE and let GameSummary stay until replaced
GameListItem was clearing its summary when kicking off a replacement
load. Instead keep the old around in case somebody wants it (e.g. to
figure out what menus to enable) until the reload finishes.

Also add logging of how long loading takes. I think a cache might be
called for.
2019-06-23 10:12:05 -07:00
Eric House
6193c376db move invite button above button bar.
(It's more frequently used)
2019-06-23 10:12:05 -07:00
Eric House
2a5c3b11a0 add context comment for new string 2019-06-23 10:12:05 -07:00
Eric House
1e6fdd1f70 remove logging 2019-06-23 10:10:49 -07:00
Eric House
0a50a721dd fix malformed xml string
Weblate bug?
2019-06-23 10:10:49 -07:00
Eric House
aab36efdac fix problems with RelayService
Darned thing was dropping packets, failing to connect games built in
response to invitations, and otherwise misbehaving. First was due to not
resheduling when exited with outbound packets in queue; second to not
overriding relayNoConnProc() (due to signature change.) Though it still
happens occasionally.... Also added timestamps to track how long it
takes a packet to be sent and ACK'd.
2019-06-23 10:10:00 -07:00
Eric House
0ad21783b8 add rowid to NoSuchGameException 2019-06-23 10:10:00 -07:00
Eric House
8ff23294e6 fix NPE (and tweak logging) 2019-06-23 10:10:00 -07:00
Eric House
fd122148b8 add flavor to toasted got-fcm message
So I can tell the apps apart
2019-06-23 10:10:00 -07:00
Eric House
ac5cbea83f display latest FCM receipt as part of netstats for relay 2019-06-23 10:10:00 -07:00
Eric House
c67bda8683 use a constant jobID for enqueueWork()
That each VM instance had a different id might be why I was
crashing. We'll see.
2019-06-23 10:10:00 -07:00
Eric House
b5ab8803c4 remove debug-only assert I'm seeing
Good to know it's happening; now don't crash!
2019-06-23 10:10:00 -07:00
Eric House
40eab8690b put back pref controlling whether FCM receives are Toasted 2019-06-23 10:10:00 -07:00
Eric House
272204223e make md5sum calculation available everywhere
I want to log sums to see when they arrive on relay. And also add some
missing @Overrides I noticed.
2019-06-23 10:10:00 -07:00
Eric House
f28c21206c put up toast when FCM message received
It's too useful to live without. So: tap into the static list of live
Delegates, and if any of them has an Activity available use it to run
Toast on UI thread. Otherwise there will be no display.
2019-06-23 10:10:00 -07:00
Eric House
6853b203a1 make https the default for prefs-alterable strings
And change the keys so all local changes get reset
2019-06-23 10:10:00 -07:00
Eric House
2c4ce83a5b use https everywhere. And rewrite URLs if necessary. 2019-06-23 10:10:00 -07:00
Eric House
5d36470e50 add some logging around RelayService lifecycle 2019-06-23 10:10:00 -07:00
Eric House
5f9d39ef8d communicate variant to relay, and store in new column 2019-06-23 10:10:00 -07:00
Eric House
a49c8c89ba fcm config file for xw4 variant 2019-06-23 10:09:59 -07:00
Eric House
d950ad695c remove debug toast that can't work from that class 2019-06-23 10:09:59 -07:00
Eric House
0c52d4e550 remove sms permissions from play store variant
and from a new debug variant so that can be tested. Add explanation to
be shown users who try to use the now-unavailable features.
2019-06-23 10:09:59 -07:00
Eric House
6ecfd2f20b add app-side support for firebase messaging
Works for xw4d variant only so far -- xw4 builds are broken!!!
2019-06-23 10:09:00 -07:00
Hosted Weblate
e20be83a58
Merge branch 'origin/android_translate' into Weblate. 2019-01-22 09:21:13 +01:00
Allan Nordhøy
4b8f39552f
Translated using Weblate (English)
Currently translated at 100.0% (764 of 764 strings)
2019-01-22 09:21:09 +01:00
Eric House
fb5fee3483 tweak string 2019-01-21 21:48:58 -08:00
Eric House
506ddc8f7a fix logic error in permissions callback
Somehow I forgot what params were and decided that array's length needed
to match another's.
2019-01-21 20:44:16 -08:00
Eric House
06fe5894b9 fix invitations creating a second activity stack
Looks like certain launches that went through DispatchNotify could
create a second "instance" of the app. Giving that Activity a launchMode
of singleTask fixes this (singleTop does not.)
2019-01-21 18:57:38 -08:00
Eric House
51c7752830 use same launch flags for all self-launches
Launching a game in response to a wordlist it needing being downloaded
went through a different Intent-creation path from the rest, and
resulted in a second instance of the app showing in the launcher. This
shoudl fix that. I don't *think* it's the only way I'm getting second
instances or stacked GamesLists, but it should get fixed.
2019-01-21 18:57:38 -08:00
Eric House
52d983e0d8 assert (on DEBUG builds) that MainActivity is never sublaunched
I think this might help catch the instance duplication I'm seeing very
rarely.
2019-01-21 18:57:38 -08:00
Eric House
837ff1f8fc Give each variant a name, and include in About alert.
I modified existing translated strings, adding the new clause. Not doing
that would cause the existing strings to be stripped because they'd no
longer have the matching set of format specifiers.
2019-01-18 16:45:27 -08:00
Eric House
f072736bb8 need to call doResume() twice
Calling it only once on acquiring lock where before it'd been called
twice meant ConnStatusHandler never got initialized. Bad.
2019-01-18 07:32:58 -08:00
Eric House
4878afb185 remove misplaced assert 2019-01-18 06:51:23 -08:00
Eric House
ae56f23f66 remove misguided Assert that's firing 2019-01-17 15:16:54 -08:00
Eric House
026d6d5c5e Change GameLock API (should be no behavior change) 2019-01-17 12:46:51 -08:00
Eric House
f436090c6f install listeners immediately after setting them
Fix a race condition introduced by making initing jnithread be
asynchronous: all the layout that was supposed to happen after listeners
were added instead happened before, so that they weren't there to be
installed as part of layout. So now, after adding them, get them hooked
up to the UI. (The complexity of this is all historical: at some point
the listeners were getting added BEFORE there were views to attach them
to, so they were cached and added later. Probably now they could simply
be installed as part of adding them. But I'm not doing that now.)
2019-01-17 12:28:01 -08:00
Eric House
95df560a40 update changes: sms will be ripped out alas. 2019-01-17 08:51:13 -08:00
Eric House
385f98f038 check for null 2019-01-16 22:17:54 -08:00
Eric House
d94217cc06 Make Board wait a bit for lock on opening
Was seeing frequent failure to open games as JNIThread.getRetained() was
unable to get a lock without waiting. Which it can't do on UI thread. So
added a method to GameLock that takes a callback to be called when the
lock's obtained, with the actual waiting done on a local thread. Then
fixed BoardDelegate a bit to not crash while waiting for the callback.
2019-01-16 21:45:39 -08:00
Eric House
a8872df5ed cleanup: I like the call-chain style better these days 2019-01-16 20:32:44 -08:00
Eric House
20359e50da log GameLock failure only when it's a result 2019-01-16 13:24:46 -08:00
Eric House
4c9ded77bf assertion says had race condition; fix it
Use a set instead of a singleton so a late clear doesn't overwrite an
early set.
2019-01-16 11:31:54 -08:00
Eric House
a93b1da6fa up client version
Will allow to distinguish on relay what clients can receive GCM.
2019-01-16 11:14:35 -08:00
Eric House
ddf12b6523 resend all when come to foreground 2019-01-15 22:13:46 -08:00
Eric House
c611919876 check for moves when come to foreground 2019-01-15 14:34:50 -08:00
Eric House
e61d7a5629 remove GCM -- crashes when invoked from server!
Once built for SDK 26 the old GCM support code crashes as it's calling
startService() from background. Duh! Will have to bring in Firebase's
replacement at some point. For now if I'm to release it has to be
without GCM.
2019-01-15 14:18:20 -08:00
Eric House
43b979ff46 cleanup: logging and method rename 2019-01-15 12:29:45 -08:00
Eric House
cf3d3bc156 cleanup from review of diffs (nothing significant) 2019-01-15 07:44:38 -08:00
Eric House
73a469a428 make logging respect force-on preference 2019-01-14 16:58:00 -08:00
Eric House
788113ee28 up versions strings for new release 2019-01-14 13:12:39 -08:00
Eric House
c976b3f595 show BT-troubleshooting hint when scan finds no devices 2019-01-14 12:20:27 -08:00
Eric House
23e58524a1 in invite dialog, confirm before deleting BT devices 2019-01-14 12:08:07 -08:00
Eric House
0da5d9dd28 improve gcm-debug toast message 2019-01-13 21:56:59 -08:00
Eric House
e378647e36 put back explanatory progress text 2019-01-12 09:04:40 -08:00
Eric House
bfbf17252e use ProgressBar instead of Dialog for BT invite scans
I wanted to show progress, and it was just as easy to replace the
deprecated ProgressDialog as to add a timer to the thing.
2019-01-11 21:06:15 -08:00
Eric House
bdbd5bc1ee disable logging for tagged release builds 2019-01-09 20:00:20 -08:00
Eric House
d2cbcf1e71 tweak BT background notification icon and expl. text
The BT icon part was too thick. And the explanation was TMI.
2019-01-09 18:57:50 -08:00
Eric House
d257369639 use same invite prefix for all variants
I want to be able to invite one app to the other's games to better test
relay. Since I'm the only one using the Dbg variant should be no impact.
2019-01-09 18:25:52 -08:00
Eric House
011825e4a9 cleanup 2019-01-09 18:18:27 -08:00
Eric House
302a3a5025 accept invite even if same-gameID game open
more dev-only code, likely: if the game that's sending the invitation is
open when the invitation arrives, should still check if it's a dupe or
should be accepted.
2019-01-09 09:51:15 -08:00
Eric House
250583caea log when invite response comes back 2019-01-08 20:34:22 -08:00
Eric House
a665df7840 cleanup: test's done already 2019-01-08 20:31:27 -08:00
Eric House
f18a957ed5 kill progress when owner view goes away
BT Invite progress was sticking around when Board left because it wasn't
foreground.
2019-01-08 20:31:27 -08:00
Eric House
2c73f4ca77 don't handle duplicate invitations in DEBUG case
Was creating a second game in some cases in response to duplicated
invitations. Add a test for forceChannel: if there's already a game with
the same gameID *and* forceChannel assume the invitation is a dupe and
drop it.
2019-01-08 20:02:01 -08:00
Eric House
e0f4a028d1 remove a bunch of unused methods 2019-01-08 19:42:44 -08:00
Eric House
24fad52cd8 use second resolution in bt device display
Useful to see that a scan really did just happen
2019-01-08 11:52:31 -08:00
Eric House
7c7b80deae add net-stats dialog to log-tap games menu
So I don't have to open a game to see e.g. how it's connecting, refactor
the network status stuff so it can be called from both board and
gameslist views. Then add new context menuitem that calls it.
2019-01-08 11:37:57 -08:00
Eric House
e9e03a06a3 show toast when GameLock fails to lock (some cases) 2019-01-08 10:09:43 -08:00
Eric House
4fcc5fd99b turn off faker device (but make easy to enable) 2019-01-08 09:49:10 -08:00
Eric House
c87161307c When rematching an Archived game save in default new-game group 2019-01-08 09:41:23 -08:00
Eric House
7cccd1a1e6 make the fake result random 2019-01-06 17:12:11 -08:00
Eric House
0953772673 cleanup: don't need wrapper around a List<> 2019-01-06 16:58:30 -08:00
Eric House
2a845da9b6 use List instead of array 2019-01-06 16:29:52 -08:00
Eric House
83340567b2 add and implement remove button for btinvite dialog 2019-01-06 15:20:36 -08:00
Eric House
853578eb7d don't drop known BT devices on every scan
Instead, keep them forever (for now), sorted by how long since they were
last seen. A Delete button's probably needed to prevent ex-partners from
sticking around too long. :-)
2019-01-06 14:34:43 -08:00
Eric House
c7f9fc465f persist and display most recent scan time 2019-01-06 13:40:49 -08:00
Eric House
2f508c0b5c persist BT invitee dev scan results
Only launch the scan automatically when the persisted list is empty.
2019-01-06 12:30:31 -08:00
Eric House
3a0e67c7b3 remove unreachable code 2019-01-06 12:05:30 -08:00
Eric House
aecce2826e revert change making userError() take an enum
The set's open-ended on the C side, meaning that an int can't be
converted to an enum reliably. Yay for asserts that caught this.
2019-01-06 11:12:59 -08:00
Eric House
5da32d93f7 fix double-launch of SMSInvite activity
Adding a second permission a while back resulted in two Actions being
received and acted on. Needed instead to group the two and receive a
single Action IFF both were granted.
2019-01-06 10:58:12 -08:00
Eric House
5a64b3b92f Fix problems inviting SMS on emulator
Likely no-ops on real devices
2019-01-06 08:59:38 -08:00
Eric House
105e8e2623 add logging
Keep some stuff added to debug problem with dict checksums on server.
2019-01-05 18:54:48 -08:00
Eric House
cace99818d remove dead code 2019-01-05 18:48:26 -08:00
Eric House
e77b830157 replace assert with what it was to remind me to add 2019-01-01 19:43:44 -08:00
Eric House
e30497f336 catch another exception 2018-12-29 19:56:56 -08:00
Eric House
5a7d5b80da punctuation 2018-12-29 19:52:11 -08:00
Eric House
4a90792dec If game's in Spanish, don't require 7 tiles for trade.
Put up an error message if too many tiles selected for trade
(a condition that couldn't exist when the pool was guaranteed to
have at least 7 in it.) (It's a hack: there's not even an enum
giving Spanish's code, and the lang_locale stuff in info.txt isn't
making it into the .xwd format.)
2018-12-29 18:47:48 -08:00
Eric House
e58f51a523 log, rather than toast, too-frequent debug message 2018-12-28 07:15:40 -08:00
Eric House
bdd92baf55 fix NPE when game isn't connected yet 2018-12-28 07:09:15 -08:00
Eric House
37a853c8a4 oops: use the first *remote* address 2018-12-27 22:10:24 -08:00
Eric House
320db700a9 add opponent address to net stat display
(Debug builds only)
2018-12-27 19:30:34 -08:00
Eric House
24386bd8c9 catch uncaught exception 2018-12-27 18:09:18 -08:00
Eric House
b0805b0b6a use tryLock() to avoid on-ui-thread assertions 2018-12-26 21:41:47 -08:00
Eric House
62cd90c183 remove unused interface 2018-12-26 17:45:42 -08:00
Eric House
0e2af6a836 rewrite GameLock to use wait()/notifyAll()
I've learned a bit about java since writing that class. Should be faster
now without the sleep/polling. Also making it illegal to use blocking
lock() call on UI thread. There may be some assertions to fix in the
next few days.
2018-12-26 17:41:21 -08:00
Eric House
891c73a1b7 make run() wait for gamePtr before starting loop
Was seeing race condition on slowest device where JNIThread init hadn't
finished before the event loop tried to use the gamePtr. So use
wait()/notifyAll() to fix.
2018-12-18 07:07:35 -08:00
Eric House
285f6ad34a revert diagnostic changes 2018-12-17 12:57:17 -08:00
Eric House
e10b17cec0 remove logging; diagnose git/travis problem 2018-12-17 12:35:40 -08:00
Eric House
5467941d45 start stuff when package replaced
And: Don't start the foreground service with its user-visible
notification, as that's too obtrusive and the ACL_CONNECTED stuff seems
to work well enough. Launching timers on a new install is mostly for my
own dev use, but won't hurt user experience either.
2018-12-17 08:26:39 -08:00
Eric House
d8d0065e90 remove some logging 2018-12-17 08:26:00 -08:00
Eric House
3b48ee0ed8 try a different command 2018-12-16 18:48:06 -08:00
Eric House
a2fe00368e more diagnosis 2018-12-16 18:11:09 -08:00
Eric House
b88bbcf443 diagnosing travis build problems 2018-12-16 17:53:18 -08:00
Eric House
d31c2f5513 trying another fix for travis 2018-12-16 17:43:12 -08:00
Eric House
3b0a523499 send successful pings back as they occur
rather than have the user see no feedback until the slowest-to-respond
paired device times out.
2018-12-16 13:34:28 -08:00
Eric House
2d91c133a8 new file (forgotten earlier) 2018-12-16 10:41:04 -08:00
Eric House
67fa27069a add a hint for when scan shows nothing 2018-12-15 07:20:29 -08:00
Eric House
e3f862a6eb shorten timeout for scan/ping 2018-12-15 07:07:54 -08:00
Eric House
e15fb84005 ask for SMS_RECEIVE on startup if have SMS_SEND
It's free (same group) but required on SDK_26 for invitations to work.
2018-12-14 19:33:03 -08:00
Eric House
f7ef1adcb5 add settings button to foreground service notification
On O and beyond it's possible to tweak notification channels separately,
meaning users can hide the new BT-is-running notification and still get
game event notifications. So add a button that takes you to the right
Settings app page.
2018-12-14 17:12:15 -08:00
Eric House
02897f6e36 use separate channel for background service notification
Since on newer OS versions users might want to hide it
2018-12-14 16:00:36 -08:00
Eric House
2ab04901a7 scan all paired devices at same time
One thread per device: brute force, but the threads live a few seconds
and the user just triggered the action so should be ok with it.
2018-12-12 22:32:14 -08:00
Eric House
61dc8e837e cleanup 2018-12-12 22:21:02 -08:00
Eric House
c2f5949623 use AutoCloseable rather than a hack of my own 2018-12-11 15:14:51 -08:00
Eric House
68bb8a1268 fix bluetooth bootstrapping
Separate processing of sockets from accepting them so that when an ACL
CONN notification is received and we open a socket (but don't yet have a
Service running because the ACL thing is most likely for some other app)
we can set it aside to be processed once we do have a service. Use the
same block-until-non-null thing as in RelayService to keep that thread
free of NPEs.
2018-12-11 14:38:40 -08:00
Eric House
48c06acef5 new debug util method 2018-12-11 08:28:07 -08:00