@@ -4,25 +4,29 @@ import androidx.compose.foundation.layout.Arrangement
44import androidx.compose.foundation.layout.Column
55import androidx.compose.foundation.layout.Row
66import androidx.compose.foundation.layout.Spacer
7+ import androidx.compose.foundation.layout.fillMaxSize
78import androidx.compose.foundation.layout.fillMaxWidth
89import androidx.compose.foundation.layout.height
910import androidx.compose.foundation.layout.padding
10- import androidx.compose.foundation.layout.width
1111import androidx.compose.foundation.rememberScrollState
1212import androidx.compose.foundation.verticalScroll
13+ import androidx.compose.material.icons.Icons
14+ import androidx.compose.material.icons.automirrored.filled.ArrowBack
15+ import androidx.compose.material3.Button
16+ import androidx.compose.material3.CenterAlignedTopAppBar
1317import androidx.compose.material3.ExperimentalMaterial3Api
14- import androidx.compose.material3.FilledTonalButton
18+ import androidx.compose.material3.HorizontalDivider
19+ import androidx.compose.material3.Icon
20+ import androidx.compose.material3.IconButton
1521import androidx.compose.material3.MaterialTheme
16- import androidx.compose.material3.ModalBottomSheet
1722import androidx.compose.material3.OutlinedButton
18- import androidx.compose.material3.SheetState
19- import androidx.compose.material3.SheetValue.Expanded
23+ import androidx.compose.material3.Scaffold
2024import androidx.compose.material3.Text
25+ import androidx.compose.material3.TopAppBarDefaults
2126import androidx.compose.runtime.Composable
22- import androidx.compose.runtime.rememberCoroutineScope
2327import androidx.compose.ui.Alignment
2428import androidx.compose.ui.Modifier
25- import androidx.compose.ui.platform.LocalDensity
29+ import androidx.compose.ui.platform.LocalContext
2630import androidx.compose.ui.platform.LocalUriHandler
2731import androidx.compose.ui.res.stringResource
2832import androidx.compose.ui.text.font.FontStyle
@@ -31,125 +35,149 @@ import androidx.compose.ui.tooling.preview.Preview
3135import androidx.compose.ui.unit.dp
3236import io.github.sds100.keymapper.base.R
3337import io.github.sds100.keymapper.base.compose.KeyMapperTheme
34- import kotlinx.coroutines.launch
38+ import io.github.sds100.keymapper.base.utils.ui.compose.openUriSafe
3539
36- @OptIn(ExperimentalMaterial3Api ::class )
3740@Composable
38- fun AdvancedTriggersBottomSheet (
41+ fun AdvancedTriggersScreen (
3942 modifier : Modifier = Modifier ,
40- onDismissRequest : () -> Unit ,
41- viewModel : ConfigTriggerViewModel ,
42- sheetState : SheetState ,
43+ onBack : () -> Unit ,
4344) {
44- AdvancedTriggersBottomSheet (
45- modifier,
46- onDismissRequest,
47- sheetState,
45+ AdvancedTriggersScreen (
46+ modifier = modifier,
47+ onBack = onBack,
4848 )
4949}
5050
5151@OptIn(ExperimentalMaterial3Api ::class )
5252@Composable
53- private fun AdvancedTriggersBottomSheet (
53+ private fun AdvancedTriggersScreen (
5454 modifier : Modifier = Modifier ,
55- onDismissRequest : () -> Unit ,
56- sheetState : SheetState ,
55+ onBack : () -> Unit ,
5756) {
58- val scope = rememberCoroutineScope()
59-
60- ModalBottomSheet (
57+ Scaffold (
6158 modifier = modifier,
62- onDismissRequest = onDismissRequest,
63- sheetState = sheetState,
64- // Hide drag handle because other bottom sheets don't have it
65- dragHandle = {},
66- ) {
67- Column (modifier = Modifier .verticalScroll(rememberScrollState())) {
68- Spacer (modifier = Modifier .height(8 .dp))
59+ topBar = {
60+ CenterAlignedTopAppBar (
61+ title = {
62+ Text (
63+ text = stringResource(R .string.support_key_mapper_title),
64+ style = MaterialTheme .typography.headlineMedium,
65+ )
66+ },
67+ navigationIcon = {
68+ IconButton (onClick = onBack) {
69+ Icon (
70+ Icons .AutoMirrored .Filled .ArrowBack ,
71+ contentDescription = stringResource(R .string.bottom_app_bar_back_content_description)
72+ )
73+ }
74+ },
75+ colors = TopAppBarDefaults .centerAlignedTopAppBarColors(
76+ containerColor = MaterialTheme .colorScheme.primaryContainer
77+ )
78+ )
79+ }
80+ ) { contentPadding ->
81+ Column (
82+ modifier = Modifier
83+ .fillMaxSize()
84+ .verticalScroll(rememberScrollState())
85+ .padding(contentPadding)
86+ .padding(horizontal = 16 .dp),
87+ horizontalAlignment = Alignment .CenterHorizontally ,
88+ ) {
89+ Spacer (modifier = Modifier .height(24 .dp))
6990
7091 Text (
92+ text = stringResource(R .string.support_key_mapper_subtitle),
93+ style = MaterialTheme .typography.titleMedium,
94+ textAlign = TextAlign .Center ,
7195 modifier = Modifier .fillMaxWidth(),
96+ )
97+
98+ Spacer (modifier = Modifier .height(8 .dp))
99+
100+ Text (
101+ text = stringResource(R .string.support_key_mapper_sub_subtitle),
102+ style = MaterialTheme .typography.bodyMedium,
72103 textAlign = TextAlign .Center ,
104+ modifier = Modifier .fillMaxWidth(),
105+ )
106+
107+ Spacer (modifier = Modifier .height(24 .dp))
108+
109+ HorizontalDivider ()
110+
111+ Spacer (modifier = Modifier .height(24 .dp))
112+
113+ Text (
73114 text = stringResource(R .string.advanced_triggers_sheet_title),
74- style = MaterialTheme .typography.headlineMedium,
115+ style = MaterialTheme .typography.titleLarge,
116+ textAlign = TextAlign .Center ,
117+ modifier = Modifier .fillMaxWidth(),
75118 )
76119
77- Spacer (modifier = Modifier .height(8 .dp))
120+ Spacer (modifier = Modifier .height(16 .dp))
78121
79122 Text (
80- modifier = Modifier
81- .padding(horizontal = 16 .dp)
82- .fillMaxWidth(),
83123 text = stringResource(R .string.advanced_triggers_sheet_text),
124+ style = MaterialTheme .typography.bodyLarge,
125+ textAlign = TextAlign .Center ,
126+ modifier = Modifier .fillMaxWidth(),
84127 )
85128
86- Spacer (modifier = Modifier .height(8 .dp))
129+ Spacer (modifier = Modifier .height(16 .dp))
87130
88131 Text (
89- modifier = Modifier
90- .padding(horizontal = 16 .dp)
91- .fillMaxWidth(),
92132 text = stringResource(R .string.purchasing_not_implemented_bottom_sheet_text),
133+ style = MaterialTheme .typography.bodyMedium,
93134 fontStyle = FontStyle .Italic ,
135+ textAlign = TextAlign .Center ,
136+ modifier = Modifier .fillMaxWidth(),
94137 )
95138
96- Spacer (modifier = Modifier .height(8 .dp))
139+ Spacer (modifier = Modifier .height(24 .dp))
140+
141+ HorizontalDivider ()
142+
143+ Spacer (modifier = Modifier .height(24 .dp))
97144
98145 val uriHandler = LocalUriHandler .current
146+ val ctx = LocalContext .current
99147 val googlePlayUrl = stringResource(R .string.url_play_store_listing)
100148
101149 Row (
102- modifier = Modifier
103- .fillMaxWidth()
104- .padding(horizontal = 16 .dp),
105- horizontalArrangement = Arrangement .SpaceBetween ,
106- verticalAlignment = Alignment .CenterVertically ,
150+ modifier = Modifier .fillMaxWidth(),
151+ horizontalArrangement = Arrangement .spacedBy(8 .dp),
107152 ) {
108153 OutlinedButton (
109- modifier = Modifier ,
110- onClick = {
111- scope.launch {
112- sheetState.hide()
113- onDismissRequest()
114- }
115- },
154+ modifier = Modifier .weight(1f ),
155+ onClick = onBack,
116156 ) {
117157 Text (stringResource(R .string.neg_cancel))
118158 }
119159
120- Spacer (modifier = Modifier .width(8 .dp))
121-
122- FilledTonalButton (
123- modifier = Modifier ,
160+ Button (
161+ modifier = Modifier .weight(1f ),
124162 onClick = {
125- scope.launch {
126- uriHandler.openUri(googlePlayUrl)
127- }
163+ uriHandler.openUriSafe(ctx, googlePlayUrl)
128164 },
129165 ) {
130166 Text (stringResource(R .string.purchasing_download_key_mapper_from_google_play))
131167 }
132168 }
133169
134- Spacer (Modifier .height(16 .dp))
170+ Spacer (Modifier .height(24 .dp))
135171 }
136172 }
137173}
138174
139- @OptIn(ExperimentalMaterial3Api ::class )
140175@Preview
141176@Composable
142177private fun Preview () {
143178 KeyMapperTheme {
144- val sheetState = SheetState (
145- skipPartiallyExpanded = true ,
146- density = LocalDensity .current,
147- initialValue = Expanded ,
148- )
149-
150- AdvancedTriggersBottomSheet (
151- onDismissRequest = {},
152- sheetState = sheetState,
179+ AdvancedTriggersScreen (
180+ onBack = {},
153181 )
154182 }
155183}
0 commit comments