diff --git a/app/src/androidTest/java/com/geeksville/mesh/compose/DebugFiltersTest.kt b/app/src/androidTest/java/com/geeksville/mesh/compose/DebugFiltersTest.kt index 357ec9f88..c4b18acc1 100644 --- a/app/src/androidTest/java/com/geeksville/mesh/compose/DebugFiltersTest.kt +++ b/app/src/androidTest/java/com/geeksville/mesh/compose/DebugFiltersTest.kt @@ -47,12 +47,21 @@ class DebugFiltersTest { var filterTexts by androidx.compose.runtime.remember { androidx.compose.runtime.mutableStateOf(listOf()) } var customFilterText by androidx.compose.runtime.remember { androidx.compose.runtime.mutableStateOf("") } val presetFilters = listOf("Error", "Warning", "Info") + val logs = listOf( + com.geeksville.mesh.model.DebugViewModel.UiMeshLog( + uuid = "1", + messageType = "Info", + formattedReceivedDate = "2024-01-01 12:00:00", + logMessage = "Sample log message" + ) + ) com.geeksville.mesh.ui.debug.DebugFilterBar( filterTexts = filterTexts, onFilterTextsChange = { filterTexts = it }, customFilterText = customFilterText, onCustomFilterTextChange = { customFilterText = it }, - presetFilters = presetFilters + presetFilters = presetFilters, + logs = logs ) } // The filter button should be visible diff --git a/app/src/androidTest/java/com/geeksville/mesh/compose/DebugSearchTest.kt b/app/src/androidTest/java/com/geeksville/mesh/compose/DebugSearchTest.kt index aeea32257..ba14c1202 100644 --- a/app/src/androidTest/java/com/geeksville/mesh/compose/DebugSearchTest.kt +++ b/app/src/androidTest/java/com/geeksville/mesh/compose/DebugSearchTest.kt @@ -118,12 +118,21 @@ class DebugSearchTest { var filterTexts by androidx.compose.runtime.remember { androidx.compose.runtime.mutableStateOf(listOf()) } var customFilterText by androidx.compose.runtime.remember { androidx.compose.runtime.mutableStateOf("") } val presetFilters = listOf("Error", "Warning", "Info") + val logs = listOf( + com.geeksville.mesh.model.DebugViewModel.UiMeshLog( + uuid = "1", + messageType = "Info", + formattedReceivedDate = "2024-01-01 12:00:00", + logMessage = "Sample log message" + ) + ) com.geeksville.mesh.ui.debug.DebugFilterBar( filterTexts = filterTexts, onFilterTextsChange = { filterTexts = it }, customFilterText = customFilterText, onCustomFilterTextChange = { customFilterText = it }, - presetFilters = presetFilters + presetFilters = presetFilters, + logs = logs ) } // The filter button should be visible diff --git a/app/src/main/java/com/geeksville/mesh/ui/debug/Debug.kt b/app/src/main/java/com/geeksville/mesh/ui/debug/Debug.kt index c80e17f75..27560f99f 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/debug/Debug.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/debug/Debug.kt @@ -167,6 +167,7 @@ internal fun DebugScreen( searchState = searchState, filterTexts = filterTexts, presetFilters = viewModel.presetFilters, + logs = filteredLogs, filterMode = filterMode, onFilterModeChange = { filterMode = it } ) diff --git a/app/src/main/java/com/geeksville/mesh/ui/debug/DebugFilters.kt b/app/src/main/java/com/geeksville/mesh/ui/debug/DebugFilters.kt index 99225d29b..1398a65e7 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/debug/DebugFilters.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/debug/DebugFilters.kt @@ -57,6 +57,7 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import com.geeksville.mesh.R +import com.geeksville.mesh.model.DebugViewModel.UiMeshLog @Composable fun DebugCustomFilterInput( @@ -110,9 +111,17 @@ fun DebugCustomFilterInput( internal fun DebugPresetFilters( presetFilters: List, filterTexts: List, + logs: List, onFilterTextsChange: (List) -> Unit, modifier: Modifier = Modifier ) { + val availableFilters = presetFilters.filter { filter -> + logs.any { log -> + log.logMessage.contains(filter, ignoreCase = true) || + log.messageType.contains(filter, ignoreCase = true) || + log.formattedReceivedDate.contains(filter, ignoreCase = true) + } + } Column(modifier = modifier) { Text( text = "Preset Filters", @@ -126,7 +135,7 @@ internal fun DebugPresetFilters( horizontalArrangement = Arrangement.spacedBy(2.dp), verticalArrangement = Arrangement.spacedBy(0.dp) ) { - for (filter in presetFilters) { + for (filter in availableFilters) { FilterChip( selected = filter in filterTexts, onClick = { @@ -159,6 +168,7 @@ internal fun DebugFilterBar( customFilterText: String, onCustomFilterTextChange: (String) -> Unit, presetFilters: List, + logs: List, modifier: Modifier = Modifier ) { var showFilterMenu by remember { mutableStateOf(false) } @@ -207,6 +217,7 @@ internal fun DebugFilterBar( DebugPresetFilters( presetFilters = presetFilters, filterTexts = filterTexts, + logs = logs, onFilterTextsChange = onFilterTextsChange ) } diff --git a/app/src/main/java/com/geeksville/mesh/ui/debug/DebugSearch.kt b/app/src/main/java/com/geeksville/mesh/ui/debug/DebugSearch.kt index 93914ba3b..2787aa1fd 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/debug/DebugSearch.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/debug/DebugSearch.kt @@ -56,6 +56,7 @@ import com.geeksville.mesh.R import com.geeksville.mesh.model.DebugViewModel import com.geeksville.mesh.model.LogSearchManager.SearchMatch import com.geeksville.mesh.model.LogSearchManager.SearchState +import com.geeksville.mesh.model.DebugViewModel.UiMeshLog import com.geeksville.mesh.ui.common.theme.AppTheme @Composable @@ -158,6 +159,7 @@ internal fun DebugSearchState( searchState: SearchState, filterTexts: List, presetFilters: List, + logs: List, onSearchTextChange: (String) -> Unit, onNextMatch: () -> Unit, onPreviousMatch: () -> Unit, @@ -195,7 +197,8 @@ internal fun DebugSearchState( onFilterTextsChange = onFilterTextsChange, customFilterText = customFilterText, onCustomFilterTextChange = { customFilterText = it }, - presetFilters = presetFilters + presetFilters = presetFilters, + logs = logs ) } DebugActiveFilters( @@ -213,6 +216,7 @@ fun DebugSearchStateviewModelDefaults( searchState: SearchState, filterTexts: List, presetFilters: List, + logs: List, filterMode: FilterMode, onFilterModeChange: (FilterMode) -> Unit, ) { @@ -222,6 +226,7 @@ fun DebugSearchStateviewModelDefaults( searchState = searchState, filterTexts = filterTexts, presetFilters = presetFilters, + logs = logs, onSearchTextChange = viewModel.searchManager::setSearchText, onNextMatch = viewModel.searchManager::goToNextMatch, onPreviousMatch = viewModel.searchManager::goToPreviousMatch,