summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2024-06-17 11:23:16 +0200
committerAlbin <albin@mullvad.net>2024-06-17 11:23:16 +0200
commit8eeefcb3fd956816e29c98b937168799ea52f204 (patch)
tree04d94b1f78d655fe0e131296014e7046a03e94c5
parent778e5297430a1bdbec94acd67dc98bcfa2703596 (diff)
parent81761886c557b72098cde5906a4847f3fcd8171d (diff)
downloadmullvadvpn-8eeefcb3fd956816e29c98b937168799ea52f204.tar.xz
mullvadvpn-8eeefcb3fd956816e29c98b937168799ea52f204.zip
Merge branch 'service-killed-if-user-navigates-up-twice-quickly-from-droid-963'
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ContentBlockersInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CreateCustomListDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CustomDnsInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeleteCustomListConfirmationDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceNameInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DiscardChangesDialog.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DnsDialog.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/LocalNetworkSharingInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MalwareInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MtuDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ObfuscationInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/QuantumResistanceInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RemoveDeviceConfirmationDialog.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ReportProblemNoEmailDialog.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIpOverridesConfirmationDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ServerIpOverridesInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/UdpOverTcpPortInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/WireguardPortInfoDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/payment/VerificationPendingDialog.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt19
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt17
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListLocationsScreen.kt14
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt23
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt22
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreen.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt24
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ImportOverridesByTextScreen.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/NoDaemonScreen.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/OutOfTimeScreen.kt13
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ReportProblemScreen.kt10
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt28
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt19
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt21
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt63
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/WelcomeScreen.kt23
-rw-r--r--android/buildSrc/src/main/kotlin/Versions.kt2
-rw-r--r--android/gradle/verification-metadata.xml368
43 files changed, 441 insertions, 324 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ContentBlockersInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ContentBlockersInfoDialog.kt
index 145208ce16..09e3d0fa6b 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ContentBlockersInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ContentBlockersInfoDialog.kt
@@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.compose.dialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.spec.DestinationStyle
@@ -24,6 +25,6 @@ fun ContentBlockersInfoDialog(navigator: DestinationsNavigator) {
stringResource(id = R.string.settings_changes_effect_warning_content_blocker)
)
},
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CreateCustomListDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CreateCustomListDialog.kt
index 90e82e1fbf..d6eb004322 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CreateCustomListDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CreateCustomListDialog.kt
@@ -14,6 +14,7 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.ResultBackNavigator
@@ -86,7 +87,7 @@ fun CreateCustomList(
state = state,
createCustomList = vm::createCustomList,
onInputChanged = vm::clearError,
- onDismiss = backNavigator::navigateBack
+ onDismiss = dropUnlessResumed { backNavigator.navigateBack() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CustomDnsInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CustomDnsInfoDialog.kt
index f58768d0c6..c692b27305 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CustomDnsInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CustomDnsInfoDialog.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.compose.dialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
@@ -20,6 +21,6 @@ private fun PreviewCustomDnsInfoDialog() {
fun CustomDnsInfoDialog(navigator: DestinationsNavigator) {
InfoDialog(
message = stringResource(id = R.string.settings_changes_effect_warning_content_blocker),
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeleteCustomListConfirmationDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeleteCustomListConfirmationDialog.kt
index b6e56ec637..4990296281 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeleteCustomListConfirmationDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeleteCustomListConfirmationDialog.kt
@@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultBackNavigator
import com.ramcosta.composedestinations.spec.DestinationStyle
@@ -52,7 +53,7 @@ fun DeleteCustomList(
state = state.value,
name = name,
onDelete = viewModel::deleteCustomList,
- onBack = navigator::navigateBack
+ onBack = dropUnlessResumed { navigator.navigateBack() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceNameInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceNameInfoDialog.kt
index 0e1c315959..258af7e44a 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceNameInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeviceNameInfoDialog.kt
@@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.compose.dialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.spec.DestinationStyle
@@ -19,6 +20,6 @@ fun DeviceNameInfoDialog(navigator: DestinationsNavigator) {
appendLine()
append(stringResource(id = R.string.device_name_info_third_paragraph))
},
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DiscardChangesDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DiscardChangesDialog.kt
index 06f2df0003..adac4935bb 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DiscardChangesDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DiscardChangesDialog.kt
@@ -8,6 +8,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.res.stringResource
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultBackNavigator
import com.ramcosta.composedestinations.spec.DestinationStyle
@@ -18,18 +19,18 @@ import net.mullvad.mullvadvpn.compose.button.PrimaryButton
@Composable
fun DiscardChangesDialog(resultBackNavigator: ResultBackNavigator<Boolean>) {
AlertDialog(
- onDismissRequest = resultBackNavigator::navigateBack,
+ onDismissRequest = dropUnlessResumed { resultBackNavigator.navigateBack() },
title = { Text(text = stringResource(id = R.string.discard_changes)) },
dismissButton = {
PrimaryButton(
modifier = Modifier.focusRequester(FocusRequester()),
- onClick = resultBackNavigator::navigateBack,
+ onClick = dropUnlessResumed { resultBackNavigator.navigateBack() },
text = stringResource(id = R.string.cancel)
)
},
confirmButton = {
PrimaryButton(
- onClick = { resultBackNavigator.navigateBack(result = true) },
+ onClick = dropUnlessResumed { resultBackNavigator.navigateBack(result = true) },
text = stringResource(id = R.string.discard)
)
},
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DnsDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DnsDialog.kt
index 30f1c71486..be0a6eb38d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DnsDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DnsDialog.kt
@@ -14,6 +14,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultBackNavigator
import com.ramcosta.composedestinations.spec.DestinationStyle
@@ -75,7 +76,8 @@ fun DnsDialog(
viewModel::onDnsInputChange,
onSaveDnsClick = viewModel::onSaveDnsClick,
onRemoveDnsClick = viewModel::onRemoveDnsClick,
- onDismiss = { resultNavigator.navigateBack(result = DnsDialogResult.Cancel) }
+ onDismiss =
+ dropUnlessResumed { resultNavigator.navigateBack(result = DnsDialogResult.Cancel) }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialog.kt
index c01ceab7f8..3b333cd877 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialog.kt
@@ -13,6 +13,7 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultBackNavigator
import com.ramcosta.composedestinations.spec.DestinationStyle
@@ -63,7 +64,7 @@ fun EditCustomListName(
state = state,
updateName = vm::updateCustomListName,
onInputChanged = vm::clearError,
- onDismiss = backNavigator::navigateBack
+ onDismiss = dropUnlessResumed { backNavigator.navigateBack() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/LocalNetworkSharingInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/LocalNetworkSharingInfoDialog.kt
index ebe46b6050..e67796d37e 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/LocalNetworkSharingInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/LocalNetworkSharingInfoDialog.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.compose.dialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
@@ -26,6 +27,6 @@ fun LocalNetworkSharingInfoDialog(navigator: DestinationsNavigator) {
appendLine(stringResource(id = R.string.local_network_sharing_additional_info))
appendLine(textResource(id = R.string.local_network_sharing_ip_ranges))
},
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MalwareInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MalwareInfoDialog.kt
index 1f627be040..a00d75b53e 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MalwareInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MalwareInfoDialog.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.compose.dialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
@@ -20,6 +21,6 @@ private fun PreviewMalwareInfoDialog() {
fun MalwareInfoDialog(navigator: DestinationsNavigator) {
InfoDialog(
message = stringResource(id = R.string.malware_info),
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MtuDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MtuDialog.kt
index c9276c5c09..24020db23d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MtuDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MtuDialog.kt
@@ -13,6 +13,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.EmptyResultBackNavigator
import com.ramcosta.composedestinations.result.ResultBackNavigator
@@ -57,7 +58,7 @@ fun MtuDialog(mtuInitial: Mtu?, navigator: ResultBackNavigator<Boolean>) {
onInputChanged = viewModel::onInputChanged,
onSaveMtu = viewModel::onSaveClick,
onResetMtu = viewModel::onRestoreClick,
- onDismiss = { navigator.navigateBack(true) }
+ onDismiss = dropUnlessResumed { navigator.navigateBack() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ObfuscationInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ObfuscationInfoDialog.kt
index cf4db26e2e..e6e3edd3ac 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ObfuscationInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ObfuscationInfoDialog.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.compose.dialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
@@ -20,6 +21,6 @@ private fun PreviewObfuscationInfoDialog() {
fun ObfuscationInfoDialog(navigator: DestinationsNavigator) {
InfoDialog(
message = stringResource(id = R.string.obfuscation_info),
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/QuantumResistanceInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/QuantumResistanceInfoDialog.kt
index e7773ed0a3..47ea8badfc 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/QuantumResistanceInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/QuantumResistanceInfoDialog.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.compose.dialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
@@ -21,6 +22,6 @@ fun QuantumResistanceInfoDialog(navigator: DestinationsNavigator) {
InfoDialog(
message = stringResource(id = R.string.quantum_resistant_info_first_paragaph),
additionalInfo = stringResource(id = R.string.quantum_resistant_info_second_paragaph),
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RemoveDeviceConfirmationDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RemoveDeviceConfirmationDialog.kt
index b8592c1acb..863b90e82a 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RemoveDeviceConfirmationDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RemoveDeviceConfirmationDialog.kt
@@ -15,6 +15,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.sp
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.EmptyResultBackNavigator
import com.ramcosta.composedestinations.result.ResultBackNavigator
@@ -42,7 +43,7 @@ private fun PreviewRemoveDeviceConfirmationDialog(
@Composable
fun RemoveDeviceConfirmationDialog(navigator: ResultBackNavigator<DeviceId>, device: Device) {
AlertDialog(
- onDismissRequest = navigator::navigateBack,
+ onDismissRequest = dropUnlessResumed { navigator.navigateBack() },
icon = {
Icon(
modifier = Modifier.fillMaxWidth().height(Dimens.dialogIconHeight),
@@ -62,14 +63,14 @@ fun RemoveDeviceConfirmationDialog(navigator: ResultBackNavigator<DeviceId>, dev
},
dismissButton = {
NegativeButton(
- onClick = { navigator.navigateBack(result = device.id) },
+ onClick = dropUnlessResumed { navigator.navigateBack(result = device.id) },
text = stringResource(id = R.string.confirm_removal)
)
},
confirmButton = {
PrimaryButton(
modifier = Modifier.focusRequester(FocusRequester()),
- onClick = { navigator.navigateBack() },
+ onClick = dropUnlessResumed { navigator.navigateBack() },
text = stringResource(id = R.string.back)
)
},
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ReportProblemNoEmailDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ReportProblemNoEmailDialog.kt
index f053cd74f6..b015d7c5b7 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ReportProblemNoEmailDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ReportProblemNoEmailDialog.kt
@@ -12,6 +12,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.EmptyResultBackNavigator
import com.ramcosta.composedestinations.result.ResultBackNavigator
@@ -32,7 +33,7 @@ private fun PreviewReportProblemNoEmailDialog() {
@Composable
fun ReportProblemNoEmailDialog(resultBackNavigator: ResultBackNavigator<Boolean>) {
AlertDialog(
- onDismissRequest = resultBackNavigator::navigateBack,
+ onDismissRequest = dropUnlessResumed { resultBackNavigator.navigateBack() },
icon = {
Icon(
painter = painterResource(id = R.drawable.icon_alert),
@@ -52,14 +53,14 @@ fun ReportProblemNoEmailDialog(resultBackNavigator: ResultBackNavigator<Boolean>
dismissButton = {
NegativeButton(
modifier = Modifier.fillMaxWidth(),
- onClick = { resultBackNavigator.navigateBack(result = true) },
+ onClick = dropUnlessResumed { resultBackNavigator.navigateBack(result = true) },
text = stringResource(id = R.string.send_anyway)
)
},
confirmButton = {
PrimaryButton(
modifier = Modifier.fillMaxWidth(),
- onClick = resultBackNavigator::navigateBack,
+ onClick = dropUnlessResumed { resultBackNavigator.navigateBack() },
text = stringResource(id = R.string.back)
)
},
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIpOverridesConfirmationDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIpOverridesConfirmationDialog.kt
index 46111ebf8c..727ffeaaa2 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIpOverridesConfirmationDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ResetServerIpOverridesConfirmationDialog.kt
@@ -9,6 +9,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultBackNavigator
import com.ramcosta.composedestinations.spec.DestinationStyle
@@ -43,7 +44,7 @@ fun ResetServerIpOverridesConfirmation(resultBackNavigator: ResultBackNavigator<
}
ResetServerIpOverridesConfirmationDialog(
onClearAllOverrides = vm::clearAllOverrides,
- resultBackNavigator::navigateBack
+ dropUnlessResumed { resultBackNavigator.navigateBack() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ServerIpOverridesInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ServerIpOverridesInfoDialog.kt
index 9b6054f1f0..a42e314991 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ServerIpOverridesInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/ServerIpOverridesInfoDialog.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.compose.dialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
@@ -27,6 +28,6 @@ fun ServerIpOverridesInfoDialog(navigator: DestinationsNavigator) {
appendLine()
append(stringResource(id = R.string.server_ip_overrides_info_third_paragraph))
},
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/UdpOverTcpPortInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/UdpOverTcpPortInfoDialog.kt
index 1c5c4ccef6..22a93bb4bf 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/UdpOverTcpPortInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/UdpOverTcpPortInfoDialog.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.compose.dialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
@@ -21,6 +22,6 @@ private fun PreviewUdpOverTcpPortInfoDialog() {
fun UdpOverTcpPortInfoDialog(navigator: DestinationsNavigator) {
InfoDialog(
message = stringResource(id = R.string.udp_over_tcp_port_info),
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/WireguardPortInfoDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/WireguardPortInfoDialog.kt
index 7de2e97fbb..6d497dd93e 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/WireguardPortInfoDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/WireguardPortInfoDialog.kt
@@ -4,6 +4,7 @@ import android.os.Parcelable
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
@@ -40,6 +41,6 @@ fun WireguardPortInfoDialog(
id = R.string.wireguard_port_info_port_range,
argument.portRanges.asString()
),
- onDismiss = navigator::navigateUp
+ onDismiss = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/payment/VerificationPendingDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/payment/VerificationPendingDialog.kt
index 7d49a133f3..81a0b25b87 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/payment/VerificationPendingDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/payment/VerificationPendingDialog.kt
@@ -7,6 +7,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.spec.DestinationStyle
@@ -24,7 +25,7 @@ private fun PreviewVerificationPendingDialog() {
@Destination(style = DestinationStyle.Dialog::class)
@Composable
fun VerificationPendingDialog(navigator: DestinationsNavigator) {
- VerificationPendingDialog(onClose = navigator::navigateUp)
+ VerificationPendingDialog(onClose = dropUnlessResumed { navigator.navigateUp() })
}
@Composable
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 d78592775b..d5c9212406 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
@@ -24,6 +24,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.popUpTo
@@ -123,9 +124,7 @@ fun Account(
AccountScreen(
state = state,
uiSideEffect = vm.uiSideEffect,
- onRedeemVoucherClick = {
- navigator.navigate(RedeemVoucherDestination) { launchSingleTop = true }
- },
+ onRedeemVoucherClick = dropUnlessResumed { navigator.navigate(RedeemVoucherDestination) },
onManageAccountClick = vm::onManageAccountClick,
onLogoutClick = vm::onLogoutClick,
navigateToLogin = {
@@ -135,16 +134,14 @@ fun Account(
}
},
onCopyAccountNumber = vm::onCopyAccountNumber,
- onBackClick = navigator::navigateUp,
- navigateToDeviceInfo = {
- navigator.navigate(DeviceNameInfoDialogDestination) { launchSingleTop = true }
- },
+ onBackClick = dropUnlessResumed { navigator.navigateUp() },
+ navigateToDeviceInfo =
+ dropUnlessResumed { navigator.navigate(DeviceNameInfoDialogDestination) },
onPurchaseBillingProductClick = { productId ->
- navigator.navigate(PaymentDestination(productId)) { launchSingleTop = true }
+ navigator.navigate(PaymentDestination(productId), onlyIfResumed = true)
},
- navigateToVerificationPendingDialog = {
- navigator.navigate(VerificationPendingDialogDestination) { launchSingleTop = true }
- }
+ navigateToVerificationPendingDialog =
+ dropUnlessResumed { navigator.navigate(VerificationPendingDialogDestination) }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt
index 5a01e4c941..95d5ca6dcf 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AutoConnectAndLockdownModeScreen.kt
@@ -47,6 +47,7 @@ import androidx.constraintlayout.compose.ConstrainedLayoutReference
import androidx.constraintlayout.compose.ConstraintLayout
import androidx.constraintlayout.compose.ConstraintLayoutScope
import androidx.core.text.HtmlCompat
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import kotlinx.coroutines.launch
@@ -74,7 +75,7 @@ private fun PreviewAutoConnectAndLockdownModeScreen() {
@Destination(style = SlideInFromRightTransition::class)
@Composable
fun AutoConnectAndLockdownMode(navigator: DestinationsNavigator) {
- AutoConnectAndLockdownModeScreen(onBackClick = navigator::navigateUp)
+ AutoConnectAndLockdownModeScreen(onBackClick = dropUnlessResumed { navigator.navigateUp() })
}
@OptIn(ExperimentalFoundationApi::class)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt
index 03d6a0b01b..36b351ddee 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt
@@ -45,6 +45,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.popUpTo
@@ -144,12 +145,12 @@ fun Connect(
openAccountPage(sideEffect.token)
}
is ConnectViewModel.UiSideEffect.OutOfTime ->
- navigator.navigate(OutOfTimeDestination, true) {
+ navigator.navigate(OutOfTimeDestination) {
launchSingleTop = true
popUpTo(NavGraphs.root) { inclusive = true }
}
ConnectViewModel.UiSideEffect.RevokedDevice ->
- navigator.navigate(DeviceRevokedDestination, true) {
+ navigator.navigate(DeviceRevokedDestination) {
launchSingleTop = true
popUpTo(NavGraphs.root) { inclusive = true }
}
@@ -176,9 +177,7 @@ fun Connect(
onReconnectClick = connectViewModel::onReconnectClick,
onConnectClick = connectViewModel::onConnectClick,
onCancelClick = connectViewModel::onCancelClick,
- onSwitchLocationClick = {
- navigator.navigate(SelectLocationDestination, true) { launchSingleTop = true }
- },
+ onSwitchLocationClick = dropUnlessResumed { navigator.navigate(SelectLocationDestination) },
onUpdateVersionClick = {
val intent =
Intent(
@@ -193,12 +192,8 @@ fun Connect(
context.startActivity(intent)
},
onManageAccountClick = connectViewModel::onManageAccountClick,
- onSettingsClick = {
- navigator.navigate(SettingsDestination, true) { launchSingleTop = true }
- },
- onAccountClick = {
- navigator.navigate(AccountDestination, true) { launchSingleTop = true }
- },
+ onSettingsClick = dropUnlessResumed { navigator.navigate(SettingsDestination) },
+ onAccountClick = dropUnlessResumed { navigator.navigate(AccountDestination) },
onDismissNewDeviceClick = connectViewModel::dismissNewDeviceNotification,
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListLocationsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListLocationsScreen.kt
index fc5fc62c3d..bbde96b99f 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListLocationsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListLocationsScreen.kt
@@ -26,6 +26,7 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.NavResult
@@ -115,13 +116,14 @@ fun CustomListLocations(
onSearchTermInput = customListsViewModel::onSearchTermInput,
onSaveClick = customListsViewModel::save,
onRelaySelectionClick = customListsViewModel::onRelaySelectionClick,
- onBackClick = {
- if (state.hasUnsavedChanges) {
- navigator.navigate(DiscardChangesDialogDestination) { launchSingleTop = true }
- } else {
- backNavigator.navigateBack()
+ onBackClick =
+ dropUnlessResumed {
+ if (state.hasUnsavedChanges) {
+ navigator.navigate(DiscardChangesDialogDestination)
+ } else {
+ backNavigator.navigateBack()
+ }
}
- }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt
index b039f838a2..7611cfcf6b 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/CustomListsScreen.kt
@@ -23,6 +23,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.NavResult
@@ -92,19 +93,19 @@ fun CustomLists(
CustomListsScreen(
state = state,
snackbarHostState = snackbarHostState,
- addCustomList = {
- navigator.navigate(
- CreateCustomListDestination(),
- ) {
- launchSingleTop = true
- }
- },
+ addCustomList =
+ dropUnlessResumed {
+ navigator.navigate(
+ CreateCustomListDestination(),
+ )
+ },
openCustomList = { customList ->
- navigator.navigate(EditCustomListDestination(customListId = customList.id)) {
- launchSingleTop = true
- }
+ navigator.navigate(
+ EditCustomListDestination(customListId = customList.id),
+ onlyIfResumed = true
+ )
},
- onBackClick = navigator::navigateUp
+ onBackClick = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt
index 64414b38c0..c6d8a06d20 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceListScreen.kt
@@ -31,6 +31,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.popUpTo
@@ -146,19 +147,18 @@ fun DeviceList(
DeviceListScreen(
state = state,
snackbarHostState = snackbarHostState,
- onBackClick = navigator::navigateUp,
- onContinueWithLogin = {
- navigator.navigate(LoginDestination(accountNumber)) {
- launchSingleTop = true
- popUpTo(LoginDestination) { inclusive = true }
- }
- },
- onSettingsClicked = { navigator.navigate(SettingsDestination) { launchSingleTop = true } },
+ onBackClick = dropUnlessResumed { navigator.navigateUp() },
+ onContinueWithLogin =
+ dropUnlessResumed {
+ navigator.navigate(LoginDestination(accountNumber)) {
+ launchSingleTop = true
+ popUpTo(LoginDestination) { inclusive = true }
+ }
+ },
+ onSettingsClicked = dropUnlessResumed { navigator.navigate(SettingsDestination) },
onTryAgainClicked = viewModel::fetchDevices,
navigateToRemoveDeviceConfirmationDialog = {
- navigator.navigate(RemoveDeviceConfirmationDialogDestination(it)) {
- launchSingleTop = true
- }
+ navigator.navigate(RemoveDeviceConfirmationDialogDestination(it), onlyIfResumed = true)
}
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreen.kt
index f5167bad54..ac43424383 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreen.kt
@@ -21,6 +21,7 @@ import androidx.compose.ui.unit.sp
import androidx.constraintlayout.compose.ConstraintLayout
import androidx.constraintlayout.compose.Dimension
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.popUpTo
@@ -63,7 +64,7 @@ fun DeviceRevoked(navigator: DestinationsNavigator) {
DeviceRevokedScreen(
state = state,
- onSettingsClicked = { navigator.navigate(SettingsDestination) { launchSingleTop = true } },
+ onSettingsClicked = dropUnlessResumed { navigator.navigate(SettingsDestination) },
onGoToLoginClicked = viewModel::onGoToLoginClicked
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt
index ed0285eaf1..779fd06b41 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/EditCustomListScreen.kt
@@ -21,6 +21,7 @@ import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.NavResult
@@ -100,24 +101,23 @@ fun EditCustomList(
state = state,
onDeleteList = { name ->
navigator.navigate(
- DeleteCustomListDestination(customListId = customListId, name = name)
- ) {
- launchSingleTop = true
- }
+ DeleteCustomListDestination(customListId = customListId, name = name),
+ onlyIfResumed = true
+ )
},
onNameClicked = { id, name ->
navigator.navigate(
- EditCustomListNameDestination(customListId = id, initialName = name)
- ) {
- launchSingleTop = true
- }
+ EditCustomListNameDestination(customListId = id, initialName = name),
+ onlyIfResumed = true
+ )
},
onLocationsClicked = {
- navigator.navigate(CustomListLocationsDestination(customListId = it, newList = false)) {
- launchSingleTop = true
- }
+ navigator.navigate(
+ CustomListLocationsDestination(customListId = it, newList = false),
+ onlyIfResumed = true
+ )
},
- onBackClick = backNavigator::navigateBack
+ onBackClick = dropUnlessResumed { backNavigator.navigateBack() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt
index f58b28eaca..4458f8b588 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/FilterScreen.kt
@@ -27,6 +27,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import net.mullvad.mullvadvpn.R
@@ -79,7 +80,7 @@ fun FilterScreen(navigator: DestinationsNavigator) {
}
FilterScreen(
state = state,
- onBackClick = navigator::navigateUp,
+ onBackClick = dropUnlessResumed { navigator.navigateUp() },
onApplyClick = viewModel::onApplyButtonClicked,
onSelectedOwnership = viewModel::setSelectedOwnership,
onAllProviderCheckChange = viewModel::setAllProviders,
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ImportOverridesByTextScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ImportOverridesByTextScreen.kt
index 7ab063703c..9e2813f59d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ImportOverridesByTextScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ImportOverridesByTextScreen.kt
@@ -21,6 +21,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultBackNavigator
import net.mullvad.mullvadvpn.R
@@ -40,7 +41,7 @@ fun ImportOverridesByText(
resultNavigator: ResultBackNavigator<String>,
) {
ImportOverridesByTextScreen(
- onNavigateBack = resultNavigator::navigateBack,
+ onNavigateBack = dropUnlessResumed { resultNavigator.navigateBack() },
onImportClicked = { resultNavigator.navigateBack(result = it) }
)
}
@@ -67,7 +68,7 @@ fun ImportOverridesByTextScreen(
colors =
ButtonDefaults.textButtonColors()
.copy(contentColor = MaterialTheme.colorScheme.onPrimary),
- onClick = { onImportClicked(text) }
+ onClick = dropUnlessResumed { onImportClicked(text) }
) {
Text(
text = stringResource(R.string.import_overrides_import),
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt
index b004314f4f..80c30f6400 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoginScreen.kt
@@ -47,6 +47,7 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.popUpTo
@@ -156,7 +157,7 @@ fun Login(
vm::createAccount,
vm::clearAccountHistory,
vm::onAccountNumberChange,
- { navigator.navigate(SettingsDestination) }
+ dropUnlessResumed { navigator.navigate(SettingsDestination) }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/NoDaemonScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/NoDaemonScreen.kt
index af47b37fc2..82ae16a208 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/NoDaemonScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/NoDaemonScreen.kt
@@ -22,6 +22,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.core.app.ActivityCompat.finishAffinity
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import net.mullvad.mullvadvpn.R
@@ -43,7 +44,7 @@ private fun PreviewNoDaemonScreen() {
@Destination(style = DefaultTransition::class)
@Composable
fun NoDaemonScreen(navigator: DestinationsNavigator) {
- NoDaemonScreen { navigator.navigate(SettingsDestination) }
+ NoDaemonScreen(dropUnlessResumed { navigator.navigate(SettingsDestination) })
}
@Composable
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 d557558a60..22ab725e7f 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
@@ -23,6 +23,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.popUpTo
@@ -151,17 +152,15 @@ fun OutOfTime(
OutOfTimeScreen(
state = state,
onSitePaymentClick = vm::onSitePaymentClick,
- onRedeemVoucherClick = {
- navigator.navigate(RedeemVoucherDestination) { launchSingleTop = true }
- },
- onSettingsClick = { navigator.navigate(SettingsDestination) { launchSingleTop = true } },
- onAccountClick = { navigator.navigate(AccountDestination) { launchSingleTop = true } },
+ onRedeemVoucherClick = dropUnlessResumed { navigator.navigate(RedeemVoucherDestination) },
+ onSettingsClick = dropUnlessResumed { navigator.navigate(SettingsDestination) },
+ onAccountClick = dropUnlessResumed { navigator.navigate(AccountDestination) },
onDisconnectClick = vm::onDisconnectClick,
onPurchaseBillingProductClick = { productId ->
- navigator.navigate(PaymentDestination(productId)) { launchSingleTop = true }
+ navigator.navigate(PaymentDestination(productId), onlyIfResumed = true)
},
navigateToVerificationPendingDialog = {
- navigator.navigate(VerificationPendingDialogDestination) { launchSingleTop = true }
+ navigator.navigate(VerificationPendingDialogDestination, onlyIfResumed = true)
}
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ReportProblemScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ReportProblemScreen.kt
index c46eb93894..a464a573f7 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ReportProblemScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ReportProblemScreen.kt
@@ -27,6 +27,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.NavResult
@@ -120,12 +121,13 @@ fun ReportProblem(
state,
onSendReport = { vm.sendReport(state.email, state.description) },
onClearSendResult = vm::clearSendResult,
- onNavigateToViewLogs = {
- navigator.navigate(ViewLogsDestination()) { launchSingleTop = true }
- },
+ onNavigateToViewLogs =
+ dropUnlessResumed {
+ navigator.navigate(ViewLogsDestination()) { launchSingleTop = true }
+ },
onEmailChanged = vm::updateEmail,
onDescriptionChanged = vm::updateDescription,
- onBackClick = navigator::navigateUp,
+ onBackClick = dropUnlessResumed { navigator.navigateUp() },
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt
index 7d861ea717..b10a41a070 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreen.kt
@@ -46,6 +46,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.NavResult
@@ -151,7 +152,7 @@ fun SelectLocation(
LaunchedEffectCollect(vm.uiSideEffect) {
when (it) {
- SelectLocationSideEffect.CloseScreen -> backNavigator.navigateBack(result = true, true)
+ SelectLocationSideEffect.CloseScreen -> backNavigator.navigateBack(result = true)
is SelectLocationSideEffect.LocationAddedToCustomList ->
launch {
snackbarHostState.showResultSnackbar(
@@ -200,31 +201,38 @@ fun SelectLocation(
snackbarHostState = snackbarHostState,
onSelectRelay = vm::selectRelay,
onSearchTermInput = vm::onSearchTermInput,
- onBackClick = { backNavigator.navigateBack(true) },
- onFilterClick = { navigator.navigate(FilterScreenDestination, true) },
+ onBackClick = dropUnlessResumed { backNavigator.navigateBack() },
+ onFilterClick = dropUnlessResumed { navigator.navigate(FilterScreenDestination) },
onCreateCustomList = { relayItem ->
- navigator.navigate(CreateCustomListDestination(locationCode = relayItem?.id)) {
- launchSingleTop = true
- }
+ navigator.navigate(
+ CreateCustomListDestination(locationCode = relayItem?.id),
+ onlyIfResumed = true
+ )
},
- onEditCustomLists = { navigator.navigate(CustomListsDestination()) },
+ onEditCustomLists = dropUnlessResumed { navigator.navigate(CustomListsDestination()) },
removeOwnershipFilter = vm::removeOwnerFilter,
removeProviderFilter = vm::removeProviderFilter,
onAddLocationToList = vm::addLocationToList,
onRemoveLocationFromList = vm::removeLocationFromList,
onEditCustomListName = {
navigator.navigate(
- EditCustomListNameDestination(customListId = it.id, initialName = it.customListName)
+ EditCustomListNameDestination(
+ customListId = it.id,
+ initialName = it.customListName
+ ),
+ onlyIfResumed = true
)
},
onEditLocationsCustomList = {
navigator.navigate(
- CustomListLocationsDestination(customListId = it.id, newList = false)
+ CustomListLocationsDestination(customListId = it.id, newList = false),
+ onlyIfResumed = true
)
},
onDeleteCustomList = {
navigator.navigate(
- DeleteCustomListDestination(customListId = it.id, name = it.customListName)
+ DeleteCustomListDestination(customListId = it.id, name = it.customListName),
+ onlyIfResumed = true
)
}
)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt
index 7f9542f22a..5a7c9be2a6 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ServerIpOverridesScreen.kt
@@ -40,6 +40,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.ResultRecipient
@@ -143,17 +144,13 @@ fun ServerIpOverrides(
ServerIpOverridesScreen(
state,
- onBackClick = navigator::navigateUp,
- onInfoClick = {
- navigator.navigate(ServerIpOverridesInfoDialogDestination, onlyIfResumed = true)
- },
- onResetOverridesClick = {
- navigator.navigate(ResetServerIpOverridesConfirmationDestination, onlyIfResumed = true)
- },
- onImportByFile = { openFileLauncher.launch("application/json") },
- onImportByText = {
- navigator.navigate(ImportOverridesByTextDestination, onlyIfResumed = true)
- },
+ onBackClick = dropUnlessResumed { navigator.navigateUp() },
+ onInfoClick =
+ dropUnlessResumed { navigator.navigate(ServerIpOverridesInfoDialogDestination) },
+ onResetOverridesClick =
+ dropUnlessResumed { navigator.navigate(ResetServerIpOverridesConfirmationDestination) },
+ onImportByFile = dropUnlessResumed { openFileLauncher.launch("application/json") },
+ onImportByText = dropUnlessResumed { navigator.navigate(ImportOverridesByTextDestination) },
snackbarHostState
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt
index cb84246e34..702c1ca030 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SettingsScreen.kt
@@ -19,6 +19,7 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import net.mullvad.mullvadvpn.R
@@ -67,19 +68,13 @@ fun Settings(navigator: DestinationsNavigator) {
val state by vm.uiState.collectAsStateWithLifecycle()
SettingsScreen(
state = state,
- onVpnSettingCellClick = {
- navigator.navigate(VpnSettingsDestination) { launchSingleTop = true }
- },
- onSplitTunnelingCellClick = {
- navigator.navigate(SplitTunnelingDestination) { launchSingleTop = true }
- },
- onReportProblemCellClick = {
- navigator.navigate(ReportProblemDestination) { launchSingleTop = true }
- },
- onApiAccessClick = {
- navigator.navigate(ApiAccessListDestination) { launchSingleTop = true }
- },
- onBackClick = navigator::navigateUp
+ onVpnSettingCellClick = dropUnlessResumed { navigator.navigate(VpnSettingsDestination) },
+ onSplitTunnelingCellClick =
+ dropUnlessResumed { navigator.navigate(SplitTunnelingDestination) },
+ onReportProblemCellClick =
+ dropUnlessResumed { navigator.navigate(ApiAccessListDestination) },
+ onApiAccessClick = dropUnlessResumed { navigator.navigate(ReportProblemDestination) },
+ onBackClick = dropUnlessResumed { navigator.navigateUp() }
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt
index a9b7873a2f..280cef1802 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt
@@ -22,6 +22,7 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import net.mullvad.mullvadvpn.R
@@ -98,7 +99,7 @@ fun SplitTunneling(navigator: DestinationsNavigator) {
onShowSystemAppsClick = viewModel::onShowSystemAppsClick,
onExcludeAppClick = viewModel::onExcludeAppClick,
onIncludeAppClick = viewModel::onIncludeAppClick,
- onBackClick = navigator::navigateUp,
+ onBackClick = dropUnlessResumed { navigator.navigateUp() },
onResolveIcon = { packageName ->
packageManager.getApplicationIconBitmapOrNull(packageName)
},
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt
index 05eb72c142..fbb0ea82ce 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ViewLogsScreen.kt
@@ -28,6 +28,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import kotlinx.coroutines.launch
@@ -64,7 +65,7 @@ private fun PreviewViewLogsLoadingScreen() {
fun ViewLogs(navigator: DestinationsNavigator) {
val vm = koinViewModel<ViewLogsViewModel>()
val state by vm.uiState.collectAsStateWithLifecycle()
- ViewLogsScreen(state = state, onBackClick = navigator::navigateUp)
+ ViewLogsScreen(state = state, onBackClick = dropUnlessResumed { navigator.navigateUp() })
}
@OptIn(ExperimentalMaterial3Api::class)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt
index bc0c0443dd..5c3bf9bb77 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt
@@ -31,6 +31,7 @@ import androidx.core.text.HtmlCompat
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.ResultRecipient
@@ -199,40 +200,30 @@ fun VpnSettings(
VpnSettingsScreen(
state = state,
snackbarHostState = snackbarHostState,
- navigateToContentBlockersInfo = {
- navigator.navigate(ContentBlockersInfoDialogDestination) { launchSingleTop = true }
- },
- navigateToAutoConnectScreen = {
- navigator.navigate(AutoConnectAndLockdownModeDestination) { launchSingleTop = true }
- },
- navigateToCustomDnsInfo = {
- navigator.navigate(CustomDnsInfoDialogDestination) { launchSingleTop = true }
- },
- navigateToMalwareInfo = {
- navigator.navigate(MalwareInfoDialogDestination) { launchSingleTop = true }
- },
- navigateToObfuscationInfo = {
- navigator.navigate(ObfuscationInfoDialogDestination) { launchSingleTop = true }
- },
- navigateToQuantumResistanceInfo = {
- navigator.navigate(QuantumResistanceInfoDialogDestination) { launchSingleTop = true }
- },
- navigateUdp2TcpInfo = {
- navigator.navigate(UdpOverTcpPortInfoDialogDestination) { launchSingleTop = true }
- },
+ navigateToContentBlockersInfo =
+ dropUnlessResumed { navigator.navigate(ContentBlockersInfoDialogDestination) },
+ navigateToAutoConnectScreen =
+ dropUnlessResumed { navigator.navigate(AutoConnectAndLockdownModeDestination) },
+ navigateToCustomDnsInfo =
+ dropUnlessResumed { navigator.navigate(CustomDnsInfoDialogDestination) },
+ navigateToMalwareInfo =
+ dropUnlessResumed { navigator.navigate(MalwareInfoDialogDestination) },
+ navigateToObfuscationInfo =
+ dropUnlessResumed { navigator.navigate(ObfuscationInfoDialogDestination) },
+ navigateToQuantumResistanceInfo =
+ dropUnlessResumed { navigator.navigate(QuantumResistanceInfoDialogDestination) },
+ navigateUdp2TcpInfo =
+ dropUnlessResumed { navigator.navigate(UdpOverTcpPortInfoDialogDestination) },
navigateToWireguardPortInfo = {
navigator.navigate(
- WireguardPortInfoDialogDestination(WireguardPortInfoDialogArgument(it))
- ) {
- launchSingleTop = true
- }
- },
- navigateToLocalNetworkSharingInfo = {
- navigator.navigate(LocalNetworkSharingInfoDialogDestination) { launchSingleTop = true }
- },
- navigateToServerIpOverrides = {
- navigator.navigate(ServerIpOverridesDestination) { launchSingleTop = true }
+ WireguardPortInfoDialogDestination(WireguardPortInfoDialogArgument(it)),
+ onlyIfResumed = true
+ )
},
+ navigateToLocalNetworkSharingInfo =
+ dropUnlessResumed { navigator.navigate(LocalNetworkSharingInfoDialogDestination) },
+ navigateToServerIpOverrides =
+ dropUnlessResumed { navigator.navigate(ServerIpOverridesDestination) },
onToggleBlockTrackers = vm::onToggleBlockTrackers,
onToggleBlockAds = vm::onToggleBlockAds,
onToggleBlockMalware = vm::onToggleBlockMalware,
@@ -242,10 +233,10 @@ fun VpnSettings(
onToggleBlockGambling = vm::onToggleBlockGambling,
onToggleBlockSocialMedia = vm::onToggleBlockSocialMedia,
navigateToMtuDialog = {
- navigator.navigate(MtuDialogDestination(it)) { launchSingleTop = true }
+ navigator.navigate(MtuDialogDestination(it), onlyIfResumed = true)
},
navigateToDns = { index, address ->
- navigator.navigate(DnsDialogDestination(index, address)) { launchSingleTop = true }
+ navigator.navigate(DnsDialogDestination(index, address), onlyIfResumed = true)
},
navigateToWireguardPortDialog = {
val args =
@@ -253,12 +244,10 @@ fun VpnSettings(
state.customWireguardPort?.toPortOrNull(),
state.availablePortRanges
)
- navigator.navigate(WireguardCustomPortDialogDestination(args)) {
- launchSingleTop = true
- }
+ navigator.navigate(WireguardCustomPortDialogDestination(args), onlyIfResumed = true)
},
onToggleDnsClick = vm::onToggleCustomDns,
- onBackClick = navigator::navigateUp,
+ onBackClick = dropUnlessResumed { navigator.navigateUp() },
onSelectObfuscationSetting = vm::onSelectObfuscationSetting,
onSelectQuantumResistanceSetting = vm::onSelectQuantumResistanceSetting,
onWireguardPortSelected = vm::onWireguardPortSelected,
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 342f115943..71594527fd 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
@@ -27,6 +27,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import androidx.lifecycle.compose.dropUnlessResumed
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.navigation.popUpTo
@@ -142,21 +143,17 @@ fun Welcome(
WelcomeScreen(
state = state,
- onSitePaymentClick = vm::onSitePaymentClick,
- onRedeemVoucherClick = {
- navigator.navigate(RedeemVoucherDestination) { launchSingleTop = true }
- },
- onSettingsClick = { navigator.navigate(SettingsDestination) { launchSingleTop = true } },
- onAccountClick = { navigator.navigate(AccountDestination) { launchSingleTop = true } },
- navigateToDeviceInfoDialog = {
- navigator.navigate(DeviceNameInfoDialogDestination) { launchSingleTop = true }
- },
+ onSitePaymentClick = dropUnlessResumed { vm.onSitePaymentClick() },
+ onRedeemVoucherClick = dropUnlessResumed { navigator.navigate(RedeemVoucherDestination) },
+ onSettingsClick = dropUnlessResumed { navigator.navigate(SettingsDestination) },
+ onAccountClick = dropUnlessResumed { navigator.navigate(AccountDestination) },
+ navigateToDeviceInfoDialog =
+ dropUnlessResumed { navigator.navigate(DeviceNameInfoDialogDestination) },
onPurchaseBillingProductClick = { productId ->
- navigator.navigate(PaymentDestination(productId)) { launchSingleTop = true }
+ navigator.navigate(PaymentDestination(productId), onlyIfResumed = true)
},
- navigateToVerificationPendingDialog = {
- navigator.navigate(VerificationPendingDialogDestination) { launchSingleTop = true }
- }
+ navigateToVerificationPendingDialog =
+ dropUnlessResumed { navigator.navigate(VerificationPendingDialogDestination) }
)
}
diff --git a/android/buildSrc/src/main/kotlin/Versions.kt b/android/buildSrc/src/main/kotlin/Versions.kt
index 37f0f2c029..02a50ce5e4 100644
--- a/android/buildSrc/src/main/kotlin/Versions.kt
+++ b/android/buildSrc/src/main/kotlin/Versions.kt
@@ -25,7 +25,7 @@ object Versions {
const val appcompat = "1.6.1"
const val coreKtx = "1.12.0"
const val espresso = "3.5.1"
- const val lifecycle = "2.7.0"
+ const val lifecycle = "2.8.2"
const val fragment = "1.6.2"
const val test = "1.5.0"
const val testMonitor = "1.6.1"
diff --git a/android/gradle/verification-metadata.xml b/android/gradle/verification-metadata.xml
index 11faf12b98..b3d62044fc 100644
--- a/android/gradle/verification-metadata.xml
+++ b/android/gradle/verification-metadata.xml
@@ -111,11 +111,6 @@
<sha256 value="c5769b13afe55023c1dc30c72ea86189ab70aa3ca770ecfb04c970f4d6e6be65" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.annotation" name="annotation" version="1.1.0">
- <artifact name="annotation-1.1.0.jar">
- <sha256 value="d38d63edb30f1467818d50aaf05f8a692dea8b31392a049bfa991b159ad5b692" origin="Generated by Gradle"/>
- </artifact>
- </component>
<component group="androidx.annotation" name="annotation" version="1.2.0">
<artifact name="annotation-1.2.0.jar">
<sha256 value="9029262bddce116e6d02be499e4afdba21f24c239087b76b3b57d7e98b490a36" origin="Generated by Gradle"/>
@@ -144,9 +139,6 @@
<artifact name="annotation-1.6.0.module">
<sha256 value="6146b6138643b2ac0590df509dd51abaea769c79fd7602eb217168fe5af78cd2" origin="Generated by Gradle"/>
</artifact>
- <artifact name="annotation-metadata-1.6.0.jar">
- <sha256 value="fbc64f5c44a7added8b6eab517cf7d70555e25153bf5d44a6ed9b0e5312f7de9" origin="Generated by Gradle"/>
- </artifact>
</component>
<component group="androidx.annotation" name="annotation" version="1.7.0">
<artifact name="annotation-1.7.0.module">
@@ -156,6 +148,14 @@
<sha256 value="b11676837cad011a5285d6074418649107ef25eba17131517e9557ef8c9984ed" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="androidx.annotation" name="annotation" version="1.8.0">
+ <artifact name="annotation-1.8.0.module">
+ <sha256 value="d590a0d8e02f405de749e8dc80b741dc503c6e3e4c9c016d614d76b65f0b59ef" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="annotation-metadata-1.8.0.jar">
+ <sha256 value="fe70ace6f942a5fc29045bb2fe25b4e77bdc742dc69f76ed65b39c3ae185888e" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="androidx.annotation" name="annotation-experimental" version="1.1.0">
<artifact name="annotation-experimental-1.1.0.aar">
<sha256 value="0157de61a2064047896a058080f3fd67ba57ad9a94857b3f7a363660243e3f90" origin="Generated by Gradle"/>
@@ -181,9 +181,6 @@
</artifact>
</component>
<component group="androidx.annotation" name="annotation-jvm" version="1.6.0">
- <artifact name="annotation-jvm-1.6.0.jar">
- <sha256 value="60b10b5ef5769b79570172e015b8159405c92f034ba88b9391a977589c9deb4e" origin="Generated by Gradle"/>
- </artifact>
<artifact name="annotation-jvm-1.6.0.module">
<sha256 value="3f5a8faa19de667e63dca9730ff8ef0e478e4bafb5feeb8258e5c086246dc90c" origin="Generated by Gradle"/>
</artifact>
@@ -196,6 +193,14 @@
<sha256 value="07ce60c377ab94e47c8c902589b9776030064fd1a7e4d5a01a38d700e35e5db4" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="androidx.annotation" name="annotation-jvm" version="1.8.0">
+ <artifact name="annotation-jvm-1.8.0.jar">
+ <sha256 value="9aab326d9492800991854360ac248f493ce7f7c3183519309b78ace9e240f6f6" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="annotation-jvm-1.8.0.module">
+ <sha256 value="e3cb4525539d0ed74bb238ef92c69eef22a80e422c0d2acbc51e6187febb0a13" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="androidx.appcompat" name="appcompat" version="1.6.1">
<artifact name="appcompat-1.6.1.aar">
<sha256 value="7ea5573b93ababd3bd32312451c6ea48a662b03a140dda81aebe75776a20a422" origin="Generated by Gradle"/>
@@ -583,11 +588,6 @@
<sha256 value="3ab3ee278fabc41d79d9da1e1eb5b6c9948ae3dba796c0d004b04ee5c9cfd722" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.compose.runtime" name="runtime" version="1.0.1">
- <artifact name="runtime-1.0.1.module">
- <sha256 value="2543a8c7edc16bde91f140286b4fd3773d7204a283a4ec99f6e5e286aa92c0c3" origin="Generated by Gradle"/>
- </artifact>
- </component>
<component group="androidx.compose.runtime" name="runtime" version="1.5.4">
<artifact name="runtime-1.5.4.module">
<sha256 value="3ddd8b5ef83800f6289b6f0c96c4fb7a640209b42c45e60e18bc8fd17bd3e32f" origin="Generated by Gradle"/>
@@ -606,6 +606,14 @@
<sha256 value="9f40ab0b8cf4e7cb0f593493c2ed96e7155d0e91eb592407597ecd61e2d5a054" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="androidx.compose.runtime" name="runtime" version="1.6.5">
+ <artifact name="runtime-1.6.5.module">
+ <sha256 value="26e931f510f93cb960ea4f703fb69e89dbefe010713f53c54b3e12825293f853" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="runtime-metadata-1.6.5.jar">
+ <sha256 value="9f40ab0b8cf4e7cb0f593493c2ed96e7155d0e91eb592407597ecd61e2d5a054" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="androidx.compose.runtime" name="runtime-android" version="1.6.3">
<artifact name="runtime-android-1.6.3.module">
<sha256 value="4d73c867fcab9692eb05837c9f09fb366083905b7fc7471fc9466e87c4afa1c0" origin="Generated by Gradle"/>
@@ -614,12 +622,20 @@
<sha256 value="bca307a76fb39eedf336d6026b1616b6256ccde400990f04564a5d27d5f3cdf9" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.compose.runtime" name="runtime-desktop" version="1.6.3">
- <artifact name="runtime-desktop-1.6.3.jar">
- <sha256 value="e995031aae22da020a681a464facab65df89d8bcbfc97e075f22a1ee3b3cbdb2" origin="Generated by Gradle"/>
+ <component group="androidx.compose.runtime" name="runtime-android" version="1.6.5">
+ <artifact name="runtime-android-1.6.5.module">
+ <sha256 value="c4999b604c093a3fa83327ee60b5bed1af3bd4056ee147a8b40f44b52622af1d" origin="Generated by Gradle"/>
</artifact>
- <artifact name="runtime-desktop-1.6.3.module">
- <sha256 value="7eb63c712e6304cfa3bb685309e513f056eaf6ed8aa6e650966ea09e423d65e4" origin="Generated by Gradle"/>
+ <artifact name="runtime-release.aar">
+ <sha256 value="4cb0744808a3849f6217b952dd500529ee9426f52a76c71a9464cd766eb63169" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.compose.runtime" name="runtime-desktop" version="1.6.5">
+ <artifact name="runtime-desktop-1.6.5.jar">
+ <sha256 value="c7c4b88df1a7b100b1824443078093cc0e937404d6284407db0bfc26b5863143" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="runtime-desktop-1.6.5.module">
+ <sha256 value="55f99093db72759dfc0e4ded8bf5cadb256037930b13965b136ffb805c6e59a8" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.compose.runtime" name="runtime-saveable" version="1.6.3">
@@ -630,6 +646,14 @@
<sha256 value="13a43cc361aced06050b235ae2ba0231b73b72c5bf9d14f0c3bd27169e3e06e3" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="androidx.compose.runtime" name="runtime-saveable" version="1.6.5">
+ <artifact name="runtime-saveable-1.6.5.module">
+ <sha256 value="9ef8e039096cbe5fa12a9b4f0bc6fddd82677135de4c3594224ee148e126f198" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="runtime-saveable-metadata-1.6.5.jar">
+ <sha256 value="13a43cc361aced06050b235ae2ba0231b73b72c5bf9d14f0c3bd27169e3e06e3" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="androidx.compose.runtime" name="runtime-saveable-android" version="1.6.3">
<artifact name="runtime-saveable-android-1.6.3.module">
<sha256 value="15312707c7f42d68c400abe35409d56a91158859bc959854f268109c7411eb05" origin="Generated by Gradle"/>
@@ -638,14 +662,27 @@
<sha256 value="3ee8dd49504312c82dc886467797e0db1cdc160297139879707d66221f22649c" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.compose.runtime" name="runtime-saveable-desktop" version="1.6.3">
- <artifact name="runtime-saveable-desktop-1.6.3.jar">
- <sha256 value="55064d4bd481d67a2840e52c594fc9cbbbf15c9a48f224199bbda005da705df4" origin="Generated by Gradle"/>
+ <component group="androidx.compose.runtime" name="runtime-saveable-android" version="1.6.5">
+ <artifact name="runtime-saveable-android-1.6.5.module">
+ <sha256 value="f74e223a4350be93e51d12b918b2cbc92f11a0994214bad75bf481f1d2a4204b" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="runtime-saveable-release.aar">
+ <sha256 value="37b9d44d19eff8f67daa52b33f7722fcc7121d2d1c090b637eac2847bf416850" origin="Generated by Gradle"/>
</artifact>
+ </component>
+ <component group="androidx.compose.runtime" name="runtime-saveable-desktop" version="1.6.3">
<artifact name="runtime-saveable-desktop-1.6.3.module">
<sha256 value="688ed773211ccf2b458276bd8a69b2abda087da9bb568cd38a39fc61f7b1a07e" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="androidx.compose.runtime" name="runtime-saveable-desktop" version="1.6.5">
+ <artifact name="runtime-saveable-desktop-1.6.5.jar">
+ <sha256 value="55064d4bd481d67a2840e52c594fc9cbbbf15c9a48f224199bbda005da705df4" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="runtime-saveable-desktop-1.6.5.module">
+ <sha256 value="1a4d2104c3be2ce0dc007a564af3f2ce5ab9d4e13c9bc2b36ab84365c4f2369f" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="androidx.compose.ui" name="ui" version="1.6.3">
<artifact name="ui-1.6.3.module">
<sha256 value="dc56282d37256426fa077faf3fa6116459f4d614868d76bb4f6dafda2e93b62b" origin="Generated by Gradle"/>
@@ -1157,12 +1194,12 @@
<sha256 value="0fa7f28f5cff8a406a4f7870b243cb0d6d7a7c20faa7a2becaff5907ae12f9cc" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-common" version="2.7.0">
- <artifact name="lifecycle-common-2.7.0.jar">
- <sha256 value="533ded8ee0645a18f6653da53fe1ec5a15430e7f36a737d45e410531f30f3318" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-common" version="2.8.2">
+ <artifact name="lifecycle-common-2.8.2.module">
+ <sha256 value="bbf1250f00552c82871e283dc2af380b1bc2a1b52a207f012f5d8c849544b621" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-common-2.7.0.module">
- <sha256 value="421fdbd504097803f3a8df81c3e5d50a5be48965032b1389325f7e659d27fac8" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-common-metadata-2.8.2.jar">
+ <sha256 value="e26c6d7d04a490c6fdaa1415ac95797a7dcc7444be3f3ab3d9acad87dae4921c" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-common-java8" version="2.6.1">
@@ -1181,12 +1218,20 @@
<sha256 value="3d538207d68eb89aa0166edac09422b9374819506da39be62c01f0c0f6384f7e" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-common-java8" version="2.7.0">
- <artifact name="lifecycle-common-java8-2.7.0.jar">
+ <component group="androidx.lifecycle" name="lifecycle-common-java8" version="2.8.2">
+ <artifact name="lifecycle-common-java8-2.8.2.jar">
<sha256 value="c6deada2fac53b8ea6523dbda77597b128006674616f140f04df23264c6d1aa3" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-common-java8-2.7.0.module">
- <sha256 value="ab1607cd887584d7ec2d88b3023a1934834874baf045da0974fa705aadc9ef14" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-common-java8-2.8.2.module">
+ <sha256 value="391ec077deaa358a4955d6e63c6171d4bd514c46705d9b1972b9bd33f1d2e4dc" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-common-jvm" version="2.8.2">
+ <artifact name="lifecycle-common-jvm-2.8.2.jar">
+ <sha256 value="61c873a7327c946ec033c310bb98f3f92eeabcede0e1a5200ab8a1896483c7bf" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-common-jvm-2.8.2.module">
+ <sha256 value="46b20ea622920f2c083a1f96efb983a4a16823676daed7478aa6fce5e88c3a52" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-livedata" version="2.0.0">
@@ -1210,12 +1255,12 @@
<sha256 value="19a287b46d1b1ffe297bee0df7dee5183aeba95600ec0de8742adeb5b67c8bab" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-livedata" version="2.7.0">
- <artifact name="lifecycle-livedata-2.7.0.aar">
- <sha256 value="9affa24c6160dc8cadaac9422d4f714e5009537d0243afc4bc74b5b7cf0de4ad" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-livedata" version="2.8.2">
+ <artifact name="lifecycle-livedata-2.8.2.aar">
+ <sha256 value="5b01d448a59caf922c5e9d9e9d1067f25a2b015fd5130e9baac9c86ed2464354" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-livedata-2.7.0.module">
- <sha256 value="a4ae3edfee3d53b41d235f9be30606f07f6ac01f0e2ab7a19170d7a359b61bc9" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-livedata-2.8.2.module">
+ <sha256 value="f36fd960cae98fce668cf98ea57a33af120cdee0cfb275e94fca74663a4918f6" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-livedata-core" version="2.3.0">
@@ -1255,12 +1300,12 @@
<sha256 value="527d0e1ac467d1f47cc20ed7c30db170217299fabb868154cf5d1765e4e4dad9" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-livedata-core" version="2.7.0">
- <artifact name="lifecycle-livedata-core-2.7.0.aar">
- <sha256 value="af8e11b87e030d6e3107ed39adcf01fa10d6259eb15c43cba6e7b4e3ffaedf27" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-livedata-core" version="2.8.2">
+ <artifact name="lifecycle-livedata-core-2.8.2.aar">
+ <sha256 value="906199de52b28505def4ad5e5a250286e239cd858ef8007843b80754754bf4e2" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-livedata-core-2.7.0.module">
- <sha256 value="8a08ed5f9717a3541231164336000a08c3911f8e186bc76cd526b2a822d6464d" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-livedata-core-2.8.2.module">
+ <sha256 value="f386a0f6bee8f0379c646989a45f93bf5cd1bfa4743690a6c62654a37f2f020a" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-livedata-core-ktx" version="2.6.1">
@@ -1279,12 +1324,12 @@
<sha256 value="1d6ef93736ae001c226bf2cb4b180bcb0718199a1d3868ee8846f4cc8318b779" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-livedata-core-ktx" version="2.7.0">
- <artifact name="lifecycle-livedata-core-ktx-2.7.0.aar">
- <sha256 value="a97f4c2191ebdd32f99ac229597bd1a92446b01cd1a088d13494cc05cabf0def" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-livedata-core-ktx" version="2.8.2">
+ <artifact name="lifecycle-livedata-core-ktx-2.8.2.aar">
+ <sha256 value="31617dc7d89886b3ac6e93e4a781fe3c1f9b0b29050d4fc87c89ffd5d6cc821e" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-livedata-core-ktx-2.7.0.module">
- <sha256 value="a61a7ab2f0b483e141a5925fc487c5eafb6588761d6e118ca607ce0618d72108" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-livedata-core-ktx-2.8.2.module">
+ <sha256 value="58a4bc3ca72ec82edb7f41e3dff70bfde2ac8fe6404a4af5849f848b724a4522" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-process" version="2.4.1">
@@ -1303,12 +1348,12 @@
<sha256 value="58c9e27371ccf7a22a233f44926d348c9d07e78c41a56588a4265ff6ae76645a" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-process" version="2.7.0">
- <artifact name="lifecycle-process-2.7.0.aar">
- <sha256 value="6fb33d9473a4933da9d98a0b12b606127e80681bd9b90309ccd2c2230863b939" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-process" version="2.8.2">
+ <artifact name="lifecycle-process-2.8.2.aar">
+ <sha256 value="613688bfb3eaac259cf429d804b674325bab5245b9562576e4511a765fec3b04" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-process-2.7.0.module">
- <sha256 value="e9370cae02e170f51f2affb34e41a062d3bee5e5270ec112ac8523b6ca6de96f" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-process-2.8.2.module">
+ <sha256 value="7e76faf10ecb3fe8213b4c242f8fa9b80da7942c070b4758b7a7a4217c9a9453" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-runtime" version="2.3.0">
@@ -1348,20 +1393,52 @@
<sha256 value="ea0131846abe1fe9dea59ac6dfe1f0fb9d8b6d600c9eff9a1fd4ad5ee5e7cbc7" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-runtime" version="2.7.0">
- <artifact name="lifecycle-runtime-2.7.0.aar">
- <sha256 value="81c6fb1dbb6a3cd7dc827d7b08e1c8142ed3a400a3422441108480e22f8937c4" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-runtime" version="2.8.2">
+ <artifact name="lifecycle-runtime-2.8.2.module">
+ <sha256 value="a4b8fc08f65e12449421766b83a15d41a4325f412348078d755c175e7102abc4" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-runtime-metadata-2.8.2.jar">
+ <sha256 value="4ee784530e550754230395d4f4f56817c9fcbc08db4d645e77441f3dd82c56b5" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-runtime-android" version="2.8.2">
+ <artifact name="lifecycle-runtime-android-2.8.2.module">
+ <sha256 value="ca87b1aa11ada45b66f7d8c345a5df89fd0a678412db9a1720d02b2a5ea1c77e" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-runtime-release.aar">
+ <sha256 value="158f313c1a177a66b31c696997ea3c16ff1673a8ac95b844fa227ad742d204d5" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-runtime-compose" version="2.8.2">
+ <artifact name="lifecycle-runtime-compose-2.8.2.module">
+ <sha256 value="74096c3f4eb2002dc125c7fd440cc8db36cfcf345f7f23674bf3d85020bfd1f4" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-runtime-compose-metadata-2.8.2.jar">
+ <sha256 value="1ace38c9470c78e8971ebcdf8d0390be64010fc869a7fd3c6e5eaf10370ec1ba" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-runtime-compose-android" version="2.8.2">
+ <artifact name="lifecycle-runtime-compose-android-2.8.2.module">
+ <sha256 value="4bb504e7894e53fd00f18ee9e7515119d6e0c34c58343410e026b64ddd445a82" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-runtime-compose-release.aar">
+ <sha256 value="389023fbf1ae0f5a23e168063f92472ccfa753290d43469a3e4c2154cc47b542" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-runtime-compose-desktop" version="2.8.2">
+ <artifact name="lifecycle-runtime-compose-desktop-2.8.2.jar">
+ <sha256 value="f377a65d8248148bd494bfe988376eb0d5738870bd684fdea311c3ad75013076" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-runtime-2.7.0.module">
- <sha256 value="2efb0fbe1c2fe6e683f715655b8b3eaf9a54e679c37e92616ec1ada30337d613" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-runtime-compose-desktop-2.8.2.module">
+ <sha256 value="fd5b8ef0a0732cdb75157fdf0137adea372f8aa9ad2f00d7d1e839820e285632" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-runtime-compose" version="2.7.0">
- <artifact name="lifecycle-runtime-compose-2.7.0.aar">
- <sha256 value="d4abcce8235683a0374dd4e9a78fd416eb65855658dda9d4fe4b34e5a27ff167" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-runtime-desktop" version="2.8.2">
+ <artifact name="lifecycle-runtime-desktop-2.8.2.jar">
+ <sha256 value="10bfe53bb2752f967751a5102cdb785eeea54e1d4df6bde88fb0f50b0a49156c" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-runtime-compose-2.7.0.module">
- <sha256 value="4dee71af093813dae322595e95f7aa70aea5f54a7191f664767f4025317da213" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-runtime-desktop-2.8.2.module">
+ <sha256 value="cc1e0192679467ed695987646a4e645d5060803f2913a687de71c5bc1186971c" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-runtime-ktx" version="2.5.1">
@@ -1385,20 +1462,28 @@
<sha256 value="3c9af03a3a543394e67ab599b727ba331e6f330a55829f6d52f63a8772f4cbdc" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-runtime-ktx" version="2.7.0">
- <artifact name="lifecycle-runtime-ktx-2.7.0.aar">
- <sha256 value="ef7033b15db27569771c3c0aeb6f92392b5654216195fe74136ea3e108912ad4" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-runtime-ktx" version="2.8.2">
+ <artifact name="lifecycle-runtime-ktx-2.8.2.module">
+ <sha256 value="3c7f723b662d1433797c659f48ddcdb53f3b2073b9dc9fd748941b67038d8969" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-runtime-ktx-2.7.0.module">
- <sha256 value="ebc28fc834248353425a95b35a10e8a0edb112deacdc8cc03c3a37d8167f178d" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-runtime-ktx-metadata-2.8.2.jar">
+ <sha256 value="92e90c3bd6cc2f66a15e9597cc015cd3a2f8767a9bd29d7feadaea4d44b2fccf" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-service" version="2.7.0">
- <artifact name="lifecycle-service-2.7.0.aar">
- <sha256 value="e31bd0e92bd0b31b360448ca5a5b80fc1f63507bb4ee8e9bd300437449d1789b" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-runtime-ktx-android" version="2.8.2">
+ <artifact name="lifecycle-runtime-ktx-android-2.8.2.module">
+ <sha256 value="a8878864db938c7ffe778d9296e7a7b5066954c2321a93ce33de37974098e120" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-service-2.7.0.module">
- <sha256 value="4786f3f890aa8db65ace14f34370b557e6f82252477f006d285a280eae3990a8" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-runtime-ktx-release.aar">
+ <sha256 value="cfcfaeba10fce09a5d8a1451f8d894edc60ac00552ea956ad7f561d5848ba868" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-service" version="2.8.2">
+ <artifact name="lifecycle-service-2.8.2.aar">
+ <sha256 value="aa83b5973b845ee5350c0f4358ffb137be25b71fa9f5c2cc51198fb9eb0e5201" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-service-2.8.2.module">
+ <sha256 value="e7d7985bcef0c6738de2f2ba6968c06d8ebdfc06e0298fc1e2c5b3df3a0bd7c2" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-viewmodel" version="2.3.0">
@@ -1438,20 +1523,55 @@
<sha256 value="74e9a9ea46842a25642c91de2190ac24dcc1ea017395aae0eb250057d32699c6" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-viewmodel" version="2.7.0">
- <artifact name="lifecycle-viewmodel-2.7.0.aar">
- <sha256 value="4e1d92e289920cd7b50e3671b9191bd413407349cda6f602b0285464f41c1c82" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-viewmodel" version="2.8.2">
+ <artifact name="lifecycle-viewmodel-2.8.2.aar">
+ <sha256 value="43d28a6c6da9c1cb72bfb5cc1b511a7937b2db8b79d52f37d0b7f14c79b090dd" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-viewmodel-2.8.2.module">
+ <sha256 value="72985daed5ac9f371b7328787d853bac6a95792461c5fae6243fa61e3d3f5608" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-viewmodel-metadata-2.8.2.jar">
+ <sha256 value="539281344ce8a81d33570be300d86bb872c7b719a6dd2ce494eacba438fb53ce" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-viewmodel-android" version="2.8.2">
+ <artifact name="lifecycle-viewmodel-android-2.8.2.module">
+ <sha256 value="6ba5e376f07ef5328e884814c98a979bf3870b0aac4b39de7d981599abfdd0b9" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-viewmodel-release.aar">
+ <sha256 value="e2f55a6e22af3f44a65469ef459e855fec7a77a454a1334315a1935b18ecda64" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-viewmodel-compose" version="2.8.2">
+ <artifact name="lifecycle-viewmodel-compose-2.8.2.module">
+ <sha256 value="93d79b051e42af5b2cf1f86d14b9cc7b10fe27869b9cc3d52449d88e1918294b" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-viewmodel-2.7.0.module">
- <sha256 value="f49b02d47a1a1867f9a325ea5b884fdc7ee6b02d538d016b201d33e00d30c5e1" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-viewmodel-compose-metadata-2.8.2.jar">
+ <sha256 value="68457770ac6b3e12b5f688d54e8227253cbebf1b3c137fbd00833ed4c45bd4bd" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-viewmodel-compose" version="2.7.0">
- <artifact name="lifecycle-viewmodel-compose-2.7.0.aar">
- <sha256 value="76403bb1599f6e2adc9b80372efb2674b8cbede2b0f1e6e85c4a94e10c7b94b0" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-viewmodel-compose-android" version="2.8.2">
+ <artifact name="lifecycle-viewmodel-compose-android-2.8.2.module">
+ <sha256 value="c0d74c579b5792697968517356c566723726850de9cf1c37443bc97760946b62" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-viewmodel-compose-2.7.0.module">
- <sha256 value="76416d2af29301a4d571e72c679d8d5e89536962a0ab3ea2490b8b3bcab0d26f" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-viewmodel-compose-release.aar">
+ <sha256 value="14247d8fb157362a577f3ce992c5a1fed08a6c172f43d2a781083e598a4871f0" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-viewmodel-compose-desktop" version="2.8.2">
+ <artifact name="lifecycle-viewmodel-compose-desktop-2.8.2.jar">
+ <sha256 value="2e0d6ac771c572bc3d637188a07fc6366ee9143f8d2bc28d7aeec73938ee8717" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-viewmodel-compose-desktop-2.8.2.module">
+ <sha256 value="5130a9dd485967c3fa538048f4c812ea270221abc9e6c90f9a32ecf2bc0d3c9d" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
+ <component group="androidx.lifecycle" name="lifecycle-viewmodel-desktop" version="2.8.2">
+ <artifact name="lifecycle-viewmodel-desktop-2.8.2.jar">
+ <sha256 value="1ae614e1535b0a975746b4152ef6900651434095870fe2e7d084ec62eb48edca" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="lifecycle-viewmodel-desktop-2.8.2.module">
+ <sha256 value="67c8b7e0d90e19aa11309667f38a1aec57fb87c8d0291b7d4772b4f01ff6e6e3" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-viewmodel-ktx" version="2.6.1">
@@ -1470,12 +1590,12 @@
<sha256 value="16d314c6ec774cf83216c46e6e7fa96c615e1d2611995d368389154b57741861" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-viewmodel-ktx" version="2.7.0">
- <artifact name="lifecycle-viewmodel-ktx-2.7.0.aar">
- <sha256 value="b492dbfc85926471367112f6d0e5d2c9991e855c5421ab37399396cc0123e2af" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-viewmodel-ktx" version="2.8.2">
+ <artifact name="lifecycle-viewmodel-ktx-2.8.2.aar">
+ <sha256 value="b29dbe88d03faef613125339e8767e4e851b60789ddfd2fd141190d0b815a324" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-viewmodel-ktx-2.7.0.module">
- <sha256 value="412cfafe3050b0161a645f45d1be5e623d28ffbedc71581232cab45a3f54400d" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-viewmodel-ktx-2.8.2.module">
+ <sha256 value="3831834bb6851170557081e4a26a01591d3035af52a9b948ab14763584a0cc7a" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.lifecycle" name="lifecycle-viewmodel-savedstate" version="2.3.0">
@@ -1515,12 +1635,12 @@
<sha256 value="79f9d92880c2fb7827ac6739eb747264245ae456f4c21f77cf39fdb6a50a76ae" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="androidx.lifecycle" name="lifecycle-viewmodel-savedstate" version="2.7.0">
- <artifact name="lifecycle-viewmodel-savedstate-2.7.0.aar">
- <sha256 value="57c578862e219e360c6957ff0bca6f169707b1e5582d4fa593e284f7f63e33f6" origin="Generated by Gradle"/>
+ <component group="androidx.lifecycle" name="lifecycle-viewmodel-savedstate" version="2.8.2">
+ <artifact name="lifecycle-viewmodel-savedstate-2.8.2.aar">
+ <sha256 value="2dc62627f265fa750d440c0d8589443faf04f77dce8a7efce3b390c52b0fe8dc" origin="Generated by Gradle"/>
</artifact>
- <artifact name="lifecycle-viewmodel-savedstate-2.7.0.module">
- <sha256 value="cf6e60bc3beb4a46373e09d86ebd9ba290ac51b41cd1c20ed27d7aaaaacab188" origin="Generated by Gradle"/>
+ <artifact name="lifecycle-viewmodel-savedstate-2.8.2.module">
+ <sha256 value="d8ea7b73e8c300339417d1fff1e9af396c819f8bd24ad189d455158e0ce78783" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.loader" name="loader" version="1.0.0">
@@ -1576,6 +1696,14 @@
<sha256 value="a16fe511e599c2042da122be09569aecd3f4f90cad37ef08bd0bbc39118c92c8" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="androidx.profileinstaller" name="profileinstaller" version="1.3.1">
+ <artifact name="profileinstaller-1.3.1.aar">
+ <sha256 value="d0e402ec31f24028a1dc7eb6a0a3f9d9635c1459392cd734396343b73d673948" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="profileinstaller-1.3.1.module">
+ <sha256 value="cc7eed0ed4b669de84b852f78797a50018a4f30002e1e38aaa668af22ca5b460" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="androidx.resourceinspection" name="resourceinspection-annotation" version="1.0.1">
<artifact name="resourceinspection-annotation-1.0.1.jar">
<sha256 value="8cff870ec6fb31db48a52f4a792335b4bf8de07e03bd37823181526433ccd5cb" origin="Generated by Gradle"/>
@@ -2598,9 +2726,6 @@
<artifact name="protoc-3.25.3-linux-x86_64.exe">
<sha256 value="e718992c5733ece01264f160c0890229770791e51c9612a2b34dc17f83ab3773" origin="Generated by Gradle"/>
</artifact>
- <artifact name="protoc-3.25.3-osx-aarch_64.exe">
- <sha256 value="af8c1bd4fb34ca9215e32a9911d2b5ccd275d120155c42e8d910dcfecc51362d" origin="Generated by Gradle"/>
- </artifact>
</component>
<component group="com.google.testing.platform" name="android-device-provider-local" version="0.0.9-alpha02">
<artifact name="android-device-provider-local-0.0.9-alpha02.jar">
@@ -3061,22 +3186,6 @@
<sha256 value="860c30ddd4fc86b4dd169e4bfece64661501419309c6471c53ec6cb466a8be6f" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="io.arrow-kt" name="arrow-autoclose" version="1.2.3">
- <artifact name="arrow-autoclose-1.2.3.module">
- <sha256 value="387840ab5ac3f84be2ae48154271f22a332bf11dc0edb60c322c4faba2638180" origin="Generated by Gradle"/>
- </artifact>
- <artifact name="arrow-autoclose-metadata-1.2.3.jar">
- <sha256 value="87799eb6b7cc44b18a2fba1af38fbb43a5e057d6b8a3de934181554dc00e1f43" origin="Generated by Gradle"/>
- </artifact>
- </component>
- <component group="io.arrow-kt" name="arrow-autoclose-jvm" version="1.2.3">
- <artifact name="arrow-autoclose-jvm-1.2.3.jar">
- <sha256 value="125f9800e0bbfb9b8fa21c0a7a740fdde6f822fc4acc68b0480753cdb1cbd17f" origin="Generated by Gradle"/>
- </artifact>
- <artifact name="arrow-autoclose-jvm-1.2.3.module">
- <sha256 value="beace0a9954fbed210430d66b5467d42bfd36a368606c444712d4827354202f6" origin="Generated by Gradle"/>
- </artifact>
- </component>
<component group="io.arrow-kt" name="arrow-continuations" version="1.2.3">
<artifact name="arrow-continuations-1.2.3.module">
<sha256 value="e1a2bfce36818c8e0b8f1f870ea64effccbf9b2c23966eab3ac9d1cfe84927fc" origin="Generated by Gradle"/>
@@ -3109,22 +3218,6 @@
<sha256 value="1ff5a88b276200b1a9e7b7dbd6c1f183f86a2010c8e077f82056a2e72c0fffe7" origin="Generated by Gradle"/>
</artifact>
</component>
- <component group="io.arrow-kt" name="arrow-fx-coroutines" version="1.2.3">
- <artifact name="arrow-fx-coroutines-1.2.3.module">
- <sha256 value="5987e27c5b5b6b9a6657e394f614d4f1f548b5896cf1c218ea8d50b53a37f2a5" origin="Generated by Gradle"/>
- </artifact>
- <artifact name="arrow-fx-coroutines-metadata-1.2.3.jar">
- <sha256 value="491b616943afe2e11ae237c892c2c525e32ad7ca94a2cb6812f27677a8aa705f" origin="Generated by Gradle"/>
- </artifact>
- </component>
- <component group="io.arrow-kt" name="arrow-fx-coroutines-jvm" version="1.2.3">
- <artifact name="arrow-fx-coroutines-jvm-1.2.3.jar">
- <sha256 value="b13dce3b153338fbbd23bbe6fa8d218f4b0ab13e82c07bc7851379828dfe00fb" origin="Generated by Gradle"/>
- </artifact>
- <artifact name="arrow-fx-coroutines-jvm-1.2.3.module">
- <sha256 value="07fe2a0a10ebb377e2ecf83f8bfcd5d7d14edccfa5f9c036c79c1ef5d0e97d12" origin="Generated by Gradle"/>
- </artifact>
- </component>
<component group="io.arrow-kt" name="arrow-optics" version="1.2.3">
<artifact name="arrow-optics-1.2.3.module">
<sha256 value="eeb3691404db8a52866f3db713ddbd919fdfaa9a6302437d3b7f3b8c5aed213b" origin="Generated by Gradle"/>
@@ -3494,9 +3587,6 @@
<artifact name="protoc-gen-grpc-java-1.63.0-linux-x86_64.exe">
<sha256 value="0e3e8db80ba1fbddeed97ea3220b52cfaa95764ff8bf00716df7322883ce47e8" origin="Generated by Gradle"/>
</artifact>
- <artifact name="protoc-gen-grpc-java-1.63.0-osx-aarch_64.exe">
- <sha256 value="28290117a2ee9ea60f50f94273ab139dc2b3be4b8f2a557bef7e6efefee5b363" origin="Generated by Gradle"/>
- </artifact>
</component>
<component group="io.grpc" name="protoc-gen-grpc-kotlin" version="1.4.1">
<artifact name="protoc-gen-grpc-kotlin-1.4.1-jdk8.jar">
@@ -4730,6 +4820,14 @@
<sha256 value="2a91f10b826d3febc47c2b664e268615757c311114239787f5dc37481fdec441" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="org.jetbrains.kotlinx" name="atomicfu" version="0.21.0">
+ <artifact name="atomicfu-0.21.0.module">
+ <sha256 value="c4aba64788420b0b54c877900f27ba385c3d170e878ca2faf378ec315cfcb076" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="atomicfu-metadata-0.21.0-all.jar">
+ <sha256 value="f31e5b2fd52eb73a0303cffe5c63c8390ca7cf459a02dcf06faa383dd4bb88d3" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="org.jetbrains.kotlinx" name="atomicfu" version="0.23.1">
<artifact name="atomicfu-0.23.1.module">
<sha256 value="3e891fe636b55108192100fcf38b1a39bcd1c2533e23c462fc07644eeafcb20f" origin="Generated by Gradle"/>
@@ -4804,6 +4902,14 @@
<sha256 value="b7d5370ed0e54952003b13595a67b97ced3f873d919f5ddfbe50fcd499cbf0a7" origin="Generated by Gradle"/>
</artifact>
</component>
+ <component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core" version="1.7.3">
+ <artifact name="kotlinx-coroutines-core-1.7.3.module">
+ <sha256 value="7fb162396594ec28e1b6a4411b457949a7670f5e12019176774e1fd6b9471bbf" origin="Generated by Gradle"/>
+ </artifact>
+ <artifact name="kotlinx-coroutines-core-metadata-1.7.3.jar">
+ <sha256 value="f9522095aedcc2a6ab32c7484061ea698352c71be1390adb403b59aa48a38fdc" origin="Generated by Gradle"/>
+ </artifact>
+ </component>
<component group="org.jetbrains.kotlinx" name="kotlinx-coroutines-core" version="1.8.0">
<artifact name="kotlinx-coroutines-core-1.8.0.module">
<sha256 value="144eecd5365de3e30d7b46226c058051e39955b5c189e31fa4c7cffb99d620ba" origin="Generated by Gradle"/>