Skip to content

Commit d5f6467

Browse files
committed
refactor settings buttons
1 parent ee14d07 commit d5f6467

File tree

6 files changed

+52
-52
lines changed

6 files changed

+52
-52
lines changed

app/src/main/java/com/uravgcode/chooser/settings/presentation/SettingsScreen.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.padding
2121
import androidx.compose.foundation.layout.safeDrawing
2222
import androidx.compose.foundation.lazy.LazyColumn
2323
import androidx.compose.material3.ExperimentalMaterial3Api
24-
import androidx.compose.material3.HorizontalDivider
2524
import androidx.compose.material3.Scaffold
2625
import androidx.compose.material3.TopAppBarDefaults
2726
import androidx.compose.runtime.Composable
@@ -170,7 +169,7 @@ fun SettingsScreen(
170169
}
171170

172171
item {
173-
HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp))
172+
SettingsSeparator()
174173
SettingsButtonImport(dataStore)
175174
SettingsButtonExport(dataStore)
176175
SettingsButtonReset(dataStore)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.uravgcode.chooser.settings.presentation.button
2+
3+
import androidx.compose.foundation.layout.fillMaxWidth
4+
import androidx.compose.foundation.layout.padding
5+
import androidx.compose.material3.ElevatedButton
6+
import androidx.compose.material3.Text
7+
import androidx.compose.runtime.Composable
8+
import androidx.compose.ui.Modifier
9+
import androidx.compose.ui.unit.dp
10+
11+
@Composable
12+
fun SettingsButton(
13+
text: String,
14+
onClick: () -> Unit,
15+
) {
16+
ElevatedButton(
17+
content = { Text(text) },
18+
onClick = onClick,
19+
modifier = Modifier
20+
.fillMaxWidth()
21+
.padding(vertical = 4.dp)
22+
)
23+
}

app/src/main/java/com/uravgcode/chooser/settings/presentation/button/SettingsButtonExport.kt

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,9 @@ package com.uravgcode.chooser.settings.presentation.button
33
import android.widget.Toast
44
import androidx.activity.compose.rememberLauncherForActivityResult
55
import androidx.activity.result.contract.ActivityResultContracts
6-
import androidx.compose.foundation.layout.fillMaxWidth
7-
import androidx.compose.foundation.layout.padding
8-
import androidx.compose.material3.ElevatedButton
9-
import androidx.compose.material3.Text
106
import androidx.compose.runtime.Composable
117
import androidx.compose.runtime.rememberCoroutineScope
12-
import androidx.compose.ui.Modifier
138
import androidx.compose.ui.platform.LocalContext
14-
import androidx.compose.ui.unit.dp
159
import androidx.datastore.core.DataStore
1610
import com.uravgcode.chooser.settings.data.SettingsData
1711
import com.uravgcode.chooser.settings.data.SettingsSerializer
@@ -20,14 +14,14 @@ import kotlinx.coroutines.launch
2014

2115
@Composable
2216
fun SettingsButtonExport(dataStore: DataStore<SettingsData>) {
23-
val coroutineScope = rememberCoroutineScope()
17+
val scope = rememberCoroutineScope()
2418
val context = LocalContext.current
2519

26-
val exportLauncher = rememberLauncherForActivityResult(
20+
val launcher = rememberLauncherForActivityResult(
2721
contract = ActivityResultContracts.CreateDocument("application/json")
2822
) { uri ->
2923
uri?.let {
30-
coroutineScope.launch {
24+
scope.launch {
3125
try {
3226
context.contentResolver.openOutputStream(uri)?.use { outputStream ->
3327
SettingsSerializer.writeTo(dataStore.data.first(), outputStream)
@@ -40,11 +34,8 @@ fun SettingsButtonExport(dataStore: DataStore<SettingsData>) {
4034
}
4135
}
4236

43-
ElevatedButton(
44-
content = { Text("Export Settings") },
45-
onClick = { exportLauncher.launch("chooser_settings.json") },
46-
modifier = Modifier
47-
.fillMaxWidth()
48-
.padding(vertical = 8.dp)
37+
SettingsButton(
38+
text = "Export Settings",
39+
onClick = { launcher.launch("settings.json") }
4940
)
5041
}

app/src/main/java/com/uravgcode/chooser/settings/presentation/button/SettingsButtonImport.kt

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,28 @@ package com.uravgcode.chooser.settings.presentation.button
33
import android.widget.Toast
44
import androidx.activity.compose.rememberLauncherForActivityResult
55
import androidx.activity.result.contract.ActivityResultContracts
6-
import androidx.compose.foundation.layout.fillMaxWidth
7-
import androidx.compose.foundation.layout.padding
8-
import androidx.compose.material3.ElevatedButton
9-
import androidx.compose.material3.Text
106
import androidx.compose.runtime.Composable
117
import androidx.compose.runtime.rememberCoroutineScope
12-
import androidx.compose.ui.Modifier
138
import androidx.compose.ui.platform.LocalContext
14-
import androidx.compose.ui.unit.dp
159
import androidx.datastore.core.DataStore
1610
import com.uravgcode.chooser.settings.data.SettingsData
1711
import com.uravgcode.chooser.settings.data.SettingsSerializer
1812
import kotlinx.coroutines.launch
1913

2014
@Composable
2115
fun SettingsButtonImport(dataStore: DataStore<SettingsData>) {
22-
val coroutineScope = rememberCoroutineScope()
16+
val scope = rememberCoroutineScope()
2317
val context = LocalContext.current
2418

25-
val importLauncher = rememberLauncherForActivityResult(
19+
val launcher = rememberLauncherForActivityResult(
2620
contract = ActivityResultContracts.OpenDocument()
2721
) { uri ->
2822
uri?.let {
29-
coroutineScope.launch {
23+
scope.launch {
3024
try {
3125
context.contentResolver.openInputStream(uri)?.use { inputStream ->
32-
val importedSettings = SettingsSerializer.readFrom(inputStream)
33-
dataStore.updateData { importedSettings }
26+
val imported = SettingsSerializer.readFrom(inputStream)
27+
dataStore.updateData { imported }
3428
}
3529
Toast.makeText(context, "Settings imported successfully", Toast.LENGTH_SHORT).show()
3630
} catch (e: Exception) {
@@ -40,11 +34,8 @@ fun SettingsButtonImport(dataStore: DataStore<SettingsData>) {
4034
}
4135
}
4236

43-
ElevatedButton(
44-
content = { Text("Import Settings") },
45-
onClick = { importLauncher.launch(arrayOf("application/json")) },
46-
modifier = Modifier
47-
.fillMaxWidth()
48-
.padding(vertical = 8.dp)
37+
SettingsButton(
38+
text = "Import Settings",
39+
onClick = { launcher.launch(arrayOf("application/json")) }
4940
)
5041
}

app/src/main/java/com/uravgcode/chooser/settings/presentation/button/SettingsButtonReset.kt

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
package com.uravgcode.chooser.settings.presentation.button
22

3-
import androidx.compose.foundation.layout.fillMaxWidth
4-
import androidx.compose.foundation.layout.padding
53
import androidx.compose.material3.AlertDialog
64
import androidx.compose.material3.Button
7-
import androidx.compose.material3.ElevatedButton
85
import androidx.compose.material3.Text
96
import androidx.compose.runtime.Composable
107
import androidx.compose.runtime.getValue
118
import androidx.compose.runtime.mutableStateOf
129
import androidx.compose.runtime.remember
1310
import androidx.compose.runtime.rememberCoroutineScope
1411
import androidx.compose.runtime.setValue
15-
import androidx.compose.ui.Modifier
16-
import androidx.compose.ui.unit.dp
1712
import androidx.datastore.core.DataStore
1813
import com.uravgcode.chooser.settings.data.SettingsData
1914
import kotlinx.coroutines.launch
@@ -50,11 +45,8 @@ fun SettingsButtonReset(dataStore: DataStore<SettingsData>) {
5045
)
5146
}
5247

53-
ElevatedButton(
54-
content = { Text("Reset Settings") },
55-
onClick = { showResetDialog = true },
56-
modifier = Modifier
57-
.fillMaxWidth()
58-
.padding(vertical = 8.dp)
48+
SettingsButton(
49+
text = "Reset Settings",
50+
onClick = { showResetDialog = true }
5951
)
6052
}

app/src/main/java/com/uravgcode/chooser/settings/presentation/component/SettingsSeparator.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,19 @@ import androidx.compose.ui.unit.dp
2525

2626
@Composable
2727
fun SettingsSeparator(
28-
heading: String,
28+
heading: String? = null,
2929
showDivider: Boolean = true
3030
) {
3131
if (showDivider) {
32-
HorizontalDivider(modifier = Modifier.padding(vertical = 8.dp))
32+
HorizontalDivider(
33+
modifier = Modifier.padding(vertical = 8.dp)
34+
)
35+
}
36+
heading?.let {
37+
Text(
38+
text = it.uppercase(),
39+
style = MaterialTheme.typography.titleMedium,
40+
modifier = Modifier.padding(vertical = 8.dp)
41+
)
3342
}
34-
Text(
35-
text = heading.uppercase(),
36-
style = MaterialTheme.typography.titleMedium,
37-
modifier = Modifier.padding(vertical = 8.dp)
38-
)
3943
}

0 commit comments

Comments
 (0)