@@ -3,20 +3,15 @@ package net.mullvad.mullvadvpn.compose.cell
3
3
import android.graphics.Bitmap
4
4
import androidx.compose.foundation.Image
5
5
import androidx.compose.foundation.background
6
- import androidx.compose.foundation.clickable
7
- import androidx.compose.foundation.layout.Column
8
- import androidx.compose.foundation.layout.Row
9
- import androidx.compose.foundation.layout.defaultMinSize
10
- import androidx.compose.foundation.layout.fillMaxWidth
11
6
import androidx.compose.foundation.layout.padding
12
7
import androidx.compose.foundation.layout.size
13
- import androidx.compose.foundation.layout.wrapContentHeight
14
8
import androidx.compose.material3.Icon
15
9
import androidx.compose.material3.MaterialTheme
16
10
import androidx.compose.material3.Text
17
11
import androidx.compose.runtime.*
18
12
import androidx.compose.ui.Alignment
19
13
import androidx.compose.ui.Modifier
14
+ import androidx.compose.ui.graphics.Color
20
15
import androidx.compose.ui.graphics.ImageBitmap
21
16
import androidx.compose.ui.graphics.asImageBitmap
22
17
import androidx.compose.ui.graphics.compositeOver
@@ -27,6 +22,7 @@ import androidx.compose.ui.unit.dp
27
22
import kotlinx.coroutines.Dispatchers
28
23
import kotlinx.coroutines.launch
29
24
import net.mullvad.mullvadvpn.R
25
+ import net.mullvad.mullvadvpn.compose.component.SpacedColumn
30
26
import net.mullvad.mullvadvpn.lib.theme.AppTheme
31
27
import net.mullvad.mullvadvpn.lib.theme.Dimens
32
28
import net.mullvad.mullvadvpn.lib.theme.color.Alpha40
@@ -36,7 +32,7 @@ import net.mullvad.mullvadvpn.lib.theme.typeface.listItemText
36
32
@Composable
37
33
private fun PreviewTunnelingCell () {
38
34
AppTheme {
39
- Column (
35
+ SpacedColumn (
40
36
modifier =
41
37
Modifier .background(color = MaterialTheme .colorScheme.background).padding(20 .dp)
42
38
) {
@@ -52,6 +48,10 @@ fun SplitTunnelingCell(
52
48
packageName : String? ,
53
49
isSelected : Boolean ,
54
50
modifier : Modifier = Modifier ,
51
+ backgroundColor : Color =
52
+ MaterialTheme .colorScheme.primary
53
+ .copy(alpha = Alpha40 )
54
+ .compositeOver(MaterialTheme .colorScheme.background),
55
55
onResolveIcon : (String ) -> Bitmap ? = { null },
56
56
onCellClicked : () -> Unit = {}
57
57
) {
@@ -62,55 +62,49 @@ fun SplitTunnelingCell(
62
62
icon = bitmap?.asImageBitmap()
63
63
}
64
64
}
65
- Row (
66
- modifier =
67
- modifier
68
- .wrapContentHeight()
69
- .defaultMinSize(minHeight = Dimens .listItemHeightExtra)
70
- .fillMaxWidth()
71
- .padding(bottom = Dimens .listItemDivider)
72
- .background(
73
- MaterialTheme .colorScheme.primary
65
+ BaseCell (
66
+ iconView = {
67
+ Image (
68
+ painter =
69
+ icon?.let { iconImage -> BitmapPainter (iconImage) }
70
+ ? : painterResource(id = R .drawable.ic_icons_missing),
71
+ contentDescription = null ,
72
+ modifier =
73
+ Modifier .align(Alignment .CenterVertically ).size(size = Dimens .listIconSize)
74
+ )
75
+ },
76
+ title = {
77
+ Text (
78
+ text = title,
79
+ style = MaterialTheme .typography.listItemText,
80
+ color = MaterialTheme .colorScheme.onPrimary,
81
+ modifier =
82
+ Modifier .weight(1f )
83
+ .padding(horizontal = Dimens .mediumPadding)
84
+ .align(Alignment .CenterVertically )
85
+ )
86
+ },
87
+ bodyView = {
88
+ Icon (
89
+ painter =
90
+ painterResource(
91
+ id =
92
+ if (isSelected) {
93
+ R .drawable.ic_icons_remove
94
+ } else {
95
+ R .drawable.ic_icons_add
96
+ }
97
+ ),
98
+ contentDescription = null ,
99
+ tint =
100
+ MaterialTheme .colorScheme.onBackground
74
101
.copy(alpha = Alpha40 )
75
- .compositeOver(MaterialTheme .colorScheme.background)
76
- )
77
- .clickable(onClick = onCellClicked)
78
- ) {
79
- Image (
80
- painter =
81
- icon?.let { iconImage -> BitmapPainter (iconImage) }
82
- ? : painterResource(id = R .drawable.ic_icons_missing),
83
- contentDescription = null ,
84
- modifier =
85
- Modifier .padding(start = Dimens .cellStartPadding)
86
- .align(Alignment .CenterVertically )
87
- .size(width = Dimens .listIconSize, height = Dimens .listIconSize)
88
- )
89
- Text (
90
- text = title,
91
- style = MaterialTheme .typography.listItemText,
92
- color = MaterialTheme .colorScheme.onPrimary,
93
- modifier =
94
- Modifier .weight(1f )
95
- .padding(horizontal = Dimens .mediumPadding, vertical = Dimens .smallPadding)
96
- .align(Alignment .CenterVertically )
97
- )
98
- Icon (
99
- painter =
100
- painterResource(
101
- id =
102
- if (isSelected) {
103
- R .drawable.ic_icons_remove
104
- } else {
105
- R .drawable.ic_icons_add
106
- }
107
- ),
108
- contentDescription = null ,
109
- tint = MaterialTheme .colorScheme.onBackground.copy(alpha = Alpha40 ),
110
- modifier =
111
- Modifier .padding(end = Dimens .cellStartPadding)
112
- .align(Alignment .CenterVertically )
113
- .padding(horizontal = Dimens .loadingSpinnerPadding)
114
- )
115
- }
102
+ .compositeOver(backgroundColor),
103
+ modifier = Modifier .size(size = Dimens .addIconSize)
104
+ )
105
+ },
106
+ onCellClicked = onCellClicked,
107
+ background = backgroundColor,
108
+ modifier = modifier
109
+ )
116
110
}
0 commit comments