summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-04-14 11:44:48 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-04-14 11:44:48 -0300
commitdd7d07232738dc1bfedf3a6e2b189ac68cf35656 (patch)
treea075c51f6cea42e1b40348a4f771241b1ff8cb7f
parente1406328ef3a6717048d0449f552f5fe63d0567d (diff)
parente456e9fbd900230a5ca567e5e7ebf171358853de (diff)
downloadmullvadvpn-dd7d07232738dc1bfedf3a6e2b189ac68cf35656.tar.xz
mullvadvpn-dd7d07232738dc1bfedf3a6e2b189ac68cf35656.zip
Merge branch 'update-account-expiry-notification'
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt23
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt25
2 files changed, 24 insertions, 24 deletions
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 2d057e2c97..520952627d 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -55,21 +55,11 @@ class MullvadVpnService : TalpidVpnService() {
private var setUpDaemonJob: Job? = null
- private var instance by observable<ServiceInstance?>(null) { _, oldInstance, newInstance ->
- if (newInstance != oldInstance) {
- accountExpiryNotification = newInstance?.let { instance ->
- AccountExpiryNotification(this, instance.daemon, endpoint.accountCache)
- }
-
- serviceNotifier.notify(newInstance)
- }
- }
-
- private var accountExpiryNotification by observable<AccountExpiryNotification?>(null) {
- _, oldNotification, _ ->
- oldNotification?.onDestroy()
+ private var instance by observable<ServiceInstance?>(null) { _, _, newInstance ->
+ serviceNotifier.notifyIfChanged(newInstance)
}
+ private lateinit var accountExpiryNotification: AccountExpiryNotification
private lateinit var daemonInstance: DaemonInstance
private lateinit var endpoint: ServiceEndpoint
private lateinit var keyguardManager: KeyguardManager
@@ -122,6 +112,12 @@ class MullvadVpnService : TalpidVpnService() {
accountNumberEvents = endpoint.settingsListener.accountNumberNotifier
}
+ accountExpiryNotification = AccountExpiryNotification(
+ this,
+ daemonInstance.intermittentDaemon,
+ endpoint.accountCache
+ )
+
daemonInstance.apply {
intermittentDaemon.registerListener(this@MullvadVpnService) { daemon ->
handleDaemonInstance(daemon)
@@ -192,6 +188,7 @@ class MullvadVpnService : TalpidVpnService() {
override fun onDestroy() {
Log.d(TAG, "Service has stopped")
state = State.Stopped
+ accountExpiryNotification.onDestroy()
notificationManager.onDestroy()
daemonInstance.onDestroy()
instance = null
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt
index 8e74b8de7b..049dd68d0a 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt
@@ -9,15 +9,17 @@ import android.net.Uri
import kotlin.properties.Delegates.observable
import kotlinx.coroutines.delay
import net.mullvad.mullvadvpn.R
+import net.mullvad.mullvadvpn.model.LoginStatus
import net.mullvad.mullvadvpn.service.MullvadDaemon
import net.mullvad.mullvadvpn.service.endpoint.AccountCache
+import net.mullvad.mullvadvpn.util.Intermittent
import net.mullvad.mullvadvpn.util.JobTracker
import org.joda.time.DateTime
import org.joda.time.Duration
class AccountExpiryNotification(
val context: Context,
- val daemon: MullvadDaemon,
+ val daemon: Intermittent<MullvadDaemon>,
val accountCache: AccountCache
) {
companion object {
@@ -39,29 +41,30 @@ class AccountExpiryNotification(
NotificationManager.IMPORTANCE_HIGH
)
- var accountExpiry by observable<DateTime?>(null) { _, oldValue, newValue ->
+ var loginStatus by observable<LoginStatus?>(null) { _, oldValue, newValue ->
if (oldValue != newValue) {
jobTracker.newUiJob("update") { update(newValue) }
}
}
init {
- accountCache.onAccountExpiryChange.subscribe(this) { newExpiry ->
- accountExpiry = newExpiry
+ accountCache.onLoginStatusChange.subscribe(this) { newStatus ->
+ loginStatus = newStatus
}
}
fun onDestroy() {
accountCache.onAccountNumberChange.unsubscribe(this)
- accountExpiry = null
+ loginStatus = null
}
- private suspend fun update(accountExpiry: DateTime?) {
- val remainingTime = accountExpiry?.let { expiry -> Duration(DateTime.now(), expiry) }
+ private suspend fun update(loginStatus: LoginStatus?) {
+ val remainingTime = loginStatus?.expiry?.let { expiry -> Duration(DateTime.now(), expiry) }
val closeToExpire = remainingTime?.isShorterThan(REMAINING_TIME_FOR_REMINDERS) ?: false
+ val accountIsNew = loginStatus?.isNewAccount ?: false
- if (closeToExpire && !accountCache.newlyCreatedAccount) {
- val notification = build(accountExpiry!!, remainingTime!!)
+ if (closeToExpire && !accountIsNew) {
+ val notification = build(loginStatus!!.expiry!!, remainingTime!!)
channel.notificationManager.notify(NOTIFICATION_ID, notification)
@@ -74,12 +77,12 @@ class AccountExpiryNotification(
private suspend fun scheduleUpdate() {
delay(TIME_BETWEEN_CHECKS)
- update(accountExpiry)
+ update(loginStatus)
}
private suspend fun build(expiry: DateTime, remainingTime: Duration): Notification {
val url = jobTracker.runOnBackground {
- Uri.parse("$buyMoreTimeUrl?token=${daemon.getWwwAuthToken()}")
+ Uri.parse("$buyMoreTimeUrl?token=${daemon.await().getWwwAuthToken()}")
}
val intent = Intent(Intent.ACTION_VIEW, url)