refactor: simplify settings screen

This commit is contained in:
Harsh Shandilya 2025-05-25 15:29:27 +05:30
parent 92fb2939e6
commit 1385edc3bf

View file

@ -11,7 +11,6 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@ -63,45 +62,43 @@ fun SettingsScreen(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
Box(modifier = modifier.padding(contentPadding)) { Column(modifier.padding(contentPadding)) {
Column { ListItem(
ListItem( headlineContent = { Text("Data transfer") },
headlineContent = { Text("Data transfer") }, leadingContent = {
leadingContent = { Icon(
Icon( imageVector = Icons.Filled.ImportExport,
imageVector = Icons.Filled.ImportExport, contentDescription = null,
contentDescription = null, modifier = Modifier.height(32.dp),
modifier = Modifier.height(32.dp), )
},
supportingContent = {
Row(
horizontalArrangement = Arrangement.spacedBy(32.dp),
modifier = Modifier.fillMaxWidth(),
) {
ImportPosts(openInputStream, coroutineScope, snackbarHostState, importPosts)
ExportPosts(
coroutineScope,
snackbarHostState,
openOutputStream,
exportPostsAsJson,
exportPostsAsHtml,
) )
}, }
supportingContent = { },
Row( )
horizontalArrangement = Arrangement.spacedBy(32.dp), ListItem(
modifier = Modifier.fillMaxWidth(), headlineContent = { Text("Libraries") },
) { leadingContent = {
ImportPosts(openInputStream, coroutineScope, snackbarHostState, importPosts) Icon(
ExportPosts( imageVector = Icons.AutoMirrored.Filled.LibraryBooks,
coroutineScope, contentDescription = null,
snackbarHostState, modifier = Modifier.height(32.dp),
openOutputStream, )
exportPostsAsJson, },
exportPostsAsHtml, modifier = Modifier.clickable(onClick = openLibrariesScreen),
) )
}
},
)
ListItem(
headlineContent = { Text("Libraries") },
leadingContent = {
Icon(
imageVector = Icons.AutoMirrored.Filled.LibraryBooks,
contentDescription = null,
modifier = Modifier.height(32.dp),
)
},
modifier = Modifier.clickable(onClick = openLibrariesScreen),
)
}
} }
} }
@ -136,12 +133,12 @@ private fun RowScope.ImportPosts(
} }
@Composable @Composable
private fun RowScope.ExportPosts( private inline fun RowScope.ExportPosts(
coroutineScope: CoroutineScope, coroutineScope: CoroutineScope,
snackbarHostState: SnackbarHostState, snackbarHostState: SnackbarHostState,
openOutputStream: (Uri) -> OutputStream?, crossinline openOutputStream: (Uri) -> OutputStream?,
exportPostsAsJson: suspend (OutputStream) -> Unit, crossinline exportPostsAsJson: suspend (OutputStream) -> Unit,
exportPostsAsHtml: suspend (OutputStream) -> Unit, crossinline exportPostsAsHtml: suspend (OutputStream) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
val jsonExportAction = val jsonExportAction =
@ -208,7 +205,7 @@ private fun RowScope.ExportPosts(
} }
/** Shows a Snackbar but dismisses any existing ones first. */ /** Shows a Snackbar but dismisses any existing ones first. */
private suspend fun SnackbarHostState.showSnackbarDismissing(text: String) { private suspend inline fun SnackbarHostState.showSnackbarDismissing(text: String) {
currentSnackbarData?.dismiss() currentSnackbarData?.dismiss()
showSnackbar(text) showSnackbar(text)
} }