diff --git a/app/src/main/java/org/briarproject/publicmesh/wifidirect/WifiDirectServiceImpl.java b/app/src/main/java/org/briarproject/publicmesh/wifidirect/WifiDirectServiceImpl.java index 16b9789d744c7fad8359a50550c77f45a000b4f9..ca6700f51ed1f1d2afab616e647b508b8c7c38fc 100644 --- a/app/src/main/java/org/briarproject/publicmesh/wifidirect/WifiDirectServiceImpl.java +++ b/app/src/main/java/org/briarproject/publicmesh/wifidirect/WifiDirectServiceImpl.java @@ -360,6 +360,18 @@ class WifiDirectServiceImpl implements WifiDirectService, Service { } private void releaseDiscovery() { + if (connectionInProgress) { + cancelConnection(); + removeGroup(); + } + if (SDK_INT >= 27) requireNonNull(channel).close(); + channel = null; + releaseLock(); + discoveryStatus.postValue(STOPPED); + LOG.info("Released peer discovery"); + } + + private void cancelConnection() { ActionListener listener = new ActionListener() { @Override public void onSuccess() { @@ -374,11 +386,23 @@ class WifiDirectServiceImpl implements WifiDirectService, Service { } }; requireNonNull(wifiP2pManager).cancelConnect(requireNonNull(channel), listener); - if (SDK_INT >= 27) requireNonNull(channel).close(); - channel = null; - releaseLock(); - discoveryStatus.postValue(STOPPED); - LOG.info("Released peer discovery"); + } + + private void removeGroup() { + ActionListener listener = new ActionListener() { + @Override + public void onSuccess() { + LOG.info("Removed group"); + connectionInProgress = false; + } + + @Override + public void onFailure(int reason) { + LOG.info("Failed to remove group: " + reason); + connectionInProgress = false; + } + }; + requireNonNull(wifiP2pManager).removeGroup(requireNonNull(channel), listener); } @Override