diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-01-15 21:20:40 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-04-22 19:16:13 +0000 |
| commit | 17c4882d8b88c703bcbb3154de0319d6168f5050 (patch) | |
| tree | 62510ec45771324ab07eb0966c8f15c8037411f2 /android/src | |
| parent | 93f3f17df9ed2bfd0c67aaf796dfd79901d01241 (diff) | |
| download | mullvadvpn-17c4882d8b88c703bcbb3154de0319d6168f5050.tar.xz mullvadvpn-17c4882d8b88c703bcbb3154de0319d6168f5050.zip | |
Create UI side `VoucherRedeemer`
Diffstat (limited to 'android/src')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/VoucherRedeemer.kt | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/VoucherRedeemer.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/VoucherRedeemer.kt new file mode 100644 index 0000000000..d2378100ea --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/VoucherRedeemer.kt @@ -0,0 +1,43 @@ +package net.mullvad.mullvadvpn.ui.serviceconnection + +import android.os.Messenger +import kotlinx.coroutines.CompletableDeferred +import net.mullvad.mullvadvpn.ipc.Event +import net.mullvad.mullvadvpn.ipc.MessageDispatcher +import net.mullvad.mullvadvpn.ipc.Request +import net.mullvad.mullvadvpn.model.VoucherSubmissionResult + +class VoucherRedeemer(val connection: Messenger, eventDispatcher: MessageDispatcher<Event>) { + private val activeSubmissions = + mutableMapOf<String, CompletableDeferred<VoucherSubmissionResult>>() + + init { + eventDispatcher.registerHandler(Event.VoucherSubmissionResult::class) { event -> + synchronized(this@VoucherRedeemer) { + activeSubmissions.remove(event.voucher)?.complete(event.result) + } + } + } + + suspend fun submit(voucher: String): VoucherSubmissionResult { + val result = CompletableDeferred<VoucherSubmissionResult>() + + synchronized(this) { + activeSubmissions.put(voucher, result) + } + + connection.send(Request.SubmitVoucher(voucher).message) + + return result.await() + } + + fun onDestroy() { + synchronized(this) { + for ((_, submission) in activeSubmissions) { + submission.cancel() + } + + activeSubmissions.clear() + } + } +} |
