summaryrefslogtreecommitdiffhomepage
path: root/android/app
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-06-18 17:53:14 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-06-19 17:54:02 +0200
commitbd29196ef69edde905d886962ffc44917a03b5a0 (patch)
treef901c2d5e58746436cd494706ec1961f4b7375bb /android/app
parentb0335d5157e58a91f7d434aed3761e9dc81aba55 (diff)
downloadmullvadvpn-bd29196ef69edde905d886962ffc44917a03b5a0.tar.xz
mullvadvpn-bd29196ef69edde905d886962ffc44917a03b5a0.zip
Show disconnect button when connected in welcome screen
Diffstat (limited to 'android/app')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt14
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt32
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt6
3 files changed, 32 insertions, 20 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt
index 22ab725e7f..58e5d4f8b3 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt
@@ -48,7 +48,6 @@ import net.mullvad.mullvadvpn.compose.state.OutOfTimeUiState
import net.mullvad.mullvadvpn.compose.test.OUT_OF_TIME_SCREEN_TITLE_TEST_TAG
import net.mullvad.mullvadvpn.compose.transitions.HomeTransition
import net.mullvad.mullvadvpn.compose.util.CollectSideEffectWithLifecycle
-import net.mullvad.mullvadvpn.lib.model.ActionAfterDisconnect
import net.mullvad.mullvadvpn.lib.model.ErrorState
import net.mullvad.mullvadvpn.lib.model.ErrorStateCause
import net.mullvad.mullvadvpn.lib.model.TunnelState
@@ -268,7 +267,7 @@ private fun ButtonPanel(
) {
Column {
- if (state.tunnelState.showDisconnectButton()) {
+ if (state.tunnelState.isSecured()) {
NegativeButton(
onClick = onDisconnectClick,
text = stringResource(id = R.string.disconnect),
@@ -321,17 +320,6 @@ private fun ButtonPanel(
}
}
-private fun TunnelState.showDisconnectButton(): Boolean =
- when (this) {
- is TunnelState.Disconnected -> false
- is TunnelState.Connecting,
- is TunnelState.Connected -> true
- is TunnelState.Disconnecting -> {
- this.actionAfterDisconnect != ActionAfterDisconnect.Nothing
- }
- is TunnelState.Error -> this.errorState.isBlocking
- }
-
private fun TunnelState.enableSitePaymentButton(): Boolean = this is TunnelState.Disconnected
private fun TunnelState.enableRedeemButton(): Boolean =
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt
index 71594527fd..f233358bfc 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt
@@ -35,6 +35,7 @@ import com.ramcosta.composedestinations.result.NavResult
import com.ramcosta.composedestinations.result.ResultRecipient
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.NavGraphs
+import net.mullvad.mullvadvpn.compose.button.NegativeButton
import net.mullvad.mullvadvpn.compose.button.RedeemVoucherButton
import net.mullvad.mullvadvpn.compose.button.SitePaymentButton
import net.mullvad.mullvadvpn.compose.component.CopyAnimatedIconButton
@@ -89,7 +90,8 @@ private fun PreviewWelcomeScreen() {
onAccountClick = {},
onPurchaseBillingProductClick = { _ -> },
navigateToDeviceInfoDialog = {},
- navigateToVerificationPendingDialog = {}
+ navigateToVerificationPendingDialog = {},
+ onDisconnectClick = {}
)
}
}
@@ -152,6 +154,7 @@ fun Welcome(
onPurchaseBillingProductClick = { productId ->
navigator.navigate(PaymentDestination(productId), onlyIfResumed = true)
},
+ onDisconnectClick = vm::onDisconnectClick,
navigateToVerificationPendingDialog =
dropUnlessResumed { navigator.navigate(VerificationPendingDialogDestination) }
)
@@ -165,6 +168,7 @@ fun WelcomeScreen(
onSettingsClick: () -> Unit,
onAccountClick: () -> Unit,
onPurchaseBillingProductClick: (productId: ProductId) -> Unit,
+ onDisconnectClick: () -> Unit,
navigateToDeviceInfoDialog: () -> Unit,
navigateToVerificationPendingDialog: () -> Unit
) {
@@ -193,14 +197,16 @@ fun WelcomeScreen(
Spacer(modifier = Modifier.weight(1f))
- // Payment button area
- PaymentPanel(
+ // Button area
+ ButtonPanel(
+ showDisconnectButton = state.tunnelState.isSecured(),
showSitePayment = state.showSitePayment,
billingPaymentState = state.billingPaymentState,
onSitePaymentClick = onSitePaymentClick,
onRedeemVoucherClick = onRedeemVoucherClick,
onPurchaseBillingProductClick = onPurchaseBillingProductClick,
- onPaymentInfoClick = navigateToVerificationPendingDialog
+ onPaymentInfoClick = navigateToVerificationPendingDialog,
+ onDisconnectClick = onDisconnectClick
)
}
}
@@ -326,16 +332,30 @@ fun DeviceNameRow(deviceName: String?, navigateToDeviceInfoDialog: () -> Unit) {
}
@Composable
-private fun PaymentPanel(
+private fun ButtonPanel(
+ showDisconnectButton: Boolean,
showSitePayment: Boolean,
billingPaymentState: PaymentState?,
onSitePaymentClick: () -> Unit,
onRedeemVoucherClick: () -> Unit,
onPurchaseBillingProductClick: (productId: ProductId) -> Unit,
- onPaymentInfoClick: () -> Unit
+ onPaymentInfoClick: () -> Unit,
+ onDisconnectClick: () -> Unit
) {
Column(modifier = Modifier.fillMaxWidth().padding(top = Dimens.mediumPadding)) {
Spacer(modifier = Modifier.padding(top = Dimens.screenVerticalMargin))
+ if (showDisconnectButton) {
+ NegativeButton(
+ onClick = onDisconnectClick,
+ text = stringResource(id = R.string.disconnect),
+ modifier =
+ Modifier.padding(
+ start = Dimens.sideMargin,
+ end = Dimens.sideMargin,
+ bottom = Dimens.buttonSpacing
+ )
+ )
+ }
billingPaymentState?.let {
PlayPayment(
billingPaymentState = billingPaymentState,
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt
index 9322ef9ce4..f987f16dc9 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/WelcomeViewModel.kt
@@ -28,7 +28,7 @@ class WelcomeViewModel(
private val accountRepository: AccountRepository,
deviceRepository: DeviceRepository,
private val paymentUseCase: PaymentUseCase,
- connectionProxy: ConnectionProxy,
+ private val connectionProxy: ConnectionProxy,
private val pollAccountExpiry: Boolean = true,
private val isPlayBuild: Boolean
) : ViewModel() {
@@ -78,6 +78,10 @@ class WelcomeViewModel(
}
}
+ fun onDisconnectClick() {
+ viewModelScope.launch { connectionProxy.disconnect() }
+ }
+
private fun verifyPurchases() {
viewModelScope.launch {
if (paymentUseCase.verifyPurchases().isSuccess()) {