3
0
Fork 0

Fix state when connection toggle is tapped twice (#16)

Fixes #15. When tapping the toggle in rapid succession,
`NebulaVpnService.onStartCommand` is called twice, in serial.  This
method includes logic to show an error to the user if they somehow
attempt to connect to a service while already connected.

However, this method of showing an error message (calling
`announceExit`) sends a signal to `MainActivity` telling it the service
has exited, and that it should set the UI state to "Disconnected." It
does not actually disconnect the service at this point, resulting in a
state mismatch in which you cannot actually disconnect the service.

The solution in this commit is to remove this signalling and simply
return out of `onStartCommand` to avoid processing the start request
twice if the site is already running.
This commit is contained in:
John Maguire 2021-05-03 14:56:21 -04:00 committed by GitHub
parent 3123ce5f9a
commit 1d044a1e36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 2 deletions

View File

@ -50,7 +50,12 @@ class NebulaVpnService : VpnService() {
val id = intent?.getStringExtra("id") val id = intent?.getStringExtra("id")
if (running) { if (running) {
// if the UI triggers this twice, check if we are already running the requested site. if not, return an error.
// otherwise, just ignore the request since we handled it the first time.
if (site!!.id != id) {
announceExit(id, "Trying to run nebula but it is already running") announceExit(id, "Trying to run nebula but it is already running")
}
//TODO: can we signal failure? //TODO: can we signal failure?
return super.onStartCommand(intent, flags, startId) return super.onStartCommand(intent, flags, startId)
} }