summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-09-30 10:15:50 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-09-30 10:15:50 -0300
commit07cf9f85a2bc450fd73c7f363d55f06cd506a99e (patch)
treea40701982f9bb1114303d8c26a6b60e772d94ab9 /android
parentdca3a5d66da4228708f09ece7cfc4f6875efa4d7 (diff)
parent47e5b5ab3ebc9849b960d38ac9ca02ea1c4765ab (diff)
downloadmullvadvpn-07cf9f85a2bc450fd73c7f363d55f06cd506a99e.tar.xz
mullvadvpn-07cf9f85a2bc450fd73c7f363d55f06cd506a99e.zip
Merge branch 'no-action-button-when-logged-out'
Diffstat (limited to 'android')
-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
4 files changed, 32 insertions, 22 deletions
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) }
}
}