summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-04-22 20:32:14 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-04-23 14:04:43 +0000
commitfd3f5044650b46eefecef0005f109e42e88c43ab (patch)
tree2075bbc27ec7a50ce127fce01be922428dc86dc3 /android/src/main
parent68befbcd4f832ce4bf4cf47736e7e3c83c0c8c47 (diff)
downloadmullvadvpn-fd3f5044650b46eefecef0005f109e42e88c43ab.tar.xz
mullvadvpn-fd3f5044650b46eefecef0005f109e42e88c43ab.zip
Replace `LocalBinder` usage with service channel
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt20
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnection.kt31
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)
}