summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-03-23 16:33:28 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-03-23 16:33:28 -0300
commit7eede2c62d8fb0e7e7cbbb42d2891025705297aa (patch)
tree878024e76667fb59c6fae6685fed638060140126
parent43bf1bdcf423d48e04cf757e01c1434271f30145 (diff)
parent4d3df2de03153300f8f89c58804ed82422c33513 (diff)
downloadmullvadvpn-7eede2c62d8fb0e7e7cbbb42d2891025705297aa.tar.xz
mullvadvpn-7eede2c62d8fb0e7e7cbbb42d2891025705297aa.zip
Merge branch 'change-tunnel-action-intents'
-rw-r--r--CHANGELOG.md2
-rw-r--r--android/src/main/AndroidManifest.xml6
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/ForegroundNotificationManager.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadTileService.kt12
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt49
5 files changed, 48 insertions, 25 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 17867406f5..70d1e6d286 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -48,6 +48,8 @@ Line wrap the file at 100 chars. Th
### Fixed
- Fix bug that could lead to Javascript error dialog to appear upon the desktop app termination.
- Show when the app failed to block all connections after an error in the android and desktop apps.
+- Fix notification action button not working when requesting to connect the tunnel after being
+ disconnected for a long time.
#### macOS
- Fix firewall rules to properly handle DNS requests over TCP when "Local network sharing" is
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