feat(library): sort options for Apps/Starred/Favourites#628
Conversation
|
Caution Review failedPull request was closed or merged during review WalkthroughAdds persisted per-screen sort-rule preferences (Apps, Starred, Favourites). Enums provide fromName factories; TweaksRepository exposes Flow getters and suspend setters; each featureβs ViewModel observes the stored rule, applies comparators, updates state, and persists user selections. UI top bars add conditional sort dropdowns. Localization and whatsnew texts updated. ChangesPersistent Sort Preferences Feature
sequenceDiagram
participant Screen
participant ViewModel
participant TweaksRepository
participant Preferences
Screen->>ViewModel: load/initialize
ViewModel->>TweaksRepository: get*SortRule() (Flow<String?>)
TweaksRepository->>Preferences: preferences.data.map -> emit stored name
TweaksRepository-->>ViewModel: Flow emits String? (rule name)
ViewModel->>ViewModel: fromName(name) -> SortRule
ViewModel->>ViewModel: sort items using comparator
ViewModel-->>Screen: update state (items, sortRule)
Screen->>ViewModel: OnSortRuleSelected(rule)
ViewModel->>TweaksRepository: set*SortRule(rule.name)
TweaksRepository->>Preferences: preferences.edit { putString(key, name) }
Estimated code review effortπ― 3 (Moderate) | β±οΈ ~25 minutes Possibly related PRs
Poem
π₯ Pre-merge checks | β 4 | β 1β Failed checks (1 warning)
β Passed checks (4 passed)
βοΈ Tip: You can configure your own custom pre-merge checks in the settings. β¨ Finishing Touchesπ Generate docstrings
π§ͺ Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
π§Ή Nitpick comments (2)
feature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesRoot.kt (1)
219-244: β‘ Quick winRender selected state for the current sort option.
The menu currently doesnβt indicate the active
sortRule, which makes persisted state less discoverable. Add selected styling/checkmark for the current rule.β»οΈ Proposed tweak
DropdownMenu( expanded = showSortMenu, onDismissRequest = { showSortMenu = false }, ) { FavouritesSortRule.entries.forEach { rule -> DropdownMenuItem( - text = { Text(stringResource(rule.labelRes())) }, + text = { + Text( + text = stringResource(rule.labelRes()), + fontWeight = if (rule == sortRule) FontWeight.SemiBold else FontWeight.Normal, + ) + }, onClick = { showSortMenu = false onAction(FavouritesAction.OnSortRuleSelected(rule)) }, ) } }π€ Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesRoot.kt` around lines 219 - 244, The sort DropdownMenu doesn't indicate which rule is currently selected: update the DropdownMenuItem rendering inside FavouritesRoot so each item reflects the active sortRule (e.g., use the DropdownMenuItem parameter or trailing icon to show a check/selected state when rule == sortRule); locate the loop over FavouritesSortRule.entries and modify DropdownMenuItem to pass a selected flag or show an Icon for the selected rule, keeping the existing onClick that sets showSortMenu = false and calls onAction(FavouritesAction.OnSortRuleSelected(rule)).feature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposRoot.kt (1)
333-355: β‘ Quick winShow the currently selected sort rule in the dropdown.
sortRuleis already passed in, but menu items render identically. Add a selected affordance (e.g., checkmark/typography) so users can confirm the active persisted sort quickly.β»οΈ Proposed tweak
DropdownMenu( expanded = showSortMenu, onDismissRequest = { showSortMenu = false }, ) { StarredSortRule.entries.forEach { rule -> DropdownMenuItem( - text = { Text(stringResource(rule.labelRes())) }, + text = { + Text( + text = stringResource(rule.labelRes()), + fontWeight = if (rule == sortRule) FontWeight.SemiBold else FontWeight.Normal, + ) + }, onClick = { showSortMenu = false onAction(StarredReposAction.OnSortRuleSelected(rule)) }, ) } }π€ Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposRoot.kt` around lines 333 - 355, The dropdown menu always renders identical items even though the current sortRule is passed in; update the DropdownMenuItem rendering in StarredReposRoot (where StarredSortRule.entries.forEach and onClick create items) to visually mark the active rule by comparing each rule to the current sortRule and adding a selected affordance (for example add a leading Icon(check) or change Text style/weight for the matching rule) and ensure accessibility by including appropriate contentDescription or semantics for the selected state.
π€ Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@core/presentation/src/commonMain/composeResources/files/whatsnew/18.json`:
- Line 41: Replace the current sentence "Sort Installed, Starred, and Favourites
β pick by name, recency, or stars; your choice is remembered per section." with
a line that clarifies these are section-specific sort options, e.g.
"Section-specific sort options β Installed (name, recency), Starred (name,
stars), and Favourites (name, recency); your choice is remembered per section."
Update the string in 18.json accordingly so release notes reflect the actual
implemented options.
In
`@feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt`:
- Around line 283-285: The runCatching blocks that call tweaksRepository
persistence methods (e.g., tweaksRepository.setAppsSortRule(...) and the
setExternalImportBannerDismissedAtCount calls) are swallowing
CancellationException; replace each runCatching { ... } inside
viewModelScope.launch with a try { tweaksRepository.<method>(...) } catch (e:
CancellationException) { throw e } catch (t: Throwable) { /* swallow or log as
other similar methods do (see toggleUpdateCheck/skipReleaseTag) */ } so
cancellation can propagate while other errors remain handled consistently.
In
`@feature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposViewModel.kt`:
- Around line 194-196: The current use of runCatching in the
viewModelScope.launch block around
tweaksRepository.setStarredSortRule(action.sortRule.name) swallows
CancellationException and prevents proper coroutine cancellation; update the
block to explicitly rethrow CancellationException (or check and throw if caught)
while still handling other exceptions (e.g., log or ignore non-cancellation
errors) so cancellation propagates correctly from viewModelScope.
---
Nitpick comments:
In
`@feature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesRoot.kt`:
- Around line 219-244: The sort DropdownMenu doesn't indicate which rule is
currently selected: update the DropdownMenuItem rendering inside FavouritesRoot
so each item reflects the active sortRule (e.g., use the DropdownMenuItem
parameter or trailing icon to show a check/selected state when rule ==
sortRule); locate the loop over FavouritesSortRule.entries and modify
DropdownMenuItem to pass a selected flag or show an Icon for the selected rule,
keeping the existing onClick that sets showSortMenu = false and calls
onAction(FavouritesAction.OnSortRuleSelected(rule)).
In
`@feature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposRoot.kt`:
- Around line 333-355: The dropdown menu always renders identical items even
though the current sortRule is passed in; update the DropdownMenuItem rendering
in StarredReposRoot (where StarredSortRule.entries.forEach and onClick create
items) to visually mark the active rule by comparing each rule to the current
sortRule and adding a selected affordance (for example add a leading Icon(check)
or change Text style/weight for the matching rule) and ensure accessibility by
including appropriate contentDescription or semantics for the selected state.
πͺ Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
βΉοΈ Review info
βοΈ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 7f5f79ea-4faa-411d-a365-17ded9f3f6ba
π Files selected for processing (40)
core/data/src/commonMain/kotlin/zed/rainxch/core/data/repository/TweaksRepositoryImpl.ktcore/domain/src/commonMain/kotlin/zed/rainxch/core/domain/repository/TweaksRepository.ktcore/presentation/src/commonMain/composeResources/files/whatsnew/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/ar/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/bn/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/es/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/fr/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/hi/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/it/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/ja/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/ko/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/pl/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/ru/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/tr/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/zh-CN/18.jsoncore/presentation/src/commonMain/composeResources/values-ar/strings-ar.xmlcore/presentation/src/commonMain/composeResources/values-bn/strings-bn.xmlcore/presentation/src/commonMain/composeResources/values-es/strings-es.xmlcore/presentation/src/commonMain/composeResources/values-fr/strings-fr.xmlcore/presentation/src/commonMain/composeResources/values-hi/strings-hi.xmlcore/presentation/src/commonMain/composeResources/values-it/strings-it.xmlcore/presentation/src/commonMain/composeResources/values-ja/strings-ja.xmlcore/presentation/src/commonMain/composeResources/values-ko/strings-ko.xmlcore/presentation/src/commonMain/composeResources/values-pl/strings-pl.xmlcore/presentation/src/commonMain/composeResources/values-ru/strings-ru.xmlcore/presentation/src/commonMain/composeResources/values-tr/strings-tr.xmlcore/presentation/src/commonMain/composeResources/values-zh-rCN/strings-zh-rCN.xmlcore/presentation/src/commonMain/composeResources/values/strings.xmlfeature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.ktfeature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/model/AppSortRule.ktfeature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesAction.ktfeature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesRoot.ktfeature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesState.ktfeature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesViewModel.ktfeature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/model/FavouritesSortRule.ktfeature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposAction.ktfeature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposRoot.ktfeature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposState.ktfeature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposViewModel.ktfeature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/model/StarredSortRule.kt
| viewModelScope.launch { | ||
| runCatching { tweaksRepository.setAppsSortRule(action.sortRule.name) } | ||
| } |
There was a problem hiding this comment.
π§© Analysis chain
π Script executed:
# First, let's locate and examine the AppsViewModel.kt file
fd -t f "AppsViewModel.kt" | head -20Repository: OpenHub-Store/GitHub-Store
Length of output: 165
π Script executed:
# Check the specific lines mentioned in the review
rg "viewModelScope.launch" --context=5 -g "*AppsViewModel.kt"Repository: OpenHub-Store/GitHub-Store
Length of output: 50382
π Script executed:
# Read the exact section at lines 283-285
sed -n '280,290p' feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.ktRepository: OpenHub-Store/GitHub-Store
Length of output: 356
π Script executed:
# Search for all runCatching patterns in the AppsViewModel file
rg "runCatching" feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt -B 2 -A 2Repository: OpenHub-Store/GitHub-Store
Length of output: 1871
π Script executed:
# Check for CancellationException handling patterns in the same file
rg "CancellationException" feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt -B 2 -A 2Repository: OpenHub-Store/GitHub-Store
Length of output: 4156
π Script executed:
# Let's check the tweaksRepository.setAppsSortRule method signature to see if it's a suspend function
fd -t f "TweaksRepository" | head -20Repository: OpenHub-Store/GitHub-Store
Length of output: 248
π Script executed:
# Search for the definition of setAppsSortRule
rg "fun setAppsSortRule" --context=3Repository: OpenHub-Store/GitHub-Store
Length of output: 1710
π Script executed:
# Let me check all instances of runCatching in launch blocks to see the pattern
rg "viewModelScope.launch" --context=1 | rg -A 1 "viewModelScope.launch" | rg "runCatching" -B 1Repository: OpenHub-Store/GitHub-Store
Length of output: 6527
π Script executed:
# Check if there's a pattern where runCatching is used to silently ignore failures
rg "runCatching.*tweaksRepository" feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.ktRepository: OpenHub-Store/GitHub-Store
Length of output: 461
π Script executed:
# Let me verify all the instances that need fixing by looking at the exact lines
rg "runCatching.*tweaksRepository" feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt -nRepository: OpenHub-Store/GitHub-Store
Length of output: 477
π Script executed:
# Check how other ViewModels in the codebase handle this (e.g., StarredReposViewModel)
cat feature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposViewModel.kt | grep -A 2 "setStarredSortRule"Repository: OpenHub-Store/GitHub-Store
Length of output: 196
π Script executed:
# Let's verify the Kotlin documentation about runCatching and CancellationException behavior
# by checking how runCatching is imported and used
rg "import.*runCatching|fun runCatching" feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.ktRepository: OpenHub-Store/GitHub-Store
Length of output: 52
π Script executed:
# Check the other tweaksRepository calls in the same file to see the pattern
sed -n '605,635p' feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.ktRepository: OpenHub-Store/GitHub-Store
Length of output: 1700
π Script executed:
# Let me verify the Kotlin behavior of runCatching with CancellationException by checking documentation and imports
rg "runCatching" core/domain/src/commonMain/kotlin -A 2 | head -20Repository: OpenHub-Store/GitHub-Store
Length of output: 447
π Script executed:
# Check how many similar patterns exist in AppsViewModel that need the same fix
grep -n "runCatching.*tweaksRepository\|runCatching.*downloaderOrchestrator\|runCatching.*externalImportRepository" feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.ktRepository: OpenHub-Store/GitHub-Store
Length of output: 477
Fix cancellation semantics in all runCatching blocks persisting preferences.
The runCatching blocks on lines 284, 610, 620, and 631 swallow CancellationException, preventing coroutine cancellation from propagating. Replace with try/catch that explicitly re-throws CancellationException, matching the pattern already used elsewhere in this file (e.g., toggleUpdateCheck, skipReleaseTag).
Suggested fix for line 284
viewModelScope.launch {
- runCatching { tweaksRepository.setAppsSortRule(action.sortRule.name) }
+ try {
+ tweaksRepository.setAppsSortRule(action.sortRule.name)
+ } catch (e: CancellationException) {
+ throw e
+ } catch (e: Exception) {
+ logger.warn("Failed to persist apps sort rule: ${e.message}")
+ }
}Apply the same pattern to lines 610, 620, and 631 for setExternalImportBannerDismissedAtCount.
π Committable suggestion
βΌοΈ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| viewModelScope.launch { | |
| runCatching { tweaksRepository.setAppsSortRule(action.sortRule.name) } | |
| } | |
| viewModelScope.launch { | |
| try { | |
| tweaksRepository.setAppsSortRule(action.sortRule.name) | |
| } catch (e: CancellationException) { | |
| throw e | |
| } catch (e: Exception) { | |
| logger.warn("Failed to persist apps sort rule: ${e.message}") | |
| } | |
| } |
π€ Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt`
around lines 283 - 285, The runCatching blocks that call tweaksRepository
persistence methods (e.g., tweaksRepository.setAppsSortRule(...) and the
setExternalImportBannerDismissedAtCount calls) are swallowing
CancellationException; replace each runCatching { ... } inside
viewModelScope.launch with a try { tweaksRepository.<method>(...) } catch (e:
CancellationException) { throw e } catch (t: Throwable) { /* swallow or log as
other similar methods do (see toggleUpdateCheck/skipReleaseTag) */ } so
cancellation can propagate while other errors remain handled consistently.
Greptile SummaryThis PR adds sort options to the Starred and Favourites screens (which already existed on Apps), with each section persisting its sort preference via
Confidence Score: 5/5Safe to merge. Sort logic, persistence, and UI wiring are all correct; no data is lost or corrupted regardless of sort selection. The core changes are functionally correct. Koin's viewModelOf automatically resolves the new TweaksRepository constructor parameter. Both findings are observability and UX quality issues that do not affect correctness. StarredReposViewModel and FavouritesViewModel have minor inconsistencies with AppsViewModel in how sort selection is handled, but no correctness issues. Important Files Changed
Sequence DiagramsequenceDiagram
participant UI as UI (Root)
participant VM as ViewModel
participant DS as DataStore
participant Combine as combine() flow
Note over UI,Combine: Apps - immediate update
UI->>VM: OnSortRuleSelected(rule)
VM->>VM: "_state.update(sortRule = rule)"
VM->>VM: filterApps() reorders filteredApps
UI-->>UI: List reorders instantly
VM->>DS: setAppsSortRule(rule) async
DS-->>Combine: emits new rule
Combine-->>VM: (apps, rule) _state.update + filterApps()
Note over UI,Combine: Starred / Favourites - round-trip delay
UI->>VM: OnSortRuleSelected(rule)
VM->>DS: setSortRule(rule) async
Note right of VM: state unchanged until DS emits
DS-->>Combine: emits new rule
Combine-->>VM: (items, rule) _state.update
VM-->>UI: List reorders after DataStore round-trip
Reviews (2): Last reviewed commit: "fix(apps): apply persisted sort before f..." | Re-trigger Greptile |
There was a problem hiding this comment.
β»οΈ Duplicate comments (1)
feature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposViewModel.kt (1)
194-201:β οΈ Potential issue | π Major | β‘ Quick winNarrow the exception catch in sort persistence.
At line 200, catching
Throwablecan swallow fatal runtime errors likeOutOfMemoryErrorandStackOverflowError. Keep theCancellationExceptionrethrow, but catchExceptioninstead for non-fatal failures.Proposed fix
is StarredReposAction.OnSortRuleSelected -> { viewModelScope.launch { try { tweaksRepository.setStarredSortRule(action.sortRule.name) } catch (e: CancellationException) { throw e - } catch (_: Throwable) { + } catch (_: Exception) { } } }π€ Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposViewModel.kt` around lines 194 - 201, The catch-all Throwable in the OnSortRuleSelected handler should be narrowed so fatal errors aren't swallowed; inside the viewModelScope.launch block around tweaksRepository.setStarredSortRule(action.sortRule.name) keep the existing catch (e: CancellationException) { throw e } but replace catch (_: Throwable) { } with catch (_: Exception) { } so only non-fatal exceptions are suppressed/handled.
π€ Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Duplicate comments:
In
`@feature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposViewModel.kt`:
- Around line 194-201: The catch-all Throwable in the OnSortRuleSelected handler
should be narrowed so fatal errors aren't swallowed; inside the
viewModelScope.launch block around
tweaksRepository.setStarredSortRule(action.sortRule.name) keep the existing
catch (e: CancellationException) { throw e } but replace catch (_: Throwable) {
} with catch (_: Exception) { } so only non-fatal exceptions are
suppressed/handled.
βΉοΈ Review info
βοΈ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: ed74aedf-d3b0-4348-8eca-848a5cc684e9
π Files selected for processing (31)
core/presentation/src/commonMain/composeResources/files/whatsnew/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/ar/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/bn/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/es/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/fr/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/hi/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/it/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/ja/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/ko/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/pl/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/ru/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/tr/18.jsoncore/presentation/src/commonMain/composeResources/files/whatsnew/zh-CN/18.jsoncore/presentation/src/commonMain/composeResources/values-ar/strings-ar.xmlcore/presentation/src/commonMain/composeResources/values-bn/strings-bn.xmlcore/presentation/src/commonMain/composeResources/values-es/strings-es.xmlcore/presentation/src/commonMain/composeResources/values-fr/strings-fr.xmlcore/presentation/src/commonMain/composeResources/values-hi/strings-hi.xmlcore/presentation/src/commonMain/composeResources/values-it/strings-it.xmlcore/presentation/src/commonMain/composeResources/values-ja/strings-ja.xmlcore/presentation/src/commonMain/composeResources/values-ko/strings-ko.xmlcore/presentation/src/commonMain/composeResources/values-pl/strings-pl.xmlcore/presentation/src/commonMain/composeResources/values-ru/strings-ru.xmlcore/presentation/src/commonMain/composeResources/values-tr/strings-tr.xmlcore/presentation/src/commonMain/composeResources/values-zh-rCN/strings-zh-rCN.xmlcore/presentation/src/commonMain/composeResources/values/strings.xmlfeature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.ktfeature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesRoot.ktfeature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesViewModel.ktfeature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposRoot.ktfeature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposViewModel.kt
β Files skipped from review due to trivial changes (15)
- core/presentation/src/commonMain/composeResources/files/whatsnew/hi/18.json
- core/presentation/src/commonMain/composeResources/values-ar/strings-ar.xml
- core/presentation/src/commonMain/composeResources/files/whatsnew/18.json
- core/presentation/src/commonMain/composeResources/files/whatsnew/ru/18.json
- core/presentation/src/commonMain/composeResources/files/whatsnew/bn/18.json
- core/presentation/src/commonMain/composeResources/files/whatsnew/zh-CN/18.json
- core/presentation/src/commonMain/composeResources/values-tr/strings-tr.xml
- core/presentation/src/commonMain/composeResources/files/whatsnew/ja/18.json
- core/presentation/src/commonMain/composeResources/values-hi/strings-hi.xml
- core/presentation/src/commonMain/composeResources/values-zh-rCN/strings-zh-rCN.xml
- core/presentation/src/commonMain/composeResources/files/whatsnew/it/18.json
- core/presentation/src/commonMain/composeResources/files/whatsnew/fr/18.json
- core/presentation/src/commonMain/composeResources/files/whatsnew/tr/18.json
- core/presentation/src/commonMain/composeResources/files/whatsnew/es/18.json
- core/presentation/src/commonMain/composeResources/files/whatsnew/pl/18.json
π§ Files skipped from review as they are similar to previous changes (11)
- core/presentation/src/commonMain/composeResources/values/strings.xml
- core/presentation/src/commonMain/composeResources/values-ru/strings-ru.xml
- core/presentation/src/commonMain/composeResources/values-ko/strings-ko.xml
- core/presentation/src/commonMain/composeResources/values-ja/strings-ja.xml
- core/presentation/src/commonMain/composeResources/values-bn/strings-bn.xml
- core/presentation/src/commonMain/composeResources/values-es/strings-es.xml
- feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt
- core/presentation/src/commonMain/composeResources/files/whatsnew/ar/18.json
- feature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesViewModel.kt
- feature/favourites/presentation/src/commonMain/kotlin/zed/rainxch/favourites/presentation/FavouritesRoot.kt
- feature/starred/presentation/src/commonMain/kotlin/zed/rainxch/starred/presentation/StarredReposRoot.kt
Summary
TweaksRepositoryβ choice survives restart.Test plan
Summary by CodeRabbit
New Features
Documentation / Release Notes