diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt index fe7ddb75e9cc..c4a733d91987 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt @@ -49,7 +49,7 @@ class ServiceEndpoint( val locationInfoCache = LocationInfoCache(this) val relayListListener = RelayListListener(this) val splitTunneling = SplitTunneling(SplitTunnelingPersistence(context), this) - val voucherRedeemer = VoucherRedeemer(this) + val voucherRedeemer = VoucherRedeemer(this, accountCache) private val deviceRepositoryBackend = DaemonDeviceDataSource(this) diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/VoucherRedeemer.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/VoucherRedeemer.kt index a7003d688832..e7ecf5807d3f 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/VoucherRedeemer.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/VoucherRedeemer.kt @@ -6,10 +6,16 @@ import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ClosedReceiveChannelException import kotlinx.coroutines.channels.actor import kotlinx.coroutines.channels.trySendBlocking +import net.mullvad.mullvadvpn.lib.common.util.parseAsDateTime import net.mullvad.mullvadvpn.lib.ipc.Event import net.mullvad.mullvadvpn.lib.ipc.Request +import net.mullvad.mullvadvpn.model.AccountExpiry +import net.mullvad.mullvadvpn.model.VoucherSubmissionResult -class VoucherRedeemer(private val endpoint: ServiceEndpoint) { +class VoucherRedeemer( + private val endpoint: ServiceEndpoint, + private val accountCache: AccountCache +) { private val daemon get() = endpoint.intermittentDaemon @@ -31,6 +37,15 @@ class VoucherRedeemer(private val endpoint: ServiceEndpoint) { for (voucher in channel) { val result = daemon.await().submitVoucher(voucher) + // Let AccountCache know about the new expiry + if (result is VoucherSubmissionResult.Ok) { + val newExpiry = result.submission.newExpiry.parseAsDateTime() + if (newExpiry != null) { + accountCache.onAccountExpiryChange.notify( + AccountExpiry.Available(newExpiry) + ) + } + } endpoint.sendEvent(Event.VoucherSubmissionResult(voucher, result)) } } catch (exception: ClosedReceiveChannelException) {