diff options
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt | 1 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt | 1 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/RelayListListener.kt | 1 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt | 2 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt | 72 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt | 11 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt (renamed from android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt) | 7 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt | 21 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt | 3 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt | 2 |
10 files changed, 61 insertions, 60 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt index 35abe6d53a..6b4ad64a72 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt @@ -6,6 +6,7 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.launch import net.mullvad.mullvadvpn.model.GetAccountDataResult import net.mullvad.mullvadvpn.service.MullvadDaemon +import net.mullvad.mullvadvpn.service.SettingsListener import org.joda.time.DateTime import org.joda.time.format.DateTimeFormat diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt index 40a87ac4b6..a658760206 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AppVersionInfoCache.kt @@ -6,6 +6,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import net.mullvad.mullvadvpn.model.AppVersionInfo import net.mullvad.mullvadvpn.service.MullvadDaemon +import net.mullvad.mullvadvpn.service.SettingsListener class AppVersionInfoCache( val context: Context, diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/RelayListListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/RelayListListener.kt index 2012947ed8..af60840cc9 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/RelayListListener.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/RelayListListener.kt @@ -9,6 +9,7 @@ import net.mullvad.mullvadvpn.model.RelaySettings import net.mullvad.mullvadvpn.relaylist.RelayItem import net.mullvad.mullvadvpn.relaylist.RelayList import net.mullvad.mullvadvpn.service.MullvadDaemon +import net.mullvad.mullvadvpn.service.SettingsListener class RelayListListener(val daemon: MullvadDaemon, val settingsListener: SettingsListener) { private val setUpJob = setUp() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt index 75b3e35177..593139a8a9 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt @@ -69,7 +69,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) { return getRelayLocations(daemonInterfaceAddress) } - fun getSettings(): Settings { + fun getSettings(): Settings? { return getSettings(daemonInterfaceAddress) } 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 aba89e9e8a..99c391dedb 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -9,6 +9,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import kotlinx.coroutines.launch +import net.mullvad.mullvadvpn.model.Settings import net.mullvad.mullvadvpn.service.tunnelstate.TunnelStateUpdater import net.mullvad.mullvadvpn.ui.MainActivity import net.mullvad.talpid.TalpidVpnService @@ -28,11 +29,17 @@ class MullvadVpnService : TalpidVpnService() { private var isStopping = false - private var connectionProxy: ConnectionProxy? = null - private var daemon: MullvadDaemon? = null - private var locationInfoCache: LocationInfoCache? = null private var startDaemonJob: Job? = null + private var instance: ServiceInstance? = null + set(value) { + if (field != value) { + field?.onDestroy() + field = value + serviceNotifier.notify(value) + } + } + private lateinit var notificationManager: ForegroundNotificationManager private lateinit var tunnelStateUpdater: TunnelStateUpdater @@ -40,7 +47,7 @@ class MullvadVpnService : TalpidVpnService() { set(value) { field = value - connectionProxy?.let { activeConnectionProxy -> + instance?.connectionProxy?.let { activeConnectionProxy -> when (value) { PendingAction.Connect -> activeConnectionProxy.connect() PendingAction.Disconnect -> activeConnectionProxy.disconnect() @@ -144,15 +151,13 @@ class MullvadVpnService : TalpidVpnService() { private fun startDaemon() = GlobalScope.launch(Dispatchers.Default) { prepareFiles() - val newDaemon = MullvadDaemon(this@MullvadVpnService).apply { + val daemon = MullvadDaemon(this@MullvadVpnService).apply { onSettingsChange.subscribe { settings -> loggedIn = settings?.accountToken != null } onDaemonStopped = { - locationInfoCache?.onDestroy() - connectionProxy?.onDestroy() - serviceNotifier.notify(null) + instance = null if (!isStopping) { restart() @@ -160,29 +165,13 @@ class MullvadVpnService : TalpidVpnService() { } } - val newConnectionProxy = ConnectionProxy(this@MullvadVpnService, newDaemon).apply { - when (pendingAction) { - PendingAction.Connect -> connect() - PendingAction.Disconnect -> disconnect() - null -> {} - } + val settings = daemon.getSettings() - pendingAction = null + if (settings != null) { + setUpInstance(daemon, settings) + } else { + restart() } - - val newLocationInfoCache = - LocationInfoCache(newDaemon, newConnectionProxy, connectivityListener) - - daemon = newDaemon - connectionProxy = newConnectionProxy - locationInfoCache = newLocationInfoCache - - serviceNotifier.notify(ServiceInstance( - newDaemon, - newConnectionProxy, - connectivityListener, - newLocationInfoCache - )) } private fun prepareFiles() { @@ -202,6 +191,29 @@ class MullvadVpnService : TalpidVpnService() { } } + private fun setUpInstance(daemon: MullvadDaemon, settings: Settings) { + val connectionProxy = ConnectionProxy(this@MullvadVpnService, daemon).apply { + when (pendingAction) { + PendingAction.Connect -> connect() + PendingAction.Disconnect -> disconnect() + null -> {} + } + + pendingAction = null + } + + val locationInfoCache = LocationInfoCache(daemon, connectionProxy, connectivityListener) + val settingsListener = SettingsListener(daemon, settings) + + instance = ServiceInstance( + daemon, + connectionProxy, + connectivityListener, + locationInfoCache, + settingsListener + ) + } + private fun stop() { isStopping = true stopDaemon() @@ -210,7 +222,7 @@ class MullvadVpnService : TalpidVpnService() { private fun stopDaemon() { startDaemonJob?.cancel() - daemon?.shutdown() + instance?.daemon?.shutdown() } private fun tearDown() { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt index 8e3e3fbf70..09f30ffa9f 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt @@ -6,5 +6,12 @@ data class ServiceInstance( val daemon: MullvadDaemon, val connectionProxy: ConnectionProxy, val connectivityListener: ConnectivityListener, - val locationInfoCache: LocationInfoCache -) + val locationInfoCache: LocationInfoCache, + val settingsListener: SettingsListener +) { + fun onDestroy() { + connectionProxy.onDestroy() + locationInfoCache.onDestroy() + settingsListener.onDestroy() + } +} diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt index c988f966a0..2441e9f2cc 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt @@ -1,12 +1,11 @@ -package net.mullvad.mullvadvpn.dataproxy +package net.mullvad.mullvadvpn.service import net.mullvad.mullvadvpn.model.RelaySettings import net.mullvad.mullvadvpn.model.Settings -import net.mullvad.mullvadvpn.service.MullvadDaemon import net.mullvad.talpid.util.EventNotifier -class SettingsListener(val daemon: MullvadDaemon) { - var settings: Settings = daemon.getSettings() +class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings) { + var settings: Settings = initialSettings private set(value) { settingsNotifier.notify(value) field = value diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt index 2c40bfa4af..d4c73795c5 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt @@ -8,23 +8,16 @@ import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job -import kotlinx.coroutines.async import kotlinx.coroutines.launch import net.mullvad.mullvadvpn.R -import net.mullvad.mullvadvpn.service.MullvadDaemon class LaunchFragment : ServiceAwareFragment() { private val hasAccountToken = CompletableDeferred<Boolean>() - private var accountTokenCheckJob: Job? = null private lateinit var advanceToNextScreenJob: Job override fun onNewServiceConnection(serviceConnection: ServiceConnection) { - accountTokenCheckJob = checkForAccountToken(serviceConnection.daemon) - } - - override fun onNoServiceConnection() { - accountTokenCheckJob?.cancel() + hasAccountToken.complete(serviceConnection.settingsListener.settings.accountToken != null) } override fun onCreateView( @@ -51,18 +44,6 @@ class LaunchFragment : ServiceAwareFragment() { super.onPause() } - override fun onDestroy() { - accountTokenCheckJob?.cancel() - super.onDestroy() - } - - private fun checkForAccountToken(daemon: MullvadDaemon) = - GlobalScope.async(Dispatchers.Default) { - val settings = daemon.getSettings() - - hasAccountToken.complete(settings.accountToken != null) - } - private fun advanceToNextScreen() = GlobalScope.launch(Dispatchers.Main) { if (hasAccountToken.await()) { advanceToConnectScreen() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt index 116d581c0e..5e7272ebcf 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt @@ -4,7 +4,6 @@ import net.mullvad.mullvadvpn.dataproxy.AccountCache import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache import net.mullvad.mullvadvpn.dataproxy.KeyStatusListener import net.mullvad.mullvadvpn.dataproxy.RelayListListener -import net.mullvad.mullvadvpn.dataproxy.SettingsListener import net.mullvad.mullvadvpn.service.ServiceInstance class ServiceConnection(private val service: ServiceInstance, val mainActivity: MainActivity) { @@ -12,9 +11,9 @@ class ServiceConnection(private val service: ServiceInstance, val mainActivity: val connectionProxy = service.connectionProxy val connectivityListener = service.connectivityListener val locationInfoCache = service.locationInfoCache + val settingsListener = service.settingsListener val keyStatusListener = KeyStatusListener(daemon) - val settingsListener = SettingsListener(daemon) val appVersionInfoCache = AppVersionInfoCache(mainActivity, daemon, settingsListener) val accountCache = AccountCache(settingsListener, daemon) var relayListListener = RelayListListener(daemon, settingsListener) diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt index 96b8500820..5408d7e825 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt @@ -12,10 +12,10 @@ import net.mullvad.mullvadvpn.dataproxy.AccountCache import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache import net.mullvad.mullvadvpn.dataproxy.KeyStatusListener import net.mullvad.mullvadvpn.dataproxy.RelayListListener -import net.mullvad.mullvadvpn.dataproxy.SettingsListener import net.mullvad.mullvadvpn.service.ConnectionProxy import net.mullvad.mullvadvpn.service.LocationInfoCache import net.mullvad.mullvadvpn.service.MullvadDaemon +import net.mullvad.mullvadvpn.service.SettingsListener import net.mullvad.talpid.ConnectivityListener abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceAwareFragment() { |
