Skip to content

Commit 4a926fb

Browse files
committed
refactor: improve error handling and optimize state management in screens
1 parent cf35c3c commit 4a926fb

4 files changed

Lines changed: 18 additions & 18 deletions

File tree

‎core/presentation/src/commonMain/kotlin/com/softartdev/notedelight/presentation/main/MainViewModel.kt‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ class MainViewModel(
9595
}
9696

9797
private fun isDbError(throwable: Throwable): Boolean {
98-
if (throwable::class.simpleName.orEmpty().contains("SQLite", ignoreCase = true)) return true
99-
return throwable.message.orEmpty().contains("database not open", ignoreCase = true)
98+
val sqlError = throwable::class.simpleName?.contains("SQLite", ignoreCase = true) ?: false
99+
val dbClosed = throwable.message?.contains("database not open", ignoreCase = true) ?: false
100+
return sqlError || dbClosed
100101
}
101102
}

‎core/ui/src/commonMain/kotlin/com/softartdev/notedelight/ui/main/MainScreen.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ fun MainScreen(
9696
onRefresh = { onAction(MainAction.OnRefresh) },
9797
state = pullToRefreshState
9898
) {
99-
LaunchedEffect(key1 = noteListState.value) {
99+
LaunchedEffect(key1 = refreshState.value) {
100100
pullToRefreshState.animateToHidden()
101101
}
102102
when (val noteListResult = noteListState.value) {

‎core/ui/src/commonMain/kotlin/com/softartdev/notedelight/ui/settings/detail/ConsoleScreen.kt‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import androidx.compose.ui.Modifier
3636
import androidx.compose.ui.platform.LocalClipboardManager
3737
import androidx.compose.ui.platform.testTag
3838
import androidx.compose.ui.text.AnnotatedString
39+
import androidx.compose.ui.text.TextStyle
3940
import androidx.compose.ui.text.font.FontFamily
4041
import androidx.compose.ui.tooling.preview.Preview
4142
import androidx.compose.ui.unit.dp
@@ -108,6 +109,7 @@ fun ConsoleScreenBody(
108109
expanded = tipsExpanded,
109110
onDismissRequest = { tipsExpanded = false },
110111
) {
112+
val monospaceBodySmall: TextStyle = MaterialTheme.typography.bodySmall.copy(fontFamily = FontFamily.Monospace)
111113
ConsoleTips.entries.forEachIndexed { index, tip ->
112114
TipMenuItem(
113115
tip = tip.sql,
@@ -120,10 +122,9 @@ fun ConsoleScreenBody(
120122
onAction(ConsoleAction.UpdateInput(tip.sql))
121123
tipsExpanded = false
122124
},
125+
textStyle = monospaceBodySmall,
123126
)
124-
if (index < ConsoleTips.entries.lastIndex) {
125-
HorizontalDivider()
126-
}
127+
if (index < ConsoleTips.entries.lastIndex) HorizontalDivider()
127128
}
128129
}
129130
}
@@ -145,14 +146,15 @@ private fun TipMenuItem(
145146
index: Int,
146147
onCopy: () -> Unit,
147148
onAutofill: () -> Unit,
149+
textStyle: TextStyle,
148150
) {
149151
Row(
150152
modifier = Modifier.padding(horizontal = 8.dp),
151153
verticalAlignment = Alignment.CenterVertically,
152154
) {
153155
Text(
154156
text = tip,
155-
style = MaterialTheme.typography.bodySmall.copy(fontFamily = FontFamily.Monospace),
157+
style = textStyle,
156158
modifier = Modifier.weight(1f).padding(start = 8.dp),
157159
)
158160
IconButton(

‎core/ui/src/commonMain/kotlin/com/softartdev/notedelight/ui/settings/master/SettingsMasterScreen.kt‎

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package com.softartdev.notedelight.ui.settings.master
55
import androidx.compose.foundation.clickable
66
import androidx.compose.foundation.layout.Column
77
import androidx.compose.foundation.layout.PaddingValues
8+
import androidx.compose.foundation.layout.fillMaxWidth
89
import androidx.compose.foundation.layout.padding
910
import androidx.compose.foundation.rememberScrollState
1011
import androidx.compose.foundation.verticalScroll
@@ -13,6 +14,7 @@ import androidx.compose.material.icons.automirrored.filled.ArrowBack
1314
import androidx.compose.material3.ExperimentalMaterial3Api
1415
import androidx.compose.material3.Icon
1516
import androidx.compose.material3.IconButton
17+
import androidx.compose.material3.LinearProgressIndicator
1618
import androidx.compose.material3.ListItem
1719
import androidx.compose.material3.ListItemDefaults
1820
import androidx.compose.material3.Scaffold
@@ -26,6 +28,7 @@ import androidx.compose.runtime.LaunchedEffect
2628
import androidx.compose.runtime.State
2729
import androidx.compose.runtime.collectAsState
2830
import androidx.compose.runtime.derivedStateOf
31+
import androidx.compose.runtime.mutableStateOf
2932
import androidx.compose.runtime.remember
3033
import androidx.compose.ui.Modifier
3134
import androidx.compose.ui.platform.testTag
@@ -61,16 +64,13 @@ fun SettingsMasterScreen(
6164
onSettingsCategoriesAction: (SettingsCategoriesAction) -> Unit,
6265
) {
6366
val result: SettingsCategoriesResult = settingsCategoriesResultState.value
64-
val refreshState: State<Boolean> = remember {
65-
derivedStateOf { settingsCategoriesResultState.value.loading }
66-
}
6767
SettingsMasterScreenBody(
6868
selectedCategoryId = result.selectedCategoryId,
6969
onCategoryClick = { category: SettingsCategory ->
7070
onSettingsCategoriesAction(SettingsCategoriesAction.SelectCategory(category))
7171
},
7272
onRefresh = { onSettingsCategoriesAction(SettingsCategoriesAction.Refresh) },
73-
refreshState = refreshState,
73+
refreshState = remember { derivedStateOf { settingsCategoriesResultState.value.loading } },
7474
onNavigateBack = { onSettingsCategoriesAction(SettingsCategoriesAction.NavBack) }
7575
)
7676
NavBackHandler(enabled = result.selectedCategoryId == null) {
@@ -85,7 +85,7 @@ fun SettingsMasterScreenBody(
8585
onNavigateBack: () -> Unit = {},
8686
onRefresh: () -> Unit = {},
8787
pullToRefreshState: PullToRefreshState = rememberPullToRefreshState(),
88-
refreshState: State<Boolean> = remember { derivedStateOf { false } },
88+
refreshState: State<Boolean> = remember { mutableStateOf(false) },
8989
) = Scaffold(
9090
topBar = {
9191
TopAppBar(
@@ -110,9 +110,8 @@ fun SettingsMasterScreenBody(
110110
LaunchedEffect(key1 = refreshState.value) {
111111
pullToRefreshState.animateToHidden()
112112
}
113-
Column(
114-
modifier = Modifier.verticalScroll(rememberScrollState())
115-
) {
113+
Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
114+
if (refreshState.value) LinearProgressIndicator(Modifier.fillMaxWidth())
116115
SettingsCategory.entries.forEach { category: SettingsCategory ->
117116
SettingsCategoryItem(
118117
category = category,
@@ -142,7 +141,5 @@ private fun SettingsCategoryItem(
142141
@Preview
143142
@Composable
144143
fun PreviewSettingsMasterScreen() = PreferableMaterialTheme {
145-
SettingsMasterScreenBody(
146-
selectedCategoryId = SettingsCategory.Security.id,
147-
)
144+
SettingsMasterScreenBody(selectedCategoryId = SettingsCategory.Security.id)
148145
}

0 commit comments

Comments
 (0)