summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md3
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt15
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt16
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt6
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt17
5 files changed, 35 insertions, 22 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 65f1b4c465..cc86e5198d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,6 +29,9 @@ Line wrap the file at 100 chars. Th
### Removed
- Remove support for `MULLVAD_LOCALE` environment variable.
+#### Android
+- Remove connect action button in notification when logged out.
+
### Fixed
- Fix `mullvad relay update` to trigger a relay list download even if the existing cache is new.
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt
index dfb153bbc2..b4783c4161 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ForegroundNotificationManager.kt
@@ -128,6 +128,11 @@ class ForegroundNotificationManager(val service: Service, val connectionProxy: C
var onConnect: (() -> Unit)? = null
var onDisconnect: (() -> Unit)? = null
+ var loggedIn = false
+ set(value) {
+ field = value
+ updateNotification()
+ }
init {
if (Build.VERSION.SDK_INT >= 26) {
@@ -183,13 +188,17 @@ class ForegroundNotificationManager(val service: Service, val connectionProxy: C
val pendingIntent =
PendingIntent.getActivity(service, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)
- return NotificationCompat.Builder(service, CHANNEL_ID)
+ val builder = NotificationCompat.Builder(service, CHANNEL_ID)
.setSmallIcon(R.drawable.notification)
.setColor(service.getColor(R.color.colorPrimary))
.setContentTitle(service.getString(notificationText))
.setContentIntent(pendingIntent)
- .addAction(buildTunnelAction())
- .build()
+
+ if (loggedIn) {
+ builder.addAction(buildTunnelAction())
+ }
+
+ return builder.build()
}
private fun buildTunnelAction(): NotificationCompat.Action {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt
index 940fabbf77..a906b9a9c9 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt
@@ -9,18 +9,22 @@ import net.mullvad.mullvadvpn.model.RelayList
import net.mullvad.mullvadvpn.model.RelaySettingsUpdate
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.mullvadvpn.model.TunnelState
+import net.mullvad.mullvadvpn.util.EventNotifier
class MullvadDaemon(val vpnService: MullvadVpnService) {
- init {
- System.loadLibrary("mullvad_jni")
- initialize(vpnService)
- }
+ val onSettingsChange = EventNotifier<Settings?>(null)
var onKeygenEvent: ((KeygenEvent) -> Unit)? = null
var onRelayListChange: ((RelayList) -> Unit)? = null
- var onSettingsChange: ((Settings) -> Unit)? = null
var onTunnelStateChange: ((TunnelState) -> Unit)? = null
+ init {
+ System.loadLibrary("mullvad_jni")
+ initialize(vpnService)
+
+ onSettingsChange.notify(getSettings())
+ }
+
external fun connect()
external fun disconnect()
external fun generateWireguardKey(): KeygenEvent?
@@ -48,7 +52,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) {
}
private fun notifySettingsEvent(settings: Settings) {
- onSettingsChange?.invoke(settings)
+ onSettingsChange.notify(settings)
}
private fun notifyTunnelStateEvent(event: TunnelState) {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt
index 08fde91f95..8ccad4f02e 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt
@@ -105,7 +105,11 @@ class MullvadVpnService : VpnService() {
private fun startDaemon() = GlobalScope.async(Dispatchers.Default) {
created.await()
ApiRootCaFile().extract(application)
- MullvadDaemon(this@MullvadVpnService)
+ MullvadDaemon(this@MullvadVpnService).apply {
+ onSettingsChange.subscribe { settings ->
+ notificationManager.loggedIn = settings?.accountToken != null
+ }
+ }
}
private fun startNotificationManager(): ForegroundNotificationManager {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt
index 63b589fbca..267f596e3b 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt
@@ -14,6 +14,7 @@ class SettingsListener(val parentActivity: MainActivity) {
private val setUpJob = setUp()
+ private var listenerId = -1
private var settings: Settings? = null
var onAccountNumberChange: ((String?) -> Unit)? = null
@@ -35,24 +36,16 @@ class SettingsListener(val parentActivity: MainActivity) {
fun onDestroy() {
setUpJob.cancel()
- if (::daemon.isInitialized) {
- daemon.onSettingsChange = null
+ if (listenerId != -1) {
+ daemon.onSettingsChange.unsubscribe(listenerId)
}
}
private fun setUp() = GlobalScope.launch(Dispatchers.Default) {
daemon = parentActivity.daemon.await()
- daemon.onSettingsChange = { settings -> handleNewSettings(settings) }
- fetchInitialSettings()
- }
-
- private fun fetchInitialSettings() {
- val initialSettings = daemon!!.getSettings()
- synchronized(this) {
- if (settings == null) {
- handleNewSettings(initialSettings)
- }
+ listenerId = daemon.onSettingsChange.subscribe { maybeSettings ->
+ maybeSettings?.let { settings -> handleNewSettings(settings) }
}
}