1
1
package net.mullvad.mullvadvpn.compose.component
2
2
3
+ import androidx.compose.foundation.background
3
4
import androidx.compose.foundation.layout.Column
4
5
import androidx.compose.foundation.layout.PaddingValues
5
6
import androidx.compose.foundation.layout.RowScope
6
7
import androidx.compose.foundation.layout.fillMaxSize
7
8
import androidx.compose.foundation.layout.padding
9
+ import androidx.compose.foundation.layout.systemBarsPadding
8
10
import androidx.compose.foundation.lazy.LazyListState
9
11
import androidx.compose.foundation.lazy.rememberLazyListState
10
12
import androidx.compose.foundation.rememberScrollState
11
13
import androidx.compose.foundation.verticalScroll
12
14
import androidx.compose.material3.ExperimentalMaterial3Api
15
+ import androidx.compose.material3.Icon
13
16
import androidx.compose.material3.MaterialTheme
14
17
import androidx.compose.material3.Scaffold
15
18
import androidx.compose.material3.Snackbar
@@ -23,6 +26,10 @@ import androidx.compose.runtime.remember
23
26
import androidx.compose.ui.Modifier
24
27
import androidx.compose.ui.graphics.Color
25
28
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
26
33
import net.mullvad.mullvadvpn.lib.theme.color.AlphaScrollbar
27
34
import net.mullvad.mullvadvpn.lib.theme.color.AlphaTopBar
28
35
@@ -183,3 +190,63 @@ fun ScaffoldWithMediumTopBar(
183
190
}
184
191
)
185
192
}
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
+ }
0 commit comments