Commit graph

10854 commits

Author SHA1 Message Date
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
f7258f29e8 saw a crash, so gather more info if it happens again. 2018-12-11 14:40:57 -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
Eric House
4f8f14c83b kill thread when wait() fires InterruptedException
Rather than just dropping it and going back to a wait that will likely
last forever. I *think* wait() throwing that exception means the
thread's being killed, in which case the exception should be thrown up
to the containing loop that will then exit.
2018-12-11 06:57:59 -08:00
Eric House
f2322d7e81 cleanup (no behavior change) 2018-12-11 06:57:18 -08:00
Eric House
bfad324bb4 add stop button to notification
And keep the service alive (and the notification present) for 15
minutes.
2018-12-10 19:17:05 -08:00
Eric House
ea03c855e4 cleanup: remove logs and unneeded code
pull too much logging and stuff starting service on going into
background. RelayService isn't that type of Service.
2018-12-10 11:56:40 -08:00
Eric House
e797a28a6d cleanup: use marker instance rather than instanceof 2018-12-10 10:14:17 -08:00
Eric House
0a4b8549cf Don't block UI thread until service instances released
I thought I had to stop using a service instance before returning from
its onDestroy(), but that made the UI incredibly laggy AND appears not
to be necessary. At least in a bit of testing things still work.
2018-12-10 09:45:24 -08:00
Eric House
311768697e Merge branch 'android_branch' of github.com:eehouse/xwords into android_branch 2018-12-09 18:31:15 -08:00
Eric House
fe6996b663 decouple networking threads from RelayService
Oreo's creating a new service instance for every single intent passed to
enqueueWork, meaning a brand new set of threads with a new queue, empty
set of messages to be retried, etc. was created every time, and all
attempts to optimize and retry were broken. So: make the threads a
static singleton that are given a Service instance from onCreate() and
told to drop it from onDestroy(). The threads proceed until they need an
instance, then block until one's available. Seems to work on Oreo and an
older Android as well.
2018-12-09 18:26:59 -08:00
Eric House
a2fa841947 new DebugUtils method 2018-12-09 18:26:59 -08:00
Eric House
c5c081e8bd make RelayService descend from JobIntentService
Required moving most of XWService into a class to which all services
could delegate what they used to inherit.

squash me
2018-12-09 18:26:59 -08:00
Eric House
5f7e4aa1b9 refactor a tiny bit 2018-12-09 18:26:59 -08:00
Eric House
9c501b19a8 get RECEIVE_SMS permission with SEND_SMS
Apparently one of the newer Android SDK levels adds the requirement to
have RECEIVE_SMS permission in order for a broadcast receiver to get
called. Meaning receipt didn't work even if SEND_SMS had been
granted. Since they're both in the same group (for now) the OS will
grant the second silently if the first has been granted, but it still
has to be requested. So request both at the same time. This still leaves
the problem that a user who's never tried to create an SMS game won't
have been asked for either permission and so won't receive SMS
invitations, but fixing that is for a later release.
2018-12-09 18:26:59 -08:00
Eric House
3c861166de use TAG format that doesn't break logcat filtering 2018-12-09 18:26:59 -08:00
Eric House
e30466e096 include flavor in logged TAG
Tired of not being to tell variants' logs apart.
2018-12-09 18:26:59 -08:00
Eric House
7c804b9aad don't drop potential duplicate invitations after 5 seconds
Other code will take care of duplicates. This was meant to avoid a race
condition, for which 5 seconds is enough. Blocking forever complicates
testing.
2018-12-09 18:26:59 -08:00
Eric House
c4ac96ede8 fix NPE (race condition around deletion?)
Check for null. Not sure how I got it there, but there's little harm in
failing silently.
2018-12-09 18:26:59 -08:00
Eric House
95c11eec07 don't try to connect to non-phones
When a device is paired but not a phone (or computer, which is how
tablets identify), don't bother trying to scan it.
2018-12-09 18:26:59 -08:00
Eric House
051aeba57c fix crash by not creating Handler until on UI thread
Receiver is created and installed by a non-UI thread sometimes so can't
create the Handler there. onReceive() is called on an ok thread however
so create it there on demand. Fixes crash that showed when receiving
relay messages in background.
2018-12-09 18:26:59 -08:00
Eric House
68ae9790b4 launch service from ACTION_ACL_CONNECTED
Fire up the receiver thread, and start the service, on receipt of this
ACTION (if they're not already running.) On start, the service takes
over the thread and begins dispatching messages. Works to launch the app
when it's not running and in most cases, though messages received before
the service launches are currently dropped, things seem to work.
2018-12-09 18:26:59 -08:00
Eric House
3dbec328af fix NPE
It happened when too many timers were firing, but I think this code's
better anyway.
2018-12-09 18:26:59 -08:00
Eric House
271d43808f kill foreground service on a timer
reset timer on receiving meaningful data and on moving app to
background. If it fires and we're in background, kill the service.
(There's currently no way to restart it except bringing the app into the
foreground. Fixing that's coming.)
2018-12-09 18:26:59 -08:00
Eric House
c8fe57cc78 make listener thread static
remove relationship with BTService so it can be created independently.
2018-12-09 18:26:59 -08:00
Eric House
e984b10fea remove option of disabling foreground service
Since it's not going to be running all the time any more.
2018-12-09 18:26:59 -08:00
Eric House
d94821feb4 btinvite dlg shows results of scan not all paired devs
Moving toward a better BT invite experience: use BTService to scan for
ourselves on all paired devices, and only allow selecting from among
those on which we're running (and so likely to respond to an
invitation.)
2018-12-09 18:26:59 -08:00
Eric House
ece125c5dc change foreground-service notification text 2018-12-09 18:26:59 -08:00
Eric House
1e42156f4a remove assert
Constructor is called from JNI code and so not on the UI thread.
2018-12-09 18:26:59 -08:00
Eric House
faeaa60f87 replace junit's assert with my own
And have it log before throwing. Should be easier to track down asserts
coming from jni callbacks this way than in the C code.
2018-12-09 18:26:59 -08:00
Eric House
eaae9ed1c1 Always call startForeground after startForegroundService
It's an error to e.g. stopSelf() without having called startForeground,
so do it even when about to exit.
2018-12-09 18:26:59 -08:00
Eric House
0a0bd54ec7 include new permission to install third-party apks
Fixed upgrade of Dbg variant not working on Oreo.
2018-12-09 18:26:59 -08:00
Eric House
8bd4613c2a include X86 native library again
It's a pain to have to change code to run in Genymotion, and to have
upgrade not testable using Genymotion. Consider verting this change
before next release.
2018-12-09 18:26:59 -08:00
Eric House
50f448bb1f fix to contact relay in foreground on Oreo+
Background still needs a lot of work.
2018-12-09 18:26:59 -08:00
Eric House
ff2192f659 fix path name string causing JNI crash on emulator
And catch NPE that also seems to be emulator-only
2018-12-09 18:26:59 -08:00
Eric House
5284dce9b8 decouple networking threads from RelayService
Oreo's creating a new service instance for every single intent passed to
enqueueWork, meaning a brand new set of threads with a new queue, empty
set of messages to be retried, etc. was created every time, and all
attempts to optimize and retry were broken. So: make the threads a
static singleton that are given a Service instance from onCreate() and
told to drop it from onDestroy(). The threads proceed until they need an
instance, then block until one's available. Seems to work on Oreo and an
older Android as well.
2018-12-09 18:21:30 -08:00
Eric House
450c39ed57 new DebugUtils method 2018-12-09 17:11:38 -08:00
Eric House
18e29a74ed make RelayService descend from JobIntentService
Required moving most of XWService into a class to which all services
could delegate what they used to inherit.

squash me
2018-12-07 17:17:01 -08:00
Eric House
e614ba697d refactor a tiny bit 2018-12-07 11:22:07 -08:00
Eric House
b983b5abb6 get RECEIVE_SMS permission with SEND_SMS
Apparently one of the newer Android SDK levels adds the requirement to
have RECEIVE_SMS permission in order for a broadcast receiver to get
called. Meaning receipt didn't work even if SEND_SMS had been
granted. Since they're both in the same group (for now) the OS will
grant the second silently if the first has been granted, but it still
has to be requested. So request both at the same time. This still leaves
the problem that a user who's never tried to create an SMS game won't
have been asked for either permission and so won't receive SMS
invitations, but fixing that is for a later release.
2018-12-07 11:12:49 -08:00