Skip to content

Commit 9075600

Browse files
committed
Restructure
1 parent 7ab73fb commit 9075600

File tree

9 files changed

+169
-182
lines changed

9 files changed

+169
-182
lines changed

app/src/main/kotlin/com/w2sv/wifiwidget/activities/HomeActivity.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.w2sv.androidutils.SelfManagingLocalBroadcastReceiver
2929
import com.w2sv.androidutils.extensions.getIntExtraOrNull
3030
import com.w2sv.androidutils.extensions.launchDelayed
3131
import com.w2sv.androidutils.extensions.locationServicesEnabled
32+
import com.w2sv.androidutils.extensions.resetBoolean
3233
import com.w2sv.androidutils.extensions.showToast
3334
import com.w2sv.common.Theme
3435
import com.w2sv.kotlinutils.extensions.getByOrdinal
@@ -170,6 +171,11 @@ class HomeActivity : LifecycleObserversRegisteringActivity() {
170171
coroutineScope = viewModelScope
171172
)
172173

174+
fun onDismissWidgetConfigurationDialog() {
175+
widgetConfigurationStates.reset()
176+
showWidgetConfigurationDialog.resetBoolean()
177+
}
178+
173179
/**
174180
* @return Boolean indicating whether change has been confirmed
175181
*/
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.w2sv.wifiwidget.ui.home.configurationdialog
2+
3+
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Row
5+
import androidx.compose.runtime.Composable
6+
import androidx.compose.runtime.collectAsState
7+
import androidx.compose.runtime.getValue
8+
import androidx.compose.ui.Modifier
9+
import androidx.compose.ui.platform.LocalContext
10+
import androidx.compose.ui.res.stringResource
11+
import androidx.lifecycle.viewmodel.compose.viewModel
12+
import com.w2sv.androidutils.extensions.resetBoolean
13+
import com.w2sv.androidutils.extensions.showToast
14+
import com.w2sv.widget.WifiWidgetProvider
15+
import com.w2sv.wifiwidget.R
16+
import com.w2sv.wifiwidget.activities.HomeActivity
17+
import com.w2sv.wifiwidget.ui.shared.DialogButton
18+
import com.w2sv.wifiwidget.ui.shared.JostText
19+
20+
@Composable
21+
internal fun StatefulButtonRow(modifier: Modifier = Modifier, viewModel: HomeActivity.ViewModel = viewModel()) {
22+
val context = LocalContext.current
23+
val applyButtonEnabled by viewModel.widgetConfigurationStates.requiringUpdate.collectAsState()
24+
25+
ButtonRow(
26+
onCancel = {
27+
viewModel.onDismissWidgetConfigurationDialog()
28+
},
29+
onApply = {
30+
viewModel.widgetConfigurationStates.apply()
31+
WifiWidgetProvider.triggerDataRefresh(context)
32+
context.showToast(R.string.updated_widget_configuration)
33+
viewModel.showWidgetConfigurationDialog.resetBoolean()
34+
},
35+
applyButtonEnabled = {
36+
applyButtonEnabled
37+
},
38+
modifier = modifier
39+
)
40+
}
41+
42+
@Composable
43+
private fun ButtonRow(
44+
onCancel: () -> Unit,
45+
onApply: () -> Unit,
46+
applyButtonEnabled: () -> Boolean,
47+
modifier: Modifier = Modifier
48+
) {
49+
Row(
50+
modifier = modifier,
51+
horizontalArrangement = Arrangement.SpaceEvenly
52+
) {
53+
DialogButton(onClick = onCancel) {
54+
JostText(text = stringResource(R.string.cancel))
55+
}
56+
DialogButton(onClick = onApply, enabled = applyButtonEnabled()) {
57+
JostText(text = stringResource(R.string.apply))
58+
}
59+
}
60+
}
Lines changed: 13 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package com.w2sv.wifiwidget.ui.home.configurationdialog
22

33
import androidx.compose.foundation.background
4-
import androidx.compose.foundation.layout.Arrangement
54
import androidx.compose.foundation.layout.Column
6-
import androidx.compose.foundation.layout.ColumnScope
7-
import androidx.compose.foundation.layout.Row
85
import androidx.compose.foundation.layout.fillMaxWidth
96
import androidx.compose.foundation.layout.heightIn
107
import androidx.compose.foundation.layout.padding
@@ -14,11 +11,8 @@ import androidx.compose.material3.ElevatedCard
1411
import androidx.compose.material3.Icon
1512
import androidx.compose.material3.MaterialTheme
1613
import androidx.compose.runtime.Composable
17-
import androidx.compose.runtime.collectAsState
18-
import androidx.compose.runtime.getValue
1914
import androidx.compose.ui.Alignment
2015
import androidx.compose.ui.Modifier
21-
import androidx.compose.ui.platform.LocalContext
2216
import androidx.compose.ui.res.painterResource
2317
import androidx.compose.ui.res.stringResource
2418
import androidx.compose.ui.text.font.FontWeight
@@ -27,16 +21,8 @@ import androidx.compose.ui.tooling.preview.Preview
2721
import androidx.compose.ui.unit.dp
2822
import androidx.compose.ui.window.Dialog
2923
import 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
3624
import 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
4026
import com.w2sv.wifiwidget.ui.shared.JostText
4127
import com.w2sv.wifiwidget.ui.shared.WifiWidgetTheme
4228
import com.w2sv.wifiwidget.ui.shared.diagonalGradient
@@ -45,131 +31,19 @@ import com.w2sv.wifiwidget.ui.shared.diagonalGradient
4531
@Composable
4632
private 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
}

app/src/main/kotlin/com/w2sv/wifiwidget/ui/home/configurationdialog/InflationButton.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import androidx.compose.runtime.setValue
1414
import androidx.compose.ui.Modifier
1515
import androidx.lifecycle.viewmodel.compose.viewModel
1616
import com.w2sv.wifiwidget.activities.HomeActivity
17+
import com.w2sv.wifiwidget.ui.home.configurationdialog.content.PropertyInfoDialog
1718

1819
@Composable
1920
fun StatefulWidgetConfigurationDialogButton(
@@ -31,7 +32,7 @@ fun StatefulWidgetConfigurationDialogButton(
3132
val inflateDialog by viewModel.showWidgetConfigurationDialog.collectAsState()
3233

3334
if (inflateDialog) {
34-
StatefulWidgetConfigurationDialog(
35+
WidgetConfigurationDialog(
3536
setInfoDialogPropertyIndex = {
3637
infoDialogPropertyIndex = it
3738
}

0 commit comments

Comments
 (0)