Skip to content

Commit f091b6b

Browse files
authored
feat(messaging): add entry points for filter settings (#5229)
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
1 parent 094c3fb commit f091b6b

4 files changed

Lines changed: 39 additions & 1 deletion

File tree

feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/Message.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,19 @@ private const val MAX_LINES = 3
9999
* @param message An optional message to pre-fill in the input field.
100100
* @param viewModel The [MessageViewModel] instance for handling business logic and state.
101101
* @param navigateToNodeDetails Callback to navigate to a node's detail screen.
102+
* @param navigateToQuickChatOptions Callback to navigate to the quick chat options screen.
103+
* @param navigateToFilterSettings Callback to navigate to the message filter settings screen.
102104
* @param onNavigateBack Callback to navigate back from this screen.
103105
*/
104-
@Suppress("LongMethod", "CyclomaticComplexMethod") // Due to multiple states and event handling
106+
@Suppress("LongMethod", "CyclomaticComplexMethod")
105107
@Composable
106108
fun MessageScreen(
107109
contactKey: String,
108110
message: String,
109111
viewModel: MessageViewModel,
110112
navigateToNodeDetails: (Int) -> Unit,
111113
navigateToQuickChatOptions: () -> Unit,
114+
navigateToFilterSettings: () -> Unit,
112115
onNavigateBack: () -> Unit,
113116
) {
114117
val coroutineScope = rememberCoroutineScope()
@@ -321,6 +324,7 @@ fun MessageScreen(
321324
filteredCount = filteredCount,
322325
showFiltered = showFiltered,
323326
onToggleShowFiltered = viewModel::toggleShowFiltered,
327+
onNavigateToFilterSettings = navigateToFilterSettings,
324328
)
325329
}
326330
},

feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/component/MessageScreenComponents.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ import org.meshtastic.core.resources.delete_messages_title
7575
import org.meshtastic.core.resources.filter_disable_for_contact
7676
import org.meshtastic.core.resources.filter_enable_for_contact
7777
import org.meshtastic.core.resources.filter_hide_count
78+
import org.meshtastic.core.resources.filter_settings
7879
import org.meshtastic.core.resources.filter_show_count
7980
import org.meshtastic.core.resources.navigate_back
8081
import org.meshtastic.core.resources.new_messages_below
@@ -103,6 +104,7 @@ import org.meshtastic.core.ui.icon.More
103104
import org.meshtastic.core.ui.icon.Muted
104105
import org.meshtastic.core.ui.icon.Reply
105106
import org.meshtastic.core.ui.icon.SelectAll
107+
import org.meshtastic.core.ui.icon.Settings
106108
import org.meshtastic.core.ui.icon.Unmuted
107109
import org.meshtastic.core.ui.icon.Visibility
108110
import org.meshtastic.core.ui.icon.VisibilityOff
@@ -297,6 +299,7 @@ fun MessageTopBar(
297299
filteredCount: Int = 0,
298300
showFiltered: Boolean = false,
299301
onToggleShowFiltered: () -> Unit = {},
302+
onNavigateToFilterSettings: () -> Unit = {},
300303
) = TopAppBar(
301304
title = {
302305
Row(verticalAlignment = Alignment.CenterVertically) {
@@ -328,6 +331,7 @@ fun MessageTopBar(
328331
filteredCount = filteredCount,
329332
showFiltered = showFiltered,
330333
onToggleShowFiltered = onToggleShowFiltered,
334+
onNavigateToFilterSettings = onNavigateToFilterSettings,
331335
)
332336
},
333337
)
@@ -344,6 +348,7 @@ private fun MessageTopBarActions(
344348
filteredCount: Int,
345349
showFiltered: Boolean,
346350
onToggleShowFiltered: () -> Unit,
351+
onNavigateToFilterSettings: () -> Unit,
347352
) {
348353
if (channelIndex == DataPacket.PKC_CHANNEL_INDEX) {
349354
NodeKeyStatusIcon(hasPKC = true, mismatchKey = mismatchKey)
@@ -364,6 +369,7 @@ private fun MessageTopBarActions(
364369
filteredCount = filteredCount,
365370
showFiltered = showFiltered,
366371
onToggleShowFiltered = onToggleShowFiltered,
372+
onNavigateToFilterSettings = onNavigateToFilterSettings,
367373
)
368374
}
369375
}
@@ -380,6 +386,7 @@ private fun OverFlowMenu(
380386
filteredCount: Int,
381387
showFiltered: Boolean,
382388
onToggleShowFiltered: () -> Unit,
389+
onNavigateToFilterSettings: () -> Unit,
383390
) {
384391
if (expanded) {
385392
DropdownMenu(expanded = expanded, onDismissRequest = onDismiss) {
@@ -389,6 +396,7 @@ private fun OverFlowMenu(
389396
FilteredMessagesMenuItem(showFiltered, filteredCount, onDismiss, onToggleShowFiltered)
390397
}
391398
FilterToggleMenuItem(filteringDisabled, onDismiss, onToggleFilteringDisabled)
399+
FilterSettingsMenuItem(onDismiss, onNavigateToFilterSettings)
392400
}
393401
}
394402
}
@@ -463,6 +471,19 @@ private fun FilterToggleMenuItem(filteringDisabled: Boolean, onDismiss: () -> Un
463471
)
464472
}
465473

474+
@Composable
475+
private fun FilterSettingsMenuItem(onDismiss: () -> Unit, onNavigate: () -> Unit) {
476+
val title = stringResource(Res.string.filter_settings)
477+
DropdownMenuItem(
478+
text = { Text(title) },
479+
onClick = {
480+
onDismiss()
481+
onNavigate()
482+
},
483+
leadingIcon = { Icon(imageVector = MeshtasticIcons.Settings, contentDescription = title) },
484+
)
485+
}
486+
466487
// endregion
467488

468489
// region ── QuickChatRow ──

feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/navigation/ContactsNavigation.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow
3030
import org.koin.compose.viewmodel.koinViewModel
3131
import org.meshtastic.core.navigation.ContactsRoute
3232
import org.meshtastic.core.navigation.NodesRoute
33+
import org.meshtastic.core.navigation.SettingsRoute
3334
import org.meshtastic.core.navigation.replaceLast
3435
import org.meshtastic.core.ui.component.ScrollToTopEvent
3536
import org.meshtastic.feature.messaging.QuickChatScreen
@@ -65,6 +66,7 @@ fun EntryProviderScope<NavKey>.contactsGraph(
6566
navigateToNodeDetails = { id -> backStack.add(NodesRoute.NodeDetail(id)) },
6667
navigateToQuickChatOptions =
6768
dropUnlessResumed { backStack.add(org.meshtastic.core.navigation.ContactsRoute.QuickChat) },
69+
navigateToFilterSettings = dropUnlessResumed { backStack.add(SettingsRoute.FilterSettings) },
6870
onNavigateBack = dropUnlessResumed { backStack.removeLastOrNull() },
6971
)
7072
}

feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/SettingsScreen.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,15 @@ import org.meshtastic.core.navigation.WifiProvisionRoute
4646
import org.meshtastic.core.resources.Res
4747
import org.meshtastic.core.resources.bottom_nav_settings
4848
import org.meshtastic.core.resources.export_configuration
49+
import org.meshtastic.core.resources.filter_settings
4950
import org.meshtastic.core.resources.import_configuration
5051
import org.meshtastic.core.resources.preferences_language
5152
import org.meshtastic.core.resources.remotely_administrating
5253
import org.meshtastic.core.resources.wifi_devices
5354
import org.meshtastic.core.ui.component.ListItem
5455
import org.meshtastic.core.ui.component.MainAppBar
5556
import org.meshtastic.core.ui.component.MeshtasticDialog
57+
import org.meshtastic.core.ui.icon.FilterList
5658
import org.meshtastic.core.ui.icon.MeshtasticIcons
5759
import org.meshtastic.core.ui.icon.Wifi
5860
import org.meshtastic.feature.settings.component.AppInfoSection
@@ -249,6 +251,15 @@ fun SettingsScreen(
249251
}
250252
}
251253

254+
ExpressiveSection(title = stringResource(Res.string.filter_settings)) {
255+
ListItem(
256+
text = stringResource(Res.string.filter_settings),
257+
leadingIcon = MeshtasticIcons.FilterList,
258+
) {
259+
onNavigate(SettingsRoute.FilterSettings)
260+
}
261+
}
262+
252263
PersistenceSection(
253264
cacheLimit = settingsViewModel.dbCacheLimit.collectAsStateWithLifecycle().value,
254265
onSetCacheLimit = { settingsViewModel.setDbCacheLimit(it) },

0 commit comments

Comments
 (0)