diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-03-23 16:33:28 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-03-23 16:33:28 -0300 |
| commit | 7eede2c62d8fb0e7e7cbbb42d2891025705297aa (patch) | |
| tree | 878024e76667fb59c6fae6685fed638060140126 /android/src | |
| parent | 43bf1bdcf423d48e04cf757e01c1434271f30145 (diff) | |
| parent | 4d3df2de03153300f8f89c58804ed82422c33513 (diff) | |
| download | mullvadvpn-7eede2c62d8fb0e7e7cbbb42d2891025705297aa.tar.xz mullvadvpn-7eede2c62d8fb0e7e7cbbb42d2891025705297aa.zip | |
Merge branch 'change-tunnel-action-intents'
Diffstat (limited to 'android/src')
4 files changed, 46 insertions, 25 deletions
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index cbd48f152e..668e3e772a 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -26,6 +26,12 @@ <intent-filter> <action android:name="android.net.VpnService" /> </intent-filter> + <intent-filter> + <action android:name="net.mullvad.mullvadvpn.connect_action" /> + </intent-filter> + <intent-filter> + <action android:name="net.mullvad.mullvadvpn.disconnect_action" /> + </intent-filter> </service> <service android:name="net.mullvad.mullvadvpn.service.MullvadTileService" android:label="@string/app_name" diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ForegroundNotificationManager.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ForegroundNotificationManager.kt index aabd9771a3..8490cb0d50 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ForegroundNotificationManager.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ForegroundNotificationManager.kt @@ -20,8 +20,8 @@ import net.mullvad.talpid.util.EventNotifier val CHANNEL_ID = "vpn_tunnel_status" val FOREGROUND_NOTIFICATION_ID: Int = 1 -val KEY_CONNECT_ACTION = "connect_action" -val KEY_DISCONNECT_ACTION = "disconnect_action" +val KEY_CONNECT_ACTION = "net.mullvad.mullvadvpn.connect_action" +val KEY_DISCONNECT_ACTION = "net.mullvad.mullvadvpn.disconnect_action" class ForegroundNotificationManager( val service: MullvadVpnService, diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt index e8eb8a3a82..296b324332 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt @@ -53,15 +53,15 @@ class MullvadTileService : TileService() { override fun onClick() { super.onClick() - val tunnelActionKey = if (secured) { - KEY_DISCONNECT_ACTION + val intent = Intent(this, MullvadVpnService::class.java) + + if (secured) { + intent.action = KEY_DISCONNECT_ACTION } else { - KEY_CONNECT_ACTION + intent.action = KEY_CONNECT_ACTION } - val intent = Intent(tunnelActionKey).setPackage("net.mullvad.mullvadvpn") - - sendBroadcast(intent) + startService(intent) } override fun onStopListening() { 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 49a58662d1..20c2545e12 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -20,6 +20,11 @@ private const val RELAYS_FILE = "relays.json" private const val RELAYS_PATH = "/data/data/net.mullvad.mullvadvpn/relays.json" class MullvadVpnService : TalpidVpnService() { + private enum class PendingAction { + Connect, + Disconnect, + } + private val binder = LocalBinder() private val serviceNotifier = EventNotifier<ServiceInstance?>(null) @@ -32,15 +37,18 @@ class MullvadVpnService : TalpidVpnService() { private lateinit var notificationManager: ForegroundNotificationManager private lateinit var tunnelStateUpdater: TunnelStateUpdater - var shouldConnect = false + private var pendingAction: PendingAction? = null set(value) { field = value - if (value == true) { - daemon?.apply { - connect() - field = false + connectionProxy?.let { activeConnectionProxy -> + when (value) { + PendingAction.Connect -> activeConnectionProxy.connect() + PendingAction.Disconnect -> activeConnectionProxy.disconnect() + null -> {} } + + field = null } } @@ -65,6 +73,19 @@ class MullvadVpnService : TalpidVpnService() { setUp() } + override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { + val startResult = super.onStartCommand(intent, flags, startId) + val action = intent?.action + + if (action == VpnService.SERVICE_INTERFACE || action == KEY_CONNECT_ACTION) { + pendingAction = PendingAction.Connect + } else if (action == KEY_DISCONNECT_ACTION) { + pendingAction = PendingAction.Disconnect + } + + return startResult + } + override fun onBind(intent: Intent): IBinder { bindCount += 1 @@ -105,16 +126,6 @@ class MullvadVpnService : TalpidVpnService() { } } - override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - val startResult = super.onStartCommand(intent, flags, startId) - - if (intent?.getAction() == VpnService.SERVICE_INTERFACE) { - shouldConnect = true - } - - return startResult - } - private fun setUp() { startDaemonJob?.cancel() startDaemonJob = startDaemon() @@ -143,9 +154,13 @@ class MullvadVpnService : TalpidVpnService() { } val newConnectionProxy = ConnectionProxy(this@MullvadVpnService, newDaemon).apply { - if (shouldConnect) { - connect() + when (pendingAction) { + PendingAction.Connect -> connect() + PendingAction.Disconnect -> disconnect() + null -> {} } + + pendingAction = null } daemon = newDaemon |
