diff options
| author | David Göransson <david.goransson@mullvad.net> | 2024-06-04 15:50:18 +0200 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2024-06-11 09:54:58 +0200 |
| commit | d7b21615b40c69ccd01a27cb490e1a480eec7ac3 (patch) | |
| tree | 9793c26b440991f2d1c5d015d39cdfe3d592d701 /android/app/src/main | |
| parent | f6e490f7bedb0b4f4102623288c77ef54f7fe469 (diff) | |
| download | mullvadvpn-d7b21615b40c69ccd01a27cb490e1a480eec7ac3.tar.xz mullvadvpn-d7b21615b40c69ccd01a27cb490e1a480eec7ac3.zip | |
Prevent loading when logging out
Diffstat (limited to 'android/app/src/main')
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt | 8 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt | 25 |
2 files changed, 26 insertions, 7 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt index 4d19095a6e..d78592775b 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt @@ -55,6 +55,7 @@ import net.mullvad.mullvadvpn.compose.transitions.SlideInFromBottomTransition import net.mullvad.mullvadvpn.compose.util.LaunchedEffectCollect import net.mullvad.mullvadvpn.compose.util.SecureScreenWhileInView import net.mullvad.mullvadvpn.compose.util.createCopyToClipboardHandle +import net.mullvad.mullvadvpn.lib.model.AccountNumber import net.mullvad.mullvadvpn.lib.payment.model.PaymentProduct import net.mullvad.mullvadvpn.lib.payment.model.PaymentStatus import net.mullvad.mullvadvpn.lib.payment.model.ProductId @@ -76,7 +77,7 @@ private fun PreviewAccountScreen() { state = AccountUiState( deviceName = "Test Name", - accountNumber = "1234123412341234", + accountNumber = AccountNumber("1234123412341234"), accountExpiry = null, showSitePayment = true, billingPaymentState = @@ -201,7 +202,10 @@ fun AccountScreen( onInfoClick = navigateToDeviceInfo ) - AccountNumberRow(accountNumber = state.accountNumber ?: "", onCopyAccountNumber) + AccountNumberRow( + accountNumber = state.accountNumber?.value ?: "", + onCopyAccountNumber + ) PaidUntilRow(accountExpiry = state.accountExpiry) } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt index 0a497c22f6..a42003d6e2 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt @@ -4,13 +4,21 @@ import android.app.Activity import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterIsInstance +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import net.mullvad.mullvadvpn.compose.state.PaymentState +import net.mullvad.mullvadvpn.lib.model.AccountData +import net.mullvad.mullvadvpn.lib.model.AccountNumber +import net.mullvad.mullvadvpn.lib.model.DeviceState import net.mullvad.mullvadvpn.lib.model.WebsiteAuthToken import net.mullvad.mullvadvpn.lib.payment.model.ProductId import net.mullvad.mullvadvpn.lib.shared.AccountRepository @@ -30,13 +38,13 @@ class AccountViewModel( val uiState: StateFlow<AccountUiState> = combine( - deviceRepository.deviceState, - accountRepository.accountData, + deviceRepository.deviceState.filterIsInstance<DeviceState.LoggedIn>(), + accountData(), paymentUseCase.paymentAvailability ) { deviceState, accountData, paymentAvailability -> AccountUiState( - deviceName = deviceState?.displayName() ?: "", - accountNumber = deviceState?.token()?.value ?: "", + deviceName = deviceState.device.displayName(), + accountNumber = deviceState.accountNumber, accountExpiry = accountData?.expiryDate, showSitePayment = !isPlayBuild, billingPaymentState = paymentAvailability?.toPaymentState() @@ -50,6 +58,13 @@ class AccountViewModel( fetchPaymentAvailability() } + private fun accountData(): Flow<AccountData?> = + // Ignore nulls expect first, to avoid loading when logging out. + accountRepository.accountData + .filterNotNull() + .onStart<AccountData?> { emit(accountRepository.accountData.value) } + .distinctUntilChanged() + fun onManageAccountClick() { viewModelScope.launch { accountRepository.getWebsiteAuthToken()?.let { wwwAuthToken -> @@ -115,7 +130,7 @@ class AccountViewModel( data class AccountUiState( val deviceName: String?, - val accountNumber: String?, + val accountNumber: AccountNumber?, val accountExpiry: DateTime?, val showSitePayment: Boolean, val billingPaymentState: PaymentState? = null, |
