Repository navigation
fix(search): crash when tapping a recent search ("Key was already used") - #89
Merged
Lennoard merged 1 commit intoNov 7, 2026
Merged
Conversation
Lennoard
approved these changes
Nov 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Tapping a recent-search entry in the search screen can crash the app:
java.lang.IllegalArgumentException: Key "history:net.ipv4.tcp_congestion_control" was already used. If you are using LazyColumn/Row please make sure you provide a unique key for each item.
Cause
SearchViewModel.handleSearchappends every query to the in-memorysearchHistorylist without checking for duplicates. The persisted history (AppPrefs.searchHistory) is aSet, so the duplicate only exists until the app restarts. After a term is searched while already present in the history (for example by tapping a recent search), the list holds two identical entries.SearchScreenuses"history:${it.hint}"as theLazyColumnitem key, so the next time the hints are shown, Compose throws.Fix
Remove an existing entry before adding the query (
searchHistory.remove(query)inSearchViewModel.handleSearch), so the in-memory list stays unique like the persistedSet.Testing
Built a debug APK from this branch and ran it on a device (Android 17, arm64): with one saved history item, opened search, tapped the search box, then tapped the recent search 3 times in a row. The app stayed alive and logcat showed no
FATAL EXCEPTION. Before the change the first tap crashed with the exception above.