summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ChangelogDialogTest.kt2
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreenTest.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scrollbar.kt17
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Theme.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt300
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/theme/Theme.kt17
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt55
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceListFragment.kt31
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceRevokedFragment.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LoadingFragment.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/PrivacyDisclaimerFragment.kt29
12 files changed, 240 insertions, 228 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index be19251a53..c26d7bedfc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -36,6 +36,7 @@ Line wrap the file at 100 chars. Th
#### Android
- Clarify some of the error messages showed in notifications.
- Change and add text in Content blockers informational dialog.
+- Update advanced settings scrollbar appearance.
### Deprecated
#### Linux
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ChangelogDialogTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ChangelogDialogTest.kt
index 3fffcb63c1..85a9c49810 100644
--- a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ChangelogDialogTest.kt
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/ChangelogDialogTest.kt
@@ -10,8 +10,8 @@ import io.mockk.impl.annotations.MockK
import io.mockk.just
import io.mockk.verify
import kotlinx.coroutines.flow.MutableStateFlow
-import net.mullvad.mullvadvpn.compose.component.AppTheme
import net.mullvad.mullvadvpn.compose.dialog.ChangelogDialog
+import net.mullvad.mullvadvpn.compose.theme.AppTheme
import net.mullvad.mullvadvpn.viewmodel.ChangelogDialogUiState
import net.mullvad.mullvadvpn.viewmodel.ChangelogViewModel
import org.junit.Before
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreenTest.kt
index 741e57612e..a974346f5f 100644
--- a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreenTest.kt
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/DeviceRevokedScreenTest.kt
@@ -10,8 +10,8 @@ import io.mockk.impl.annotations.MockK
import io.mockk.just
import io.mockk.verify
import kotlinx.coroutines.flow.MutableStateFlow
-import net.mullvad.mullvadvpn.compose.component.AppTheme
import net.mullvad.mullvadvpn.compose.state.DeviceRevokedUiState
+import net.mullvad.mullvadvpn.compose.theme.AppTheme
import net.mullvad.mullvadvpn.viewmodel.DeviceRevokedViewModel
import org.junit.Before
import org.junit.Rule
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scrollbar.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scrollbar.kt
index da5759ec1c..4af39cf4b5 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scrollbar.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scrollbar.kt
@@ -1,7 +1,7 @@
package net.mullvad.mullvadvpn.compose.component
/*
- * Code snippet taken from https://gist.github.com/mxalbert1996/33a360fcab2105a31e5355af98216f5a
+ * Code snippet with minor modifications from: https://gist.github.com/mxalbert1996/33a360fcab2105a31e5355af98216f5a
*
* MIT License
*
@@ -51,6 +51,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.draw.drawWithContent
+import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color
@@ -193,6 +194,7 @@ private fun DrawScope.drawScrollbar(
startOffset: Float
) {
val thicknessPx = Thickness.toPx()
+ val radiusPx = Radius.toPx()
val topLeft =
if (orientation == Orientation.Horizontal) {
Offset(
@@ -212,7 +214,13 @@ private fun DrawScope.drawScrollbar(
Size(thicknessPx, thumbSize)
}
- drawRect(color = color, topLeft = topLeft, size = size, alpha = alpha())
+ drawRoundRect(
+ color = color,
+ topLeft = topLeft,
+ size = size,
+ alpha = alpha(),
+ cornerRadius = CornerRadius(radiusPx, radiusPx)
+ )
}
private fun Modifier.drawScrollbar(
@@ -270,9 +278,10 @@ private fun Modifier.drawScrollbar(
}
private val BarColor: Color
- @Composable get() = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.5f)
+ @Composable get() = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.6f)
-private val Thickness = 4.dp
+private val Thickness = 8.dp
+private val Radius = 4.dp
private val FadeOutAnimationSpec =
tween<Float>(durationMillis = ViewConfiguration.getScrollBarFadeDuration())
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Theme.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Theme.kt
deleted file mode 100644
index 8257dab2db..0000000000
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Theme.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package net.mullvad.mullvadvpn.compose.component
-
-import androidx.compose.material.MaterialTheme
-import androidx.compose.runtime.Composable
-
-@Composable
-fun AppTheme(content: @Composable () -> Unit) {
- MaterialTheme(content = content)
-}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt
index c85fa54cce..92c58f1f77 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AdvancedSettingScreen.kt
@@ -52,7 +52,6 @@ import net.mullvad.mullvadvpn.compose.dialog.MalwareInfoDialog
import net.mullvad.mullvadvpn.compose.dialog.MtuDialog
import net.mullvad.mullvadvpn.compose.extensions.itemWithDivider
import net.mullvad.mullvadvpn.compose.state.AdvancedSettingsUiState
-import net.mullvad.mullvadvpn.compose.theme.CollapsingToolbarTheme
import net.mullvad.mullvadvpn.compose.theme.MullvadBlue20
import net.mullvad.mullvadvpn.compose.theme.MullvadDarkBlue
import net.mullvad.mullvadvpn.viewmodel.CustomDnsItem
@@ -159,185 +158,182 @@ fun AdvancedSettingScreen(
var expandContentBlockersState by rememberSaveable { mutableStateOf(false) }
val biggerPadding = 54.dp
val topPadding = 6.dp
- CollapsingToolbarTheme {
- val state = rememberCollapsingToolbarScaffoldState()
- val progress = state.toolbarState.progress
+ val state = rememberCollapsingToolbarScaffoldState()
+ val progress = state.toolbarState.progress
- CollapsableAwareToolbarScaffold(
- backgroundColor = MullvadDarkBlue,
- modifier = Modifier.fillMaxSize(),
- state = state,
- scrollStrategy = ScrollStrategy.ExitUntilCollapsed,
- isEnabledWhenCollapsable = true,
- toolbar = {
- val scaffoldModifier =
- Modifier.road(
- whenCollapsed = Alignment.TopCenter,
- whenExpanded = Alignment.BottomStart
- )
- CollapsingTopBar(
- backgroundColor = MullvadDarkBlue,
- onBackClicked = { onBackClick() },
- title = stringResource(id = R.string.settings_advanced),
- progress = progress,
- modifier = scaffoldModifier,
- backTitle = stringResource(id = R.string.settings)
+ CollapsableAwareToolbarScaffold(
+ backgroundColor = MullvadDarkBlue,
+ modifier = Modifier.fillMaxSize(),
+ state = state,
+ scrollStrategy = ScrollStrategy.ExitUntilCollapsed,
+ isEnabledWhenCollapsable = true,
+ toolbar = {
+ val scaffoldModifier =
+ Modifier.road(
+ whenCollapsed = Alignment.TopCenter,
+ whenExpanded = Alignment.BottomStart
)
+ CollapsingTopBar(
+ backgroundColor = MullvadDarkBlue,
+ onBackClicked = { onBackClick() },
+ title = stringResource(id = R.string.settings_advanced),
+ progress = progress,
+ modifier = scaffoldModifier,
+ backTitle = stringResource(id = R.string.settings)
+ )
+ }
+ ) {
+ DisposableEffect(lifecycleOwner) {
+ val observer = LifecycleEventObserver { _, event ->
+ if (event == Lifecycle.Event.ON_STOP) {
+ onStopEvent()
+ }
}
+ lifecycleOwner.lifecycle.addObserver(observer)
+ onDispose { lifecycleOwner.lifecycle.removeObserver(observer) }
+ }
+ LazyColumn(
+ modifier =
+ Modifier.drawVerticalScrollbar(lazyListState)
+ .fillMaxWidth()
+ .wrapContentHeight()
+ .animateContentSize(),
+ state = lazyListState
) {
- DisposableEffect(lifecycleOwner) {
- val observer = LifecycleEventObserver { _, event ->
- if (event == Lifecycle.Event.ON_STOP) {
- onStopEvent()
- }
- }
- lifecycleOwner.lifecycle.addObserver(observer)
- onDispose { lifecycleOwner.lifecycle.removeObserver(observer) }
+ item { MtuComposeCell(mtuValue = uiState.mtu, onEditMtu = { onMtuCellClick() }) }
+
+ itemWithDivider {
+ NavigationComposeCell(
+ title = stringResource(id = R.string.split_tunneling),
+ onClick = { onSplitTunnelingNavigationClick.invoke() }
+ )
}
- LazyColumn(
- modifier =
- Modifier.drawVerticalScrollbar(lazyListState)
- .fillMaxWidth()
- .wrapContentHeight()
- .animateContentSize(),
- state = lazyListState
- ) {
- item { MtuComposeCell(mtuValue = uiState.mtu, onEditMtu = { onMtuCellClick() }) }
+ itemWithDivider {
+ ExpandableComposeCell(
+ title = stringResource(R.string.dns_content_blockers_title),
+ isExpanded = !expandContentBlockersState,
+ isEnabled = !uiState.isCustomDnsEnabled,
+ onInfoClicked = { onContentsBlockersInfoClicked() },
+ onCellClicked = { expandContentBlockersState = !expandContentBlockersState }
+ )
+ }
+
+ if (expandContentBlockersState) {
itemWithDivider {
- NavigationComposeCell(
- title = stringResource(id = R.string.split_tunneling),
- onClick = { onSplitTunnelingNavigationClick.invoke() }
+ SwitchComposeCell(
+ title = stringResource(R.string.block_ads_title),
+ isToggled = uiState.contentBlockersOptions.blockAds,
+ isEnabled = !uiState.isCustomDnsEnabled,
+ onCellClicked = { onToggleBlockAds(it) },
+ background = MullvadBlue20
)
}
-
itemWithDivider {
- ExpandableComposeCell(
- title = stringResource(R.string.dns_content_blockers_title),
- isExpanded = !expandContentBlockersState,
+ SwitchComposeCell(
+ title = stringResource(R.string.block_trackers_title),
+ isToggled = uiState.contentBlockersOptions.blockTrackers,
isEnabled = !uiState.isCustomDnsEnabled,
- onInfoClicked = { onContentsBlockersInfoClicked() },
- onCellClicked = { expandContentBlockersState = !expandContentBlockersState }
+ onCellClicked = { onToggleBlockTrackers(it) },
+ background = MullvadBlue20
)
}
-
- if (expandContentBlockersState) {
- itemWithDivider {
- SwitchComposeCell(
- title = stringResource(R.string.block_ads_title),
- isToggled = uiState.contentBlockersOptions.blockAds,
- isEnabled = !uiState.isCustomDnsEnabled,
- onCellClicked = { onToggleBlockAds(it) },
- background = MullvadBlue20
- )
- }
- itemWithDivider {
- SwitchComposeCell(
- title = stringResource(R.string.block_trackers_title),
- isToggled = uiState.contentBlockersOptions.blockTrackers,
- isEnabled = !uiState.isCustomDnsEnabled,
- onCellClicked = { onToggleBlockTrackers(it) },
- background = MullvadBlue20
- )
- }
- itemWithDivider {
- SwitchComposeCell(
- title = stringResource(R.string.block_malware_title),
- isToggled = uiState.contentBlockersOptions.blockMalware,
- isEnabled = !uiState.isCustomDnsEnabled,
- onCellClicked = { onToggleBlockMalware(it) },
- onInfoClicked = { onMalwareInfoClicked() },
- background = MullvadBlue20
- )
- }
- itemWithDivider {
- SwitchComposeCell(
- title = stringResource(R.string.block_gambling_title),
- isToggled = uiState.contentBlockersOptions.blockGambling,
- isEnabled = !uiState.isCustomDnsEnabled,
- onCellClicked = { onToggleBlockGambling(it) },
- background = MullvadBlue20
- )
- }
- itemWithDivider {
- SwitchComposeCell(
- title = stringResource(R.string.block_adult_content_title),
- isToggled = uiState.contentBlockersOptions.blockAdultContent,
- isEnabled = !uiState.isCustomDnsEnabled,
- onCellClicked = { onToggleBlockAdultContent(it) },
- background = MullvadBlue20
- )
- }
-
- if (uiState.isCustomDnsEnabled) {
- item {
- ContentBlockersDisableModeCellSubtitle(
- Modifier.background(MullvadDarkBlue)
- .padding(
- start = cellHorizontalSpacing,
- top = topPadding,
- end = cellHorizontalSpacing,
- bottom = cellVerticalSpacing,
- )
- )
- }
- }
+ itemWithDivider {
+ SwitchComposeCell(
+ title = stringResource(R.string.block_malware_title),
+ isToggled = uiState.contentBlockersOptions.blockMalware,
+ isEnabled = !uiState.isCustomDnsEnabled,
+ onCellClicked = { onToggleBlockMalware(it) },
+ onInfoClicked = { onMalwareInfoClicked() },
+ background = MullvadBlue20
+ )
}
-
- item {
- Spacer(modifier = Modifier.height(cellVerticalSpacing))
+ itemWithDivider {
SwitchComposeCell(
- title = stringResource(R.string.enable_custom_dns),
- isToggled = uiState.isCustomDnsEnabled,
- isEnabled = uiState.contentBlockersOptions.isAnyBlockerEnabled().not(),
- onCellClicked = { newValue -> onToggleDnsClick(newValue) }
+ title = stringResource(R.string.block_gambling_title),
+ isToggled = uiState.contentBlockersOptions.blockGambling,
+ isEnabled = !uiState.isCustomDnsEnabled,
+ onCellClicked = { onToggleBlockGambling(it) },
+ background = MullvadBlue20
)
}
-
- if (uiState.isCustomDnsEnabled) {
- itemsIndexed(uiState.customDnsItems) { index, item ->
- DnsCell(
- address = item.address,
- isUnreachableLocalDnsWarningVisible =
- item.isLocal && uiState.isAllowLanEnabled.not(),
- onClick = { onDnsClick(index) },
- modifier = Modifier.animateItemPlacement()
- )
- Divider()
- }
-
- itemWithDivider {
- BaseCell(
- onCellClicked = { onDnsClick(null) },
- title = {
- Text(
- text = stringResource(id = R.string.add_a_server),
- color = Color.White,
- )
- },
- bodyView = {},
- subtitle = null,
- background = MullvadBlue20,
- startPadding = biggerPadding
- )
- }
+ itemWithDivider {
+ SwitchComposeCell(
+ title = stringResource(R.string.block_adult_content_title),
+ isToggled = uiState.contentBlockersOptions.blockAdultContent,
+ isEnabled = !uiState.isCustomDnsEnabled,
+ onCellClicked = { onToggleBlockAdultContent(it) },
+ background = MullvadBlue20
+ )
}
- item {
- CustomDnsCellSubtitle(
- isCellClickable =
- uiState.contentBlockersOptions.isAnyBlockerEnabled().not(),
- modifier =
+ if (uiState.isCustomDnsEnabled) {
+ item {
+ ContentBlockersDisableModeCellSubtitle(
Modifier.background(MullvadDarkBlue)
.padding(
start = cellHorizontalSpacing,
top = topPadding,
end = cellHorizontalSpacing,
- bottom = cellVerticalSpacing
+ bottom = cellVerticalSpacing,
)
+ )
+ }
+ }
+ }
+
+ item {
+ Spacer(modifier = Modifier.height(cellVerticalSpacing))
+ SwitchComposeCell(
+ title = stringResource(R.string.enable_custom_dns),
+ isToggled = uiState.isCustomDnsEnabled,
+ isEnabled = uiState.contentBlockersOptions.isAnyBlockerEnabled().not(),
+ onCellClicked = { newValue -> onToggleDnsClick(newValue) }
+ )
+ }
+
+ if (uiState.isCustomDnsEnabled) {
+ itemsIndexed(uiState.customDnsItems) { index, item ->
+ DnsCell(
+ address = item.address,
+ isUnreachableLocalDnsWarningVisible =
+ item.isLocal && uiState.isAllowLanEnabled.not(),
+ onClick = { onDnsClick(index) },
+ modifier = Modifier.animateItemPlacement()
+ )
+ Divider()
+ }
+
+ itemWithDivider {
+ BaseCell(
+ onCellClicked = { onDnsClick(null) },
+ title = {
+ Text(
+ text = stringResource(id = R.string.add_a_server),
+ color = Color.White,
+ )
+ },
+ bodyView = {},
+ subtitle = null,
+ background = MullvadBlue20,
+ startPadding = biggerPadding
)
}
}
+
+ item {
+ CustomDnsCellSubtitle(
+ isCellClickable = uiState.contentBlockersOptions.isAnyBlockerEnabled().not(),
+ modifier =
+ Modifier.background(MullvadDarkBlue)
+ .padding(
+ start = cellHorizontalSpacing,
+ top = topPadding,
+ end = cellHorizontalSpacing,
+ bottom = cellVerticalSpacing
+ )
+ )
+ }
}
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/theme/Theme.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/theme/Theme.kt
index e02626029e..d1de017412 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/theme/Theme.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/theme/Theme.kt
@@ -1,14 +1,19 @@
package net.mullvad.mullvadvpn.compose.theme
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material.MaterialTheme
-import androidx.compose.material.Shapes
-import androidx.compose.material.lightColors
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Shapes
+import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
private val MullvadColorPalette =
- lightColors(primary = MullvadBlue, primaryVariant = MullvadDarkBlue, secondary = MullvadRed)
+ lightColorScheme(
+ primary = MullvadBlue,
+ secondary = MullvadDarkBlue,
+ tertiary = MullvadRed,
+ onSurfaceVariant = MullvadWhite
+ )
val Shapes =
Shapes(
@@ -18,8 +23,8 @@ val Shapes =
)
@Composable
-fun CollapsingToolbarTheme(content: @Composable () -> Unit) {
+fun AppTheme(content: @Composable () -> Unit) {
val colors = MullvadColorPalette
- MaterialTheme(colors = colors, shapes = Shapes, content = content)
+ MaterialTheme(colorScheme = colors, shapes = Shapes, content = content)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt
index a928397453..62661b0455 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AdvancedFragment.kt
@@ -9,6 +9,7 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.ui.platform.ComposeView
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.screen.AdvancedSettingScreen
+import net.mullvad.mullvadvpn.compose.theme.AppTheme
import net.mullvad.mullvadvpn.viewmodel.AdvancedSettingsViewModel
import org.koin.androidx.viewmodel.ext.android.viewModel
@@ -23,32 +24,34 @@ class AdvancedFragment : BaseFragment() {
): View? {
return inflater.inflate(R.layout.fragment_compose, container, false).apply {
findViewById<ComposeView>(R.id.compose_view).setContent {
- val state = vm.uiState.collectAsState().value
- AdvancedSettingScreen(
- uiState = state,
- onMtuCellClick = vm::onMtuCellClick,
- onMtuInputChange = vm::onMtuInputChange,
- onSaveMtuClick = vm::onSaveMtuClick,
- onRestoreMtuClick = vm::onRestoreMtuClick,
- onCancelMtuDialogClicked = vm::onCancelDialogClick,
- onSplitTunnelingNavigationClick = ::openSplitTunnelingFragment,
- onToggleDnsClick = vm::onToggleDnsClick,
- onToggleBlockAds = vm::onToggleBlockAds,
- onToggleBlockTrackers = vm::onToggleBlockTrackers,
- onToggleBlockMalware = vm::onToggleBlockMalware,
- onToggleBlockAdultContent = vm::onToggleBlockAdultContent,
- onToggleBlockGambling = vm::onToggleBlockGambling,
- onDnsClick = vm::onDnsClick,
- onDnsInputChange = vm::onDnsInputChange,
- onSaveDnsClick = vm::onSaveDnsClick,
- onRemoveDnsClick = vm::onRemoveDnsClick,
- onCancelDnsDialogClick = vm::onCancelDialogClick,
- onContentsBlockersInfoClicked = vm::onContentsBlockerInfoClick,
- onMalwareInfoClicked = vm::onMalwareInfoClick,
- onDismissInfoClicked = vm::onDismissInfoClick,
- onBackClick = { activity?.onBackPressed() },
- onStopEvent = vm::onStopEvent
- )
+ AppTheme {
+ val state = vm.uiState.collectAsState().value
+ AdvancedSettingScreen(
+ uiState = state,
+ onMtuCellClick = vm::onMtuCellClick,
+ onMtuInputChange = vm::onMtuInputChange,
+ onSaveMtuClick = vm::onSaveMtuClick,
+ onRestoreMtuClick = vm::onRestoreMtuClick,
+ onCancelMtuDialogClicked = vm::onCancelDialogClick,
+ onSplitTunnelingNavigationClick = ::openSplitTunnelingFragment,
+ onToggleDnsClick = vm::onToggleDnsClick,
+ onToggleBlockAds = vm::onToggleBlockAds,
+ onToggleBlockTrackers = vm::onToggleBlockTrackers,
+ onToggleBlockMalware = vm::onToggleBlockMalware,
+ onToggleBlockAdultContent = vm::onToggleBlockAdultContent,
+ onToggleBlockGambling = vm::onToggleBlockGambling,
+ onDnsClick = vm::onDnsClick,
+ onDnsInputChange = vm::onDnsInputChange,
+ onSaveDnsClick = vm::onSaveDnsClick,
+ onRemoveDnsClick = vm::onRemoveDnsClick,
+ onCancelDnsDialogClick = vm::onCancelDialogClick,
+ onContentsBlockersInfoClicked = vm::onContentsBlockerInfoClick,
+ onMalwareInfoClicked = vm::onMalwareInfoClick,
+ onDismissInfoClicked = vm::onDismissInfoClick,
+ onBackClick = { activity?.onBackPressed() },
+ onStopEvent = vm::onStopEvent
+ )
+ }
}
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceListFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceListFragment.kt
index a382381cd8..2dab40c06a 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceListFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceListFragment.kt
@@ -16,6 +16,7 @@ import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithTopBar
import net.mullvad.mullvadvpn.compose.screen.DeviceListScreen
+import net.mullvad.mullvadvpn.compose.theme.AppTheme
import net.mullvad.mullvadvpn.ui.MainActivity
import net.mullvad.mullvadvpn.viewmodel.DeviceListViewModel
import org.koin.androidx.viewmodel.ext.android.viewModel
@@ -38,20 +39,22 @@ class DeviceListFragment : Fragment() {
return inflater.inflate(R.layout.fragment_compose, container, false).apply {
findViewById<ComposeView>(R.id.compose_view).setContent {
- val topColor = colorResource(R.color.blue)
- ScaffoldWithTopBar(
- topBarColor = topColor,
- statusBarColor = topColor,
- navigationBarColor = colorResource(id = R.color.darkBlue),
- onSettingsClicked = this@DeviceListFragment::openSettings,
- content = {
- DeviceListScreen(
- viewModel = deviceListViewModel,
- onBackClick = { openLoginView(doTriggerAutoLogin = false) },
- onContinueWithLogin = { openLoginView(doTriggerAutoLogin = true) }
- )
- }
- )
+ AppTheme {
+ val topColor = colorResource(R.color.blue)
+ ScaffoldWithTopBar(
+ topBarColor = topColor,
+ statusBarColor = topColor,
+ navigationBarColor = colorResource(id = R.color.darkBlue),
+ onSettingsClicked = this@DeviceListFragment::openSettings,
+ content = {
+ DeviceListScreen(
+ viewModel = deviceListViewModel,
+ onBackClick = { openLoginView(doTriggerAutoLogin = false) },
+ onContinueWithLogin = { openLoginView(doTriggerAutoLogin = true) }
+ )
+ }
+ )
+ }
}
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceRevokedFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceRevokedFragment.kt
index f63e7d4322..62036a08ae 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceRevokedFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/DeviceRevokedFragment.kt
@@ -9,10 +9,10 @@ import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.res.colorResource
import androidx.fragment.app.Fragment
import net.mullvad.mullvadvpn.R
-import net.mullvad.mullvadvpn.compose.component.AppTheme
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithTopBar
import net.mullvad.mullvadvpn.compose.screen.DeviceRevokedScreen
import net.mullvad.mullvadvpn.compose.state.DeviceRevokedUiState
+import net.mullvad.mullvadvpn.compose.theme.AppTheme
import net.mullvad.mullvadvpn.ui.MainActivity
import net.mullvad.mullvadvpn.viewmodel.DeviceRevokedViewModel
import org.koin.androidx.viewmodel.ext.android.viewModel
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LoadingFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LoadingFragment.kt
index 0c83acf20d..7d33bd85e2 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LoadingFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LoadingFragment.kt
@@ -8,6 +8,7 @@ import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.Fragment
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.screen.LoadingScreen
+import net.mullvad.mullvadvpn.compose.theme.AppTheme
import net.mullvad.mullvadvpn.ui.MainActivity
import net.mullvad.mullvadvpn.ui.NavigationBarPainter
import net.mullvad.mullvadvpn.ui.StatusBarPainter
@@ -20,7 +21,7 @@ class LoadingFragment : Fragment(), StatusBarPainter, NavigationBarPainter {
): View {
return inflater.inflate(R.layout.fragment_compose, container, false).apply {
findViewById<ComposeView>(R.id.compose_view).setContent {
- LoadingScreen(this@LoadingFragment::openSettings)
+ AppTheme { LoadingScreen(this@LoadingFragment::openSettings) }
}
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/PrivacyDisclaimerFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/PrivacyDisclaimerFragment.kt
index 9f7b652fd5..4115d5dc07 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/PrivacyDisclaimerFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/PrivacyDisclaimerFragment.kt
@@ -12,6 +12,7 @@ import androidx.fragment.app.Fragment
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithTopBar
import net.mullvad.mullvadvpn.compose.screen.PrivacyDisclaimerScreen
+import net.mullvad.mullvadvpn.compose.theme.AppTheme
import net.mullvad.mullvadvpn.lib.endpoint.getApiEndpointConfigurationExtras
import net.mullvad.mullvadvpn.ui.MainActivity
import net.mullvad.mullvadvpn.ui.NavigationBarPainter
@@ -30,19 +31,21 @@ class PrivacyDisclaimerFragment : Fragment(), StatusBarPainter, NavigationBarPai
): View {
return inflater.inflate(R.layout.fragment_compose, container, false).apply {
findViewById<ComposeView>(R.id.compose_view).setContent {
- val topColor = colorResource(R.color.blue)
- ScaffoldWithTopBar(
- topBarColor = topColor,
- statusBarColor = topColor,
- navigationBarColor = colorResource(id = R.color.darkBlue),
- onSettingsClicked = null,
- content = {
- PrivacyDisclaimerScreen(
- onPrivacyPolicyLinkClicked = { openPrivacyPolicy() },
- onAcceptClicked = { handleAcceptedPrivacyDisclaimer() }
- )
- }
- )
+ AppTheme {
+ val topColor = colorResource(R.color.blue)
+ ScaffoldWithTopBar(
+ topBarColor = topColor,
+ statusBarColor = topColor,
+ navigationBarColor = colorResource(id = R.color.darkBlue),
+ onSettingsClicked = null,
+ content = {
+ PrivacyDisclaimerScreen(
+ onPrivacyPolicyLinkClicked = { openPrivacyPolicy() },
+ onAcceptClicked = { handleAcceptedPrivacyDisclaimer() }
+ )
+ }
+ )
+ }
}
}
}