Skip to content

Commit 5f98469

Browse files
committed
Use navargs
Update baseline
1 parent c6771e8 commit 5f98469

39 files changed

+327
-242
lines changed

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/CreateCustomListDialog.kt

+7-5
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import net.mullvad.mullvadvpn.usecase.customlists.CreateWithLocationsError
3434
import net.mullvad.mullvadvpn.viewmodel.CreateCustomListDialogSideEffect
3535
import net.mullvad.mullvadvpn.viewmodel.CreateCustomListDialogViewModel
3636
import org.koin.androidx.compose.koinViewModel
37-
import org.koin.core.parameter.parametersOf
3837

3938
@Preview
4039
@Composable
@@ -55,15 +54,18 @@ private fun PreviewCreateCustomListDialogError() {
5554
}
5655
}
5756

57+
data class CreateCustomListNavArgs(val locationCode: GeoLocationId?)
58+
5859
@Composable
59-
@Destination<RootGraph>(style = DestinationStyle.Dialog::class)
60+
@Destination<RootGraph>(
61+
style = DestinationStyle.Dialog::class,
62+
navArgs = CreateCustomListNavArgs::class
63+
)
6064
fun CreateCustomList(
6165
navigator: DestinationsNavigator,
6266
backNavigator: ResultBackNavigator<Created>,
63-
locationCode: GeoLocationId? = null
6467
) {
65-
val vm: CreateCustomListDialogViewModel =
66-
koinViewModel(parameters = { parametersOf(locationCode) })
68+
val vm: CreateCustomListDialogViewModel = koinViewModel()
6769
LaunchedEffect(key1 = Unit) {
6870
vm.uiSideEffect.collect { sideEffect ->
6971
when (sideEffect) {

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeleteApiAccessMethodConfirmationDialog.kt

+7-7
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,24 @@ import net.mullvad.mullvadvpn.lib.theme.AppTheme
1616
import net.mullvad.mullvadvpn.viewmodel.DeleteApiAccessMethodConfirmationSideEffect
1717
import net.mullvad.mullvadvpn.viewmodel.DeleteApiAccessMethodConfirmationViewModel
1818
import org.koin.androidx.compose.koinViewModel
19-
import org.koin.core.parameter.parametersOf
2019

2120
@Preview
2221
@Composable
2322
private fun PreviewDeleteApiAccessMethodConfirmationDialog() {
2423
AppTheme { DeleteApiAccessMethodConfirmationDialog(state = DeleteApiAccessMethodUiState(null)) }
2524
}
2625

26+
data class DeleteApiAccessMethodNavArgs(val apiAccessMethodId: ApiAccessMethodId)
27+
2728
@Composable
28-
@Destination<RootGraph>(style = DestinationStyle.Dialog::class)
29+
@Destination<RootGraph>(
30+
style = DestinationStyle.Dialog::class,
31+
navArgs = DeleteApiAccessMethodNavArgs::class
32+
)
2933
fun DeleteApiAccessMethodConfirmation(
3034
navigator: ResultBackNavigator<Boolean>,
31-
apiAccessMethodId: ApiAccessMethodId
3235
) {
33-
val viewModel =
34-
koinViewModel<DeleteApiAccessMethodConfirmationViewModel>(
35-
parameters = { parametersOf(apiAccessMethodId) }
36-
)
36+
val viewModel = koinViewModel<DeleteApiAccessMethodConfirmationViewModel>()
3737
val state = viewModel.uiState.collectAsStateWithLifecycle()
3838

3939
LaunchedEffectCollect(viewModel.uiSideEffect) {

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DeleteCustomListConfirmationDialog.kt

+15-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.mullvad.mullvadvpn.compose.dialog
22

33
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.getValue
45
import androidx.compose.ui.res.stringResource
56
import androidx.compose.ui.tooling.preview.Preview
67
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -19,29 +20,29 @@ import net.mullvad.mullvadvpn.lib.theme.AppTheme
1920
import net.mullvad.mullvadvpn.viewmodel.DeleteCustomListConfirmationSideEffect
2021
import net.mullvad.mullvadvpn.viewmodel.DeleteCustomListConfirmationViewModel
2122
import org.koin.androidx.compose.koinViewModel
22-
import org.koin.core.parameter.parametersOf
2323

2424
@Preview
2525
@Composable
2626
private fun PreviewRemoveDeviceConfirmationDialog() {
2727
AppTheme {
2828
DeleteCustomListConfirmationDialog(
29-
state = DeleteCustomListUiState(null),
30-
name = CustomListName.fromString("My Custom List")
29+
state = DeleteCustomListUiState(CustomListName.fromString("My Custom List"), null)
3130
)
3231
}
3332
}
3433

34+
data class DeleteCustomListNavArgs(val customListId: CustomListId, val name: CustomListName)
35+
3536
@Composable
36-
@Destination<RootGraph>(style = DestinationStyle.Dialog::class)
37+
@Destination<RootGraph>(
38+
style = DestinationStyle.Dialog::class,
39+
navArgs = DeleteCustomListNavArgs::class
40+
)
3741
fun DeleteCustomList(
3842
navigator: ResultBackNavigator<Deleted>,
39-
customListId: CustomListId,
40-
name: CustomListName
4143
) {
42-
val viewModel: DeleteCustomListConfirmationViewModel =
43-
koinViewModel(parameters = { parametersOf(customListId) })
44-
val state = viewModel.uiState.collectAsStateWithLifecycle()
44+
val viewModel: DeleteCustomListConfirmationViewModel = koinViewModel()
45+
val state by viewModel.uiState.collectAsStateWithLifecycle()
4546

4647
LaunchedEffectCollect(viewModel.uiSideEffect) {
4748
when (it) {
@@ -51,8 +52,7 @@ fun DeleteCustomList(
5152
}
5253

5354
DeleteCustomListConfirmationDialog(
54-
state = state.value,
55-
name = name,
55+
state = state,
5656
onDelete = viewModel::deleteCustomList,
5757
onBack = dropUnlessResumed { navigator.navigateBack() }
5858
)
@@ -61,15 +61,17 @@ fun DeleteCustomList(
6161
@Composable
6262
fun DeleteCustomListConfirmationDialog(
6363
state: DeleteCustomListUiState,
64-
name: CustomListName,
6564
onDelete: () -> Unit = {},
6665
onBack: () -> Unit = {}
6766
) {
6867
DeleteConfirmationDialog(
6968
onDelete = onDelete,
7069
onBack = onBack,
7170
message =
72-
stringResource(id = R.string.delete_custom_list_confirmation_description, name.value),
71+
stringResource(
72+
id = R.string.delete_custom_list_confirmation_description,
73+
state.name.value
74+
),
7375
errorMessage =
7476
if (state.deleteError != null) {
7577
stringResource(id = R.string.error_occurred)

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/DnsDialog.kt

+7-6
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import net.mullvad.mullvadvpn.viewmodel.DnsDialogViewModel
3232
import net.mullvad.mullvadvpn.viewmodel.DnsDialogViewState
3333
import net.mullvad.mullvadvpn.viewmodel.ValidationError
3434
import org.koin.androidx.compose.koinViewModel
35-
import org.koin.core.parameter.parametersOf
3635

3736
@Preview
3837
@Composable
@@ -52,15 +51,17 @@ private fun PreviewDnsDialogEditAllowLanDisabled() {
5251
AppTheme { DnsDialog(DnsDialogViewState("192.168.1.1", null, true, false, 0), {}, {}, {}, {}) }
5352
}
5453

55-
@Destination<RootGraph>(style = DestinationStyle.Dialog::class)
54+
data class DnsDialogNavArgs(
55+
val index: Int? = null,
56+
val initialValue: String? = null,
57+
)
58+
59+
@Destination<RootGraph>(style = DestinationStyle.Dialog::class, navArgs = DnsDialogNavArgs::class)
5660
@Composable
5761
fun DnsDialog(
5862
resultNavigator: ResultBackNavigator<DnsDialogResult>,
59-
index: Int?,
60-
initialValue: String?,
6163
) {
62-
val viewModel =
63-
koinViewModel<DnsDialogViewModel>(parameters = { parametersOf(initialValue, index) })
64+
val viewModel = koinViewModel<DnsDialogViewModel>()
6465

6566
LaunchedEffectCollect(viewModel.uiSideEffect) {
6667
when (it) {

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/EditCustomListNameDialog.kt

+17-22
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ import androidx.compose.material3.AlertDialog
44
import androidx.compose.material3.MaterialTheme
55
import androidx.compose.material3.Text
66
import androidx.compose.runtime.Composable
7-
import androidx.compose.runtime.derivedStateOf
87
import androidx.compose.runtime.getValue
9-
import androidx.compose.runtime.mutableStateOf
10-
import androidx.compose.runtime.remember
118
import androidx.compose.ui.Modifier
129
import androidx.compose.ui.platform.testTag
1310
import androidx.compose.ui.res.stringResource
@@ -35,23 +32,27 @@ import net.mullvad.mullvadvpn.usecase.customlists.RenameError
3532
import net.mullvad.mullvadvpn.viewmodel.EditCustomListNameDialogSideEffect
3633
import net.mullvad.mullvadvpn.viewmodel.EditCustomListNameDialogViewModel
3734
import org.koin.androidx.compose.koinViewModel
38-
import org.koin.core.parameter.parametersOf
3935

4036
@Preview
4137
@Composable
4238
private fun PreviewEditCustomListNameDialog() {
4339
AppTheme { EditCustomListNameDialog(EditCustomListNameUiState()) }
4440
}
4541

42+
data class EditCustomListNameNavArgs(
43+
val customListId: CustomListId,
44+
val initialName: CustomListName
45+
)
46+
4647
@Composable
47-
@Destination<RootGraph>(style = DestinationStyle.Dialog::class)
48+
@Destination<RootGraph>(
49+
style = DestinationStyle.Dialog::class,
50+
navArgs = EditCustomListNameNavArgs::class
51+
)
4852
fun EditCustomListName(
4953
backNavigator: ResultBackNavigator<Renamed>,
50-
customListId: CustomListId,
51-
initialName: CustomListName
5254
) {
53-
val vm: EditCustomListNameDialogViewModel =
54-
koinViewModel(parameters = { parametersOf(customListId, initialName) })
55+
val vm: EditCustomListNameDialogViewModel = koinViewModel()
5556
LaunchedEffectCollect(vm.uiSideEffect) { sideEffect ->
5657
when (sideEffect) {
5758
is EditCustomListNameDialogSideEffect.ReturnWithResult -> {
@@ -64,7 +65,7 @@ fun EditCustomListName(
6465
EditCustomListNameDialog(
6566
state = state,
6667
updateName = vm::updateCustomListName,
67-
onInputChanged = vm::clearError,
68+
onInputChanged = vm::onNameChanged,
6869
onDismiss = dropUnlessResumed { backNavigator.navigateBack() }
6970
)
7071
}
@@ -73,12 +74,9 @@ fun EditCustomListName(
7374
fun EditCustomListNameDialog(
7475
state: EditCustomListNameUiState,
7576
updateName: (String) -> Unit = {},
76-
onInputChanged: () -> Unit = {},
77+
onInputChanged: (String) -> Unit = {},
7778
onDismiss: () -> Unit = {}
7879
) {
79-
val name = remember { mutableStateOf(state.name) }
80-
val isValidName by remember { derivedStateOf { name.value.isNotBlank() } }
81-
8280
AlertDialog(
8381
title = {
8482
Text(
@@ -87,14 +85,11 @@ fun EditCustomListNameDialog(
8785
},
8886
text = {
8987
CustomListNameTextField(
90-
name = name.value,
91-
isValidName = isValidName,
88+
name = state.name,
89+
isValidName = state.isValidName,
9290
error = state.error?.errorString(),
9391
onSubmit = updateName,
94-
onValueChanged = {
95-
name.value = it
96-
onInputChanged()
97-
},
92+
onValueChanged = onInputChanged,
9893
modifier = Modifier.testTag(EDIT_CUSTOM_LIST_DIALOG_INPUT_TEST_TAG)
9994
)
10095
},
@@ -104,8 +99,8 @@ fun EditCustomListNameDialog(
10499
confirmButton = {
105100
PrimaryButton(
106101
text = stringResource(id = R.string.save),
107-
onClick = { updateName(name.value) },
108-
isEnabled = isValidName
102+
onClick = { updateName(state.name) },
103+
isEnabled = state.isValidName
109104
)
110105
},
111106
dismissButton = {

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/MtuDialog.kt

+6-5
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,19 @@ import net.mullvad.mullvadvpn.viewmodel.MtuDialogSideEffect
3434
import net.mullvad.mullvadvpn.viewmodel.MtuDialogUiState
3535
import net.mullvad.mullvadvpn.viewmodel.MtuDialogViewModel
3636
import org.koin.androidx.compose.koinViewModel
37-
import org.koin.core.parameter.parametersOf
3837

3938
@Preview
4039
@Composable
4140
private fun PreviewMtuDialog() {
42-
AppTheme { MtuDialog(mtuInitial = Mtu(1234), EmptyResultBackNavigator()) }
41+
AppTheme { MtuDialog(EmptyResultBackNavigator()) }
4342
}
4443

45-
@Destination<RootGraph>(style = DestinationStyle.Dialog::class)
44+
data class MtuNavArgs(val initialMtu: Mtu? = null)
45+
46+
@Destination<RootGraph>(style = DestinationStyle.Dialog::class, navArgs = MtuNavArgs::class)
4647
@Composable
47-
fun MtuDialog(mtuInitial: Mtu?, navigator: ResultBackNavigator<Boolean>) {
48-
val viewModel = koinViewModel<MtuDialogViewModel>(parameters = { parametersOf(mtuInitial) })
48+
fun MtuDialog(navigator: ResultBackNavigator<Boolean>) {
49+
val viewModel = koinViewModel<MtuDialogViewModel>()
4950

5051
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
5152
LaunchedEffectCollect(viewModel.uiSideEffect) {

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/SaveApiAccessMethodDialog.kt

+11-9
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import net.mullvad.mullvadvpn.lib.theme.AppTheme
3535
import net.mullvad.mullvadvpn.viewmodel.SaveApiAccessMethodSideEffect
3636
import net.mullvad.mullvadvpn.viewmodel.SaveApiAccessMethodViewModel
3737
import org.koin.androidx.compose.koinViewModel
38-
import org.koin.core.parameter.parametersOf
3938

4039
@Preview
4140
@Composable
@@ -46,18 +45,21 @@ private fun PreviewSaveApiAccessMethodDialog(
4645
AppTheme { SaveApiAccessMethodDialog(state = state) }
4746
}
4847

49-
@Destination<RootGraph>(style = DestinationStyle.Dialog::class)
48+
data class SaveApiAccessMethodNavArgs(
49+
val id: ApiAccessMethodId?,
50+
val name: ApiAccessMethodName,
51+
val customProxy: ApiAccessMethod.CustomProxy
52+
)
53+
54+
@Destination<RootGraph>(
55+
style = DestinationStyle.Dialog::class,
56+
navArgs = SaveApiAccessMethodNavArgs::class
57+
)
5058
@Composable
5159
fun SaveApiAccessMethod(
5260
backNavigator: ResultBackNavigator<Boolean>,
53-
id: ApiAccessMethodId?,
54-
name: ApiAccessMethodName,
55-
customProxy: ApiAccessMethod.CustomProxy
5661
) {
57-
val viewModel =
58-
koinViewModel<SaveApiAccessMethodViewModel>(
59-
parameters = { parametersOf(id, name, customProxy) }
60-
)
62+
val viewModel = koinViewModel<SaveApiAccessMethodViewModel>()
6163

6264
LaunchedEffectCollect(sideEffect = viewModel.uiSideEffect) {
6365
when (it) {

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ApiAccessMethodDetailsScreen.kt

+7-7
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ import net.mullvad.mullvadvpn.lib.theme.color.menuItemColors
6565
import net.mullvad.mullvadvpn.viewmodel.ApiAccessMethodDetailsSideEffect
6666
import net.mullvad.mullvadvpn.viewmodel.ApiAccessMethodDetailsViewModel
6767
import org.koin.androidx.compose.koinViewModel
68-
import org.koin.core.parameter.parametersOf
6968

7069
@Preview
7170
@Composable
@@ -76,18 +75,19 @@ private fun PreviewApiAccessMethodDetailsScreen(
7675
AppTheme { ApiAccessMethodDetailsScreen(state = state) }
7776
}
7877

79-
@Destination<RootGraph>(style = SlideInFromRightTransition::class)
78+
data class ApiAccessMethodDetailsNavArgs(val accessMethodId: ApiAccessMethodId)
79+
80+
@Destination<RootGraph>(
81+
style = SlideInFromRightTransition::class,
82+
navArgs = ApiAccessMethodDetailsNavArgs::class
83+
)
8084
@Composable
8185
fun ApiAccessMethodDetails(
8286
navigator: DestinationsNavigator,
83-
accessMethodId: ApiAccessMethodId,
8487
confirmDeleteListResultRecipient:
8588
ResultRecipient<DeleteApiAccessMethodConfirmationDestination, Boolean>
8689
) {
87-
val viewModel =
88-
koinViewModel<ApiAccessMethodDetailsViewModel>(
89-
parameters = { parametersOf(accessMethodId) }
90-
)
90+
val viewModel = koinViewModel<ApiAccessMethodDetailsViewModel>()
9191

9292
val snackbarHostState = remember { SnackbarHostState() }
9393
val context = LocalContext.current

0 commit comments

Comments
 (0)