Skip to content

Commit f6e9ac4

Browse files
committed
Show removed provider in FilterScreen so user can remove it.
1 parent 413ba13 commit f6e9ac4

File tree

5 files changed

+32
-1
lines changed

5 files changed

+32
-1
lines changed

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/cell/CheckboxCell.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ internal fun CheckboxCell(
3131
modifier: Modifier = Modifier,
3232
title: String,
3333
checked: Boolean,
34+
enabled: Boolean = true,
3435
onCheckedChange: (Boolean) -> Unit,
3536
background: Color = MaterialTheme.colorScheme.surfaceContainerLow,
3637
startPadding: Dp = Dimens.mediumPadding,
@@ -41,7 +42,7 @@ internal fun CheckboxCell(
4142
verticalAlignment = Alignment.CenterVertically,
4243
modifier =
4344
modifier
44-
.clickable { onCheckedChange(!checked) }
45+
.clickable(enabled) { onCheckedChange(!checked) }
4546
.defaultMinSize(minHeight = minHeight)
4647
.fillMaxWidth()
4748
.background(background)

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

+24
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,14 @@ fun FilterScreen(
138138
itemWithDivider(key = Keys.PROVIDERS_ALL, contentType = ContentType.ITEM) {
139139
AllProviders(state, onAllProviderCheckChange)
140140
}
141+
itemsWithDivider(
142+
key = { it.value },
143+
contentType = { ContentType.ITEM },
144+
items = state.removedProviders,
145+
) { provider ->
146+
RemovedProvider(provider, state, onSelectedProvider)
147+
}
148+
141149
itemsWithDivider(
142150
key = { it.value },
143151
contentType = { ContentType.ITEM },
@@ -228,6 +236,22 @@ private fun LazyItemScope.Provider(
228236
)
229237
}
230238

239+
@Composable
240+
private fun LazyItemScope.RemovedProvider(
241+
providerId: ProviderId,
242+
state: RelayFilterUiState,
243+
onSelectedProvider: (checked: Boolean, providerId: ProviderId) -> Unit,
244+
) {
245+
val checked = providerId in state.selectedProviders
246+
CheckboxCell(
247+
title = stringResource(R.string.removed_provider, providerId.value),
248+
checked = checked,
249+
enabled = checked,
250+
onCheckedChange = { checked -> onSelectedProvider(checked, providerId) },
251+
modifier = Modifier.animateItem(),
252+
)
253+
}
254+
231255
@Composable
232256
private fun TopBar(onBackClick: () -> Unit) {
233257
Row(Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) {

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/RelayFilterUiState.kt

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ data class RelayFilterUiState(
2929
allProviders
3030
}
3131

32+
val removedProviders: List<ProviderId> = selectedProviders - allProviders
33+
3234
val isApplyButtonEnabled = selectedProviders.isNotEmpty()
3335

3436
val isAllProvidersChecked = allProviders.size == selectedProviders.size

android/lib/resource/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@
402402
<string name="x_entry">%s (Entry)</string>
403403
<string name="x_exit">%s (Exit)</string>
404404
<string name="filters">Filters:</string>
405+
<string name="removed_provider">%s (removed)</string>
405406
<string name="search_query_empty">Type at least 2 characters to start searching.</string>
406407
<string name="daita_description_slide_1_first_paragraph">%1$s (%2$s) hides patterns in your encrypted VPN traffic.</string>
407408
<string name="daita_description_slide_1_second_paragraph">By using sophisticated AI it’s possible to analyze the traffic of data packets going in and out of your device (even if the traffic is encrypted).</string>

desktop/packages/mullvad-vpn/locales/messages.pot

+3
Original file line numberDiff line numberDiff line change
@@ -2266,6 +2266,9 @@ msgstr ""
22662266
msgid "%s (added)"
22672267
msgstr ""
22682268

2269+
msgid "%s (removed)"
2270+
msgstr ""
2271+
22692272
msgid "%s custom port"
22702273
msgstr ""
22712274

0 commit comments

Comments
 (0)