Skip to content

Commit 858a57e

Browse files
committed
feat: create new screen for purchasing advanced triggers
1 parent c58f88e commit 858a57e

9 files changed

Lines changed: 298 additions & 106 deletions

File tree

app/src/main/java/io/github/sds100/keymapper/MainFragment.kt

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import io.github.sds100.keymapper.base.utils.navigation.SetupNavigation
4343
import io.github.sds100.keymapper.base.utils.navigation.handleRouteArgs
4444
import io.github.sds100.keymapper.base.utils.navigation.setupFragmentNavigation
4545
import io.github.sds100.keymapper.home.HomeViewModel
46+
import io.github.sds100.keymapper.trigger.AdvancedTriggersScreenFoss
4647
import io.github.sds100.keymapper.trigger.ConfigTriggerViewModel
4748
import io.github.sds100.keymapper.trigger.TriggerScreen
4849
import javax.inject.Inject
@@ -153,10 +154,6 @@ class MainFragment : Fragment() {
153154

154155
backStackEntry.handleRouteArgs<NavDestination.NewKeyMap> { args ->
155156
keyMapViewModel.loadNewKeyMap(groupUid = args.groupUid)
156-
157-
if (args.showAdvancedTriggers) {
158-
triggerViewModel.showAdvancedTriggersBottomSheet = true
159-
}
160157
}
161158

162159
ConfigKeyMapScreen(
@@ -185,6 +182,12 @@ class MainFragment : Fragment() {
185182
)
186183
}
187184

185+
composable<NavDestination.AdvancedTriggers> {
186+
AdvancedTriggersScreenFoss(
187+
modifier = Modifier.fillMaxSize(),
188+
onBack = navController::popBackStack,
189+
)
190+
}
188191
composable<NavDestination.OpenKeyMap> { backStackEntry ->
189192
val keyMapViewModel: ConfigKeyMapViewModel = hiltViewModel()
190193
val triggerViewModel: ConfigTriggerViewModel = hiltViewModel()
@@ -194,10 +197,6 @@ class MainFragment : Fragment() {
194197

195198
backStackEntry.handleRouteArgs<NavDestination.OpenKeyMap> { args ->
196199
keyMapViewModel.loadKeyMap(uid = args.keyMapUid)
197-
198-
if (args.showAdvancedTriggers) {
199-
triggerViewModel.showAdvancedTriggersBottomSheet = true
200-
}
201200
}
202201

203202
ConfigKeyMapScreen(

app/src/main/java/io/github/sds100/keymapper/trigger/AdvancedTriggersBottomSheet.kt

Lines changed: 98 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,29 @@ import androidx.compose.foundation.layout.Arrangement
44
import androidx.compose.foundation.layout.Column
55
import androidx.compose.foundation.layout.Row
66
import androidx.compose.foundation.layout.Spacer
7+
import androidx.compose.foundation.layout.fillMaxSize
78
import androidx.compose.foundation.layout.fillMaxWidth
89
import androidx.compose.foundation.layout.height
910
import androidx.compose.foundation.layout.padding
10-
import androidx.compose.foundation.layout.width
1111
import androidx.compose.foundation.rememberScrollState
1212
import 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
1317
import 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
1521
import androidx.compose.material3.MaterialTheme
16-
import androidx.compose.material3.ModalBottomSheet
1722
import androidx.compose.material3.OutlinedButton
18-
import androidx.compose.material3.SheetState
19-
import androidx.compose.material3.SheetValue.Expanded
23+
import androidx.compose.material3.Scaffold
2024
import androidx.compose.material3.Text
25+
import androidx.compose.material3.TopAppBarDefaults
2126
import androidx.compose.runtime.Composable
22-
import androidx.compose.runtime.rememberCoroutineScope
2327
import androidx.compose.ui.Alignment
2428
import androidx.compose.ui.Modifier
25-
import androidx.compose.ui.platform.LocalDensity
29+
import androidx.compose.ui.platform.LocalContext
2630
import androidx.compose.ui.platform.LocalUriHandler
2731
import androidx.compose.ui.res.stringResource
2832
import androidx.compose.ui.text.font.FontStyle
@@ -31,125 +35,149 @@ import androidx.compose.ui.tooling.preview.Preview
3135
import androidx.compose.ui.unit.dp
3236
import io.github.sds100.keymapper.base.R
3337
import 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
142177
private 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

Comments
 (0)