Skip to content

Commit 8ae2314

Browse files
committed
Merge branch 'add-guide-for-auto-connect-and-lockdown-mode-droid-548'
2 parents df37a0d + f8f7da0 commit 8ae2314

31 files changed

+514
-14
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ Line wrap the file at 100 chars. Th
3737
#### Android
3838
- Add support for all screen orientations.
3939
- Add toggle for enabling or disabling split tunneling.
40+
- Replace auto connect with auto connect and lockdown mode guide on platforms that has
41+
system vpn settings.
4042

4143
### Fixed
4244
- Fix connectivity issues that would occur when using quantum-resistant tunnels with an incorrectly

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt

+67
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package net.mullvad.mullvadvpn.compose.component
22

3+
import androidx.compose.foundation.background
34
import androidx.compose.foundation.layout.Column
45
import androidx.compose.foundation.layout.PaddingValues
56
import androidx.compose.foundation.layout.RowScope
67
import androidx.compose.foundation.layout.fillMaxSize
78
import androidx.compose.foundation.layout.padding
9+
import androidx.compose.foundation.layout.systemBarsPadding
810
import androidx.compose.foundation.lazy.LazyListState
911
import androidx.compose.foundation.lazy.rememberLazyListState
1012
import androidx.compose.foundation.rememberScrollState
1113
import androidx.compose.foundation.verticalScroll
1214
import androidx.compose.material3.ExperimentalMaterial3Api
15+
import androidx.compose.material3.Icon
1316
import androidx.compose.material3.MaterialTheme
1417
import androidx.compose.material3.Scaffold
1518
import androidx.compose.material3.Snackbar
@@ -23,6 +26,10 @@ import androidx.compose.runtime.remember
2326
import androidx.compose.ui.Modifier
2427
import androidx.compose.ui.graphics.Color
2528
import androidx.compose.ui.input.nestedscroll.nestedScroll
29+
import androidx.compose.ui.res.painterResource
30+
import net.mullvad.mullvadvpn.R
31+
import net.mullvad.mullvadvpn.compose.button.PrimaryButton
32+
import net.mullvad.mullvadvpn.lib.theme.Dimens
2633
import net.mullvad.mullvadvpn.lib.theme.color.AlphaScrollbar
2734
import net.mullvad.mullvadvpn.lib.theme.color.AlphaTopBar
2835

@@ -183,3 +190,63 @@ fun ScaffoldWithMediumTopBar(
183190
}
184191
)
185192
}
193+
194+
@OptIn(ExperimentalMaterial3Api::class)
195+
@Composable
196+
fun ScaffoldWithLargeTopBarAndButton(
197+
appBarTitle: String,
198+
modifier: Modifier = Modifier,
199+
navigationIcon: @Composable () -> Unit = {},
200+
actions: @Composable RowScope.() -> Unit = {},
201+
onButtonClick: () -> Unit = {}, // Add button
202+
buttonTitle: String,
203+
scrollbarColor: Color = MaterialTheme.colorScheme.onBackground.copy(alpha = AlphaScrollbar),
204+
content: @Composable (modifier: Modifier) -> Unit
205+
) {
206+
val appBarState = rememberTopAppBarState()
207+
val scrollState = rememberScrollState()
208+
val canScroll = scrollState.canScrollForward || scrollState.canScrollBackward
209+
val scrollBehavior =
210+
TopAppBarDefaults.exitUntilCollapsedScrollBehavior(appBarState, canScroll = { canScroll })
211+
Scaffold(
212+
modifier =
213+
modifier
214+
.fillMaxSize()
215+
.background(MaterialTheme.colorScheme.background)
216+
.systemBarsPadding()
217+
.nestedScroll(scrollBehavior.nestedScrollConnection),
218+
topBar = {
219+
MullvadLargeTopBar(
220+
title = appBarTitle,
221+
navigationIcon = navigationIcon,
222+
actions,
223+
scrollBehavior = scrollBehavior
224+
)
225+
},
226+
bottomBar = {
227+
PrimaryButton(
228+
text = buttonTitle,
229+
onClick = onButtonClick,
230+
modifier =
231+
Modifier.padding(
232+
horizontal = Dimens.sideMargin,
233+
vertical = Dimens.screenVerticalMargin
234+
),
235+
icon = {
236+
Icon(
237+
painter = painterResource(id = R.drawable.icon_extlink),
238+
contentDescription = null
239+
)
240+
},
241+
)
242+
},
243+
content = {
244+
content(
245+
Modifier.fillMaxSize()
246+
.padding(it)
247+
.drawVerticalScrollbar(state = scrollState, color = scrollbarColor)
248+
.verticalScroll(scrollState)
249+
)
250+
}
251+
)
252+
}

android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt

+33
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.size
2020
import androidx.compose.material3.ExperimentalMaterial3Api
2121
import androidx.compose.material3.Icon
2222
import androidx.compose.material3.IconButton
23+
import androidx.compose.material3.LargeTopAppBar
2324
import androidx.compose.material3.MaterialTheme
2425
import androidx.compose.material3.MediumTopAppBar
2526
import androidx.compose.material3.Surface
@@ -198,6 +199,16 @@ private fun PreviewMediumTopBar() {
198199
}
199200
}
200201

202+
@Preview
203+
@Composable
204+
private fun PreviewLargeTopBar() {
205+
AppTheme {
206+
MullvadLargeTopBar(
207+
title = "Title",
208+
)
209+
}
210+
}
211+
201212
@Preview(widthDp = 260)
202213
@Composable
203214
private fun PreviewSlimMediumTopBar() {
@@ -237,6 +248,28 @@ fun MullvadMediumTopBar(
237248
)
238249
}
239250

251+
@OptIn(ExperimentalMaterial3Api::class)
252+
@Composable
253+
fun MullvadLargeTopBar(
254+
title: String,
255+
navigationIcon: @Composable () -> Unit = {},
256+
actions: @Composable RowScope.() -> Unit = {},
257+
scrollBehavior: TopAppBarScrollBehavior? = null
258+
) {
259+
LargeTopAppBar(
260+
title = { Text(text = title, maxLines = 2, overflow = TextOverflow.Ellipsis) },
261+
navigationIcon = navigationIcon,
262+
scrollBehavior = scrollBehavior,
263+
colors =
264+
TopAppBarDefaults.mediumTopAppBarColors(
265+
containerColor = MaterialTheme.colorScheme.background,
266+
scrolledContainerColor = MaterialTheme.colorScheme.background,
267+
actionIconContentColor = MaterialTheme.colorScheme.onPrimary.copy(AlphaTopBar),
268+
),
269+
actions = actions
270+
)
271+
}
272+
240273
@Preview
241274
@Composable
242275
private fun PreviewMullvadTopBarWithLongDeviceName() {

0 commit comments

Comments
 (0)