diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-09-30 10:15:50 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-09-30 10:15:50 -0300 |
| commit | 07cf9f85a2bc450fd73c7f363d55f06cd506a99e (patch) | |
| tree | a40701982f9bb1114303d8c26a6b60e772d94ab9 /android | |
| parent | dca3a5d66da4228708f09ece7cfc4f6875efa4d7 (diff) | |
| parent | 47e5b5ab3ebc9849b960d38ac9ca02ea1c4765ab (diff) | |
| download | mullvadvpn-07cf9f85a2bc450fd73c7f363d55f06cd506a99e.tar.xz mullvadvpn-07cf9f85a2bc450fd73c7f363d55f06cd506a99e.zip | |
Merge branch 'no-action-button-when-logged-out'
Diffstat (limited to 'android')
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) } } } |
