11package com.w2sv.wifiwidget.ui.home.configurationdialog
22
33import androidx.compose.foundation.background
4- import androidx.compose.foundation.layout.Arrangement
54import androidx.compose.foundation.layout.Column
6- import androidx.compose.foundation.layout.ColumnScope
7- import androidx.compose.foundation.layout.Row
85import androidx.compose.foundation.layout.fillMaxWidth
96import androidx.compose.foundation.layout.heightIn
107import androidx.compose.foundation.layout.padding
@@ -14,11 +11,8 @@ import androidx.compose.material3.ElevatedCard
1411import androidx.compose.material3.Icon
1512import androidx.compose.material3.MaterialTheme
1613import androidx.compose.runtime.Composable
17- import androidx.compose.runtime.collectAsState
18- import androidx.compose.runtime.getValue
1914import androidx.compose.ui.Alignment
2015import androidx.compose.ui.Modifier
21- import androidx.compose.ui.platform.LocalContext
2216import androidx.compose.ui.res.painterResource
2317import androidx.compose.ui.res.stringResource
2418import androidx.compose.ui.text.font.FontWeight
@@ -27,16 +21,8 @@ import androidx.compose.ui.tooling.preview.Preview
2721import androidx.compose.ui.unit.dp
2822import androidx.compose.ui.window.Dialog
2923import androidx.lifecycle.viewmodel.compose.viewModel
30- import com.w2sv.androidutils.extensions.requireCastActivity
31- import com.w2sv.androidutils.extensions.resetBoolean
32- import com.w2sv.androidutils.extensions.showToast
33- import com.w2sv.common.Theme
34- import com.w2sv.widget.WifiWidgetProvider
35- import com.w2sv.wifiwidget.R
3624import com.w2sv.wifiwidget.activities.HomeActivity
37- import com.w2sv.wifiwidget.ui.home.LocationAccessPermissionDialog
38- import com.w2sv.wifiwidget.ui.home.model.LocationAccessPermissionDialogTrigger
39- import com.w2sv.wifiwidget.ui.shared.DialogButton
25+ import com.w2sv.wifiwidget.ui.home.configurationdialog.content.StatefulContentColumn
4026import com.w2sv.wifiwidget.ui.shared.JostText
4127import com.w2sv.wifiwidget.ui.shared.WifiWidgetTheme
4228import com.w2sv.wifiwidget.ui.shared.diagonalGradient
@@ -45,131 +31,19 @@ import com.w2sv.wifiwidget.ui.shared.diagonalGradient
4531@Composable
4632private fun WidgetConfigurationDialogPrev () {
4733 WifiWidgetTheme {
48- WidgetConfigurationDialog (
49- onDismiss = {},
50- contentColumn = {
51- ContentColumn (
52- selectedTheme = { Theme .DeviceDefault },
53- onSelectedTheme = {},
54- opacity = { 1f },
55- onOpacityChanged = {},
56- propertyChecked = { true },
57- onCheckedChange = { _, _ -> },
58- onInfoButtonClick = {}
59- )
60- },
61- buttonRow = {
62- ButtonRow (
63- onCancel = { /* TODO*/ },
64- onApply = { /* TODO*/ },
65- applyButtonEnabled = { true }
66- )
67- }
68- )
34+ WidgetConfigurationDialog {}
6935 }
7036}
7137
7238@Composable
73- fun StatefulWidgetConfigurationDialog (
39+ fun WidgetConfigurationDialog (
7440 modifier : Modifier = Modifier ,
7541 viewModel : HomeActivity .ViewModel = viewModel(),
7642 setInfoDialogPropertyIndex : (Int ) -> Unit
7743) {
78- val context = LocalContext .current
79- val lapRequestLauncher = context.requireCastActivity<HomeActivity >().lapRequestLauncher
80-
81- /* *
82- * LocationAccessPermissionDialog
83- */
84-
85- viewModel.lapDialogTrigger.collectAsState().apply {
86- LocationAccessPermissionDialog {
87- value
88- }
89- }
90-
91- val onDismiss: () -> Unit = {
92- viewModel.widgetConfigurationStates.reset()
93- viewModel.showWidgetConfigurationDialog.resetBoolean()
94- }
95-
96- val theme by viewModel.widgetThemeState.collectAsState()
97- val opacity by viewModel.widgetOpacityState.collectAsState()
98- val applyButtonEnabled by viewModel.widgetConfigurationStates.requiringUpdate.collectAsState()
99-
100- WidgetConfigurationDialog (
101- modifier = modifier,
102- onDismiss = onDismiss,
103- contentColumn = {
104- ContentColumn (
105- modifier = Modifier
106- .fillMaxWidth()
107- .heightIn(260 .dp, 460 .dp),
108- selectedTheme = {
109- theme
110- },
111- onSelectedTheme = {
112- viewModel.widgetThemeState.value = it
113- },
114- opacity = {
115- opacity
116- },
117- onOpacityChanged = {
118- viewModel.widgetOpacityState.value = it
119- },
120- propertyChecked = { property ->
121- viewModel.widgetPropertyStateMap.map.getValue(property)
122- },
123- onCheckedChange = { property, value ->
124- when {
125- property == " SSID" && value -> {
126- when (viewModel.lapDialogAnswered) {
127- false -> viewModel.lapDialogTrigger.value =
128- LocationAccessPermissionDialogTrigger .SSIDCheck
129-
130- true -> lapRequestLauncher.requestPermissionAndSetSSIDFlagCorrespondingly(
131- viewModel
132- )
133- }
134- }
135-
136- else -> viewModel.confirmAndSyncPropertyChange(property, value) {
137- context.showToast(R .string.uncheck_all_properties_toast)
138- }
139- }
140- },
141- onInfoButtonClick = {
142- setInfoDialogPropertyIndex(it)
143- }
144- )
145- },
146- buttonRow = {
147- ButtonRow (
148- onCancel = onDismiss,
149- onApply = {
150- viewModel.widgetConfigurationStates.apply ()
151- WifiWidgetProvider .triggerDataRefresh(context)
152- context.showToast(R .string.updated_widget_configuration)
153- viewModel.showWidgetConfigurationDialog.resetBoolean()
154- },
155- applyButtonEnabled = {
156- applyButtonEnabled
157- },
158- modifier = Modifier
159- .fillMaxWidth()
160- )
161- }
162- )
163- }
164-
165- @Composable
166- private fun WidgetConfigurationDialog (
167- modifier : Modifier = Modifier ,
168- onDismiss : () -> Unit ,
169- contentColumn : @Composable ColumnScope .(Modifier ) -> Unit ,
170- buttonRow : @Composable ColumnScope .(Modifier ) -> Unit
171- ) {
172- Dialog (onDismissRequest = onDismiss) {
44+ Dialog (onDismissRequest = {
45+ viewModel.onDismissWidgetConfigurationDialog()
46+ }) {
17347 ElevatedCard (
17448 modifier = modifier,
17549 shape = RoundedCornerShape (12 .dp),
@@ -199,29 +73,14 @@ private fun WidgetConfigurationDialog(
19973 fontSize = MaterialTheme .typography.headlineSmall.fontSize,
20074 fontWeight = FontWeight .Medium
20175 )
202- contentColumn(Modifier )
203- buttonRow(Modifier )
76+ StatefulContentColumn (
77+ modifier = Modifier
78+ .fillMaxWidth()
79+ .heightIn(260 .dp, 420 .dp),
80+ setInfoDialogPropertyIndex = setInfoDialogPropertyIndex
81+ )
82+ StatefulButtonRow (modifier = Modifier .fillMaxWidth())
20483 }
20584 }
20685 }
207- }
208-
209- @Composable
210- private fun ButtonRow (
211- onCancel : () -> Unit ,
212- onApply : () -> Unit ,
213- applyButtonEnabled : () -> Boolean ,
214- modifier : Modifier = Modifier
215- ) {
216- Row (
217- modifier = modifier,
218- horizontalArrangement = Arrangement .SpaceEvenly
219- ) {
220- DialogButton (onClick = onCancel) {
221- JostText (text = stringResource(R .string.cancel))
222- }
223- DialogButton (onClick = onApply, enabled = applyButtonEnabled()) {
224- JostText (text = stringResource(R .string.apply))
225- }
226- }
22786}
0 commit comments