From efa387fd7a8e6f99b93ba9939b25301ffc806cf5 Mon Sep 17 00:00:00 2001 From: Mygod Date: Wed, 9 May 2018 18:10:22 -0700 Subject: [PATCH] Fix onServiceDisconnected not called --- .../be/mygod/vpnhotspot/RepeaterFragment.kt | 5 ++--- .../be/mygod/vpnhotspot/RepeaterTileService.kt | 3 ++- .../be/mygod/vpnhotspot/TetheringFragment.kt | 17 +++++------------ .../java/be/mygod/vpnhotspot/client/Client.kt | 2 +- .../vpnhotspot/client/ClientMonitorService.kt | 3 ++- .../util/ServiceForegroundConnector.kt | 2 +- .../main/java/be/mygod/vpnhotspot/util/Utils.kt | 10 ++++++---- 7 files changed, 19 insertions(+), 23 deletions(-) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterFragment.kt index cdbeb54d..e97d8887 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterFragment.kt @@ -137,11 +137,10 @@ class RepeaterFragment : Fragment(), ServiceConnection, Toolbar.OnMenuItemClickL } override fun onServiceDisconnected(name: ComponentName?) { - if (name == ComponentName(requireContext(), ClientMonitorService::class.java)) { - val clients = clients ?: return + val clients = clients + if (clients != null) { this.clients = null clients.clientsChanged -= this - return } val binder = binder ?: return this.binder = null diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterTileService.kt b/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterTileService.kt index ab013c40..ceabc206 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterTileService.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterTileService.kt @@ -11,6 +11,7 @@ import android.service.quicksettings.Tile import android.service.quicksettings.TileService import android.support.annotation.RequiresApi import android.support.v4.content.ContextCompat +import be.mygod.vpnhotspot.util.stopAndUnbind @RequiresApi(24) class RepeaterTileService : TileService(), ServiceConnection { @@ -26,7 +27,7 @@ class RepeaterTileService : TileService(), ServiceConnection { override fun onStopListening() { super.onStopListening() - unbindService(this) + stopAndUnbind(this) } override fun onClick() { diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/TetheringFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/TetheringFragment.kt index dfdb45e6..e11ef8ab 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/TetheringFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/TetheringFragment.kt @@ -370,17 +370,10 @@ class TetheringFragment : Fragment(), ServiceConnection { override fun onServiceDisconnected(name: ComponentName?) { val context = requireContext() - when (name) { - ComponentName(context, TetheringService::class.java) -> { - tetheringBinder?.fragment = null - tetheringBinder = null - context.unregisterReceiver(receiver) - } - ComponentName(context, LocalOnlyHotspotService::class.java) -> { - hotspotBinder?.fragment = null - hotspotBinder = null - } - else -> throw IllegalArgumentException("name") - } + tetheringBinder?.fragment = null + tetheringBinder = null + context.unregisterReceiver(receiver) + hotspotBinder?.fragment = null + hotspotBinder = null } } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/client/Client.kt b/mobile/src/main/java/be/mygod/vpnhotspot/client/Client.kt index 2d796e85..04287cab 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/client/Client.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/client/Client.kt @@ -42,4 +42,4 @@ abstract class Client { return true } override fun hashCode() = Objects.hash(iface, mac, ip) -} \ No newline at end of file +} diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientMonitorService.kt b/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientMonitorService.kt index 51b57b27..38a08ee5 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientMonitorService.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientMonitorService.kt @@ -10,6 +10,7 @@ import be.mygod.vpnhotspot.net.IpNeighbourMonitor import be.mygod.vpnhotspot.net.TetheringManager import be.mygod.vpnhotspot.util.StickyEvent1 import be.mygod.vpnhotspot.util.broadcastReceiver +import be.mygod.vpnhotspot.util.stopAndUnbind class ClientMonitorService : Service(), ServiceConnection, IpNeighbourMonitor.Callback { inner class Binder : android.os.Binder() { @@ -70,7 +71,7 @@ class ClientMonitorService : Service(), ServiceConnection, IpNeighbourMonitor.Ca override fun onDestroy() { unregisterReceiver(receiver) IpNeighbourMonitor.unregisterCallback(this) - unbindService(this) + stopAndUnbind(this) super.onDestroy() } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/util/ServiceForegroundConnector.kt b/mobile/src/main/java/be/mygod/vpnhotspot/util/ServiceForegroundConnector.kt index ceef7daa..cd9194d7 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/util/ServiceForegroundConnector.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/util/ServiceForegroundConnector.kt @@ -30,5 +30,5 @@ class ServiceForegroundConnector(private val host: ServiceConnection, private va } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) - fun onStop() = context.unbindService(host) + fun onStop() = context.stopAndUnbind(host) } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt b/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt index d8ea31b0..0b40129b 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt @@ -1,9 +1,6 @@ package be.mygod.vpnhotspot.util -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.content.IntentFilter +import android.content.* import android.databinding.BindingAdapter import android.support.annotation.DrawableRes import android.util.Log @@ -53,3 +50,8 @@ fun thread(name: String? = null, start: Boolean = true, isDaemon: Boolean = fals if (start) thread.start() return thread } + +fun Context.stopAndUnbind(connection: ServiceConnection) { + connection.onServiceDisconnected(null) + unbindService(connection) +}