diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-04-22 20:32:14 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-04-23 14:04:43 +0000 |
| commit | fd3f5044650b46eefecef0005f109e42e88c43ab (patch) | |
| tree | 2075bbc27ec7a50ce127fce01be922428dc86dc3 /android/src/main | |
| parent | 68befbcd4f832ce4bf4cf47736e7e3c83c0c8c47 (diff) | |
| download | mullvadvpn-fd3f5044650b46eefecef0005f109e42e88c43ab.tar.xz mullvadvpn-fd3f5044650b46eefecef0005f109e42e88c43ab.zip | |
Replace `LocalBinder` usage with service channel
Diffstat (limited to 'android/src/main')
3 files changed, 17 insertions, 36 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt index 102d2b455b..f740b463c6 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -158,7 +158,7 @@ class MullvadVpnService : TalpidVpnService() { Log.d(TAG, "New connection to service") isBound = true - return super.onBind(intent) ?: binder + return super.onBind(intent) ?: endpoint.messenger.binder } override fun onRebind(intent: Intent) { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt index 4d926b1f96..5bf6a1b8f7 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt @@ -10,6 +10,7 @@ import android.net.VpnService import android.os.Build import android.os.Bundle import android.os.IBinder +import android.os.Messenger import android.view.WindowManager import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity @@ -27,7 +28,6 @@ open class MainActivity : FragmentActivity() { val serviceNotifier = EventNotifier<ServiceConnection?>(null) private var isUiVisible = false - private var service: MullvadVpnService.LocalBinder? = null private var visibleSecureScreens = HashSet<Fragment>() private val deviceIsTv by lazy { @@ -49,27 +49,12 @@ open class MainActivity : FragmentActivity() { private val serviceConnectionManager = object : android.content.ServiceConnection { override fun onServiceConnected(className: ComponentName, binder: IBinder) { android.util.Log.d("mullvad", "UI successfully connected to the service") - val localBinder = binder as MullvadVpnService.LocalBinder - - service = localBinder - - localBinder.isUiVisible = isUiVisible - - localBinder.serviceNotifier.subscribe(this@MainActivity) { service -> - android.util.Log.d("mullvad", "UI connection to the service changed: $service") - - serviceConnection = service?.let { safeService -> - ServiceConnection(safeService, ::handleNewServiceConnection).apply { - vpnPermission.onRequest = ::requestVpnPermission - } - } - } + serviceConnection = ServiceConnection(Messenger(binder), ::handleNewServiceConnection) } override fun onServiceDisconnected(className: ComponentName) { android.util.Log.d("mullvad", "UI lost the connection to the service") serviceConnection = null - service = null serviceNotifier.notify(null) } } @@ -127,7 +112,6 @@ open class MainActivity : FragmentActivity() { override fun onStop() { android.util.Log.d("mullvad", "Stoping main activity") isUiVisible = false - service = null unbindService(serviceConnectionManager) super.onStop() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt index 9c80ff61ca..655a26f2d8 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt @@ -8,7 +8,6 @@ import net.mullvad.mullvadvpn.di.SERVICE_CONNECTION_SCOPE import net.mullvad.mullvadvpn.ipc.DispatchingHandler import net.mullvad.mullvadvpn.ipc.Event import net.mullvad.mullvadvpn.ipc.Request -import net.mullvad.mullvadvpn.service.ServiceInstance import org.koin.core.component.KoinApiExtension import org.koin.core.parameter.parametersOf import org.koin.core.qualifier.named @@ -21,7 +20,7 @@ import org.koin.core.scope.get // the service and to get values received from events. @OptIn(KoinApiExtension::class) class ServiceConnection( - private val service: ServiceInstance, + connection: Messenger, onServiceReady: (ServiceConnection) -> Unit ) : KoinScopeComponent { private val dispatcher = DispatchingHandler(Looper.getMainLooper()) { message -> @@ -33,28 +32,26 @@ class ServiceConnection( named(SERVICE_CONNECTION_SCOPE), this ) - val accountCache = AccountCache(service.messenger, dispatcher) - val authTokenCache = AuthTokenCache(service.messenger, dispatcher) - val connectionProxy = ConnectionProxy(service.messenger, dispatcher) - val keyStatusListener = KeyStatusListener(service.messenger, dispatcher) + val accountCache = AccountCache(connection, dispatcher) + val authTokenCache = AuthTokenCache(connection, dispatcher) + val connectionProxy = ConnectionProxy(connection, dispatcher) + val keyStatusListener = KeyStatusListener(connection, dispatcher) val locationInfoCache = LocationInfoCache(dispatcher) - val settingsListener = SettingsListener(service.messenger, dispatcher) - val splitTunneling = get<SplitTunneling>( - parameters = { parametersOf(service.messenger, dispatcher) } - ) - val voucherRedeemer = VoucherRedeemer(service.messenger, dispatcher) - val vpnPermission = VpnPermission(service.messenger, dispatcher) + val settingsListener = SettingsListener(connection, dispatcher) + val splitTunneling = get<SplitTunneling>(parameters = { parametersOf(connection, dispatcher) }) + val voucherRedeemer = VoucherRedeemer(connection, dispatcher) + val vpnPermission = VpnPermission(connection, dispatcher) val appVersionInfoCache = AppVersionInfoCache(dispatcher, settingsListener) - val customDns = CustomDns(service.messenger, settingsListener) - var relayListListener = RelayListListener(service.messenger, dispatcher, settingsListener) + val customDns = CustomDns(connection, settingsListener) + var relayListListener = RelayListListener(connection, dispatcher, settingsListener) init { dispatcher.registerHandler(Event.ListenerReady::class) { _ -> onServiceReady(this@ServiceConnection) } - registerListener() + registerListener(connection) } fun onDestroy() { @@ -74,12 +71,12 @@ class ServiceConnection( relayListListener.onDestroy() } - private fun registerListener() { + private fun registerListener(connection: Messenger) { val listener = Messenger(dispatcher) val request = Request.RegisterListener(listener) try { - service.messenger.send(request.message) + connection.send(request.message) } catch (exception: RemoteException) { Log.e("mullvad", "Failed to register listener for service events", exception) } |
