diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-08-17 10:34:45 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-08-17 10:34:45 -0300 |
| commit | 23d9025532c8efc423e0095f5c4d3ebeed1e5973 (patch) | |
| tree | 684cc7c954554be6e7bf06d393618613879c9229 /android/src | |
| parent | fc71697292c63c1804475a4d4e8194e9fc025e21 (diff) | |
| parent | 843f6412de01f0754d347e777910c42b5ca5da14 (diff) | |
| download | mullvadvpn-23d9025532c8efc423e0095f5c4d3ebeed1e5973.tar.xz mullvadvpn-23d9025532c8efc423e0095f5c4d3ebeed1e5973.zip | |
Merge branch 'remove-notification-for-new-accounts'
Diffstat (limited to 'android/src')
4 files changed, 46 insertions, 17 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt index 36e09b1721..82db7bc6f2 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt @@ -23,6 +23,9 @@ class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsList val onAccountNumberChange = EventNotifier<String?>(null) val onAccountExpiryChange = EventNotifier<DateTime?>(null) + var newlyCreatedAccount = false + private set + private val jobTracker = JobTracker() private var accountNumber by onAccountNumberChange.notifiable() @@ -36,6 +39,19 @@ class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsList } } + fun createNewAccount(): String? { + newlyCreatedAccount = true + + return daemon.createNewAccount() + } + + fun login(account: String) { + if (account != accountNumber) { + newlyCreatedAccount = false + daemon.setAccount(account) + } + } + fun fetchAccountExpiry() { synchronized(this) { accountNumber?.let { account -> @@ -100,6 +116,10 @@ class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsList accountExpiry = newAccountExpiry oldAccountExpiry = null + if (accountExpiry != null) { + newlyCreatedAccount = false + } + return true } 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 f4fb25a895..17003b5440 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -19,8 +19,6 @@ import net.mullvad.mullvadvpn.service.tunnelstate.TunnelStateUpdater import net.mullvad.mullvadvpn.ui.MainActivity import net.mullvad.talpid.TalpidVpnService import net.mullvad.talpid.util.EventNotifier -import net.mullvad.talpid.util.autoSubscribable -import org.joda.time.DateTime private const val RELAYS_FILE = "relays.json" @@ -49,23 +47,17 @@ class MullvadVpnService : TalpidVpnService() { if (newInstance != oldInstance) { oldInstance?.onDestroy() - accountExpiryNotification = newInstance?.daemon?.let { daemon -> - AccountExpiryNotification(this, daemon) + accountExpiryNotification = newInstance?.let { instance -> + AccountExpiryNotification(this, instance.daemon, instance.accountCache) } - accountExpiryEvents = newInstance?.accountCache?.onAccountExpiryChange - serviceNotifier.notify(newInstance) } } - private var accountExpiryEvents by autoSubscribable<DateTime?>(this, null) { expiry -> - accountExpiryNotification?.accountExpiry = expiry - } - private var accountExpiryNotification by observable<AccountExpiryNotification?>(null) { _, oldNotification, _ -> - oldNotification?.accountExpiry = null + oldNotification?.onDestroy() } private lateinit var keyguardManager: KeyguardManager 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 34ac1d5a7d..ee82610035 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,12 +9,17 @@ import android.net.Uri import kotlin.properties.Delegates.observable import kotlinx.coroutines.delay import net.mullvad.mullvadvpn.R +import net.mullvad.mullvadvpn.service.AccountCache import net.mullvad.mullvadvpn.service.MullvadDaemon import net.mullvad.mullvadvpn.util.JobTracker import org.joda.time.DateTime import org.joda.time.Duration -class AccountExpiryNotification(val context: Context, val daemon: MullvadDaemon) { +class AccountExpiryNotification( + val context: Context, + val daemon: MullvadDaemon, + val accountCache: AccountCache +) { companion object { val NOTIFICATION_ID: Int = 2 val REMAINING_TIME_FOR_REMINDERS = Duration.standardDays(2) @@ -40,11 +45,23 @@ class AccountExpiryNotification(val context: Context, val daemon: MullvadDaemon) } } + init { + accountCache.onAccountExpiryChange.subscribe(this) { newExpiry -> + accountExpiry = newExpiry + } + } + + fun onDestroy() { + accountCache.onAccountNumberChange.unsubscribe(this) + accountExpiry = null + } + private suspend fun update(accountExpiry: DateTime?) { val remainingTime = accountExpiry?.let { expiry -> Duration(DateTime.now(), expiry) } + val closeToExpire = remainingTime?.isShorterThan(REMAINING_TIME_FOR_REMINDERS) ?: false - if (remainingTime != null && remainingTime.isShorterThan(REMAINING_TIME_FOR_REMINDERS)) { - val notification = build(accountExpiry, remainingTime) + if (closeToExpire && !accountCache.newlyCreatedAccount) { + val notification = build(accountExpiry!!, remainingTime!!) channel.notificationManager.notify(NOTIFICATION_ID, notification) diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt index 5d103918d1..2f3efbf9b0 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt @@ -95,7 +95,7 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { scrollToShow(loggingInStatus) val accountToken = jobTracker.runOnBackground { - daemon.createNewAccount() + accountCache.createNewAccount() } if (accountToken == null) { @@ -135,7 +135,7 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { when (accountDataResult) { is GetAccountDataResult.Ok -> { - daemon.setAccount(accountToken) + accountCache.login(accountToken) val expiryString = accountDataResult.accountData.expiry val expiry = DateTime.parse(expiryString, AccountCache.EXPIRY_FORMAT) @@ -147,7 +147,7 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { } } is GetAccountDataResult.RpcError -> { - daemon.setAccount(accountToken) + accountCache.login(accountToken) LoginResult.ExistingAccountWithTime } else -> null |
