diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-04-14 11:44:48 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-04-14 11:44:48 -0300 |
| commit | dd7d07232738dc1bfedf3a6e2b189ac68cf35656 (patch) | |
| tree | a075c51f6cea42e1b40348a4f771241b1ff8cb7f /android/src | |
| parent | e1406328ef3a6717048d0449f552f5fe63d0567d (diff) | |
| parent | e456e9fbd900230a5ca567e5e7ebf171358853de (diff) | |
| download | mullvadvpn-dd7d07232738dc1bfedf3a6e2b189ac68cf35656.tar.xz mullvadvpn-dd7d07232738dc1bfedf3a6e2b189ac68cf35656.zip | |
Merge branch 'update-account-expiry-notification'
Diffstat (limited to 'android/src')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt | 23 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/notifications/AccountExpiryNotification.kt | 25 |
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) |
