Skip to content

feat: per-folder sort preferences#5

Merged
hxreborn merged 24 commits intomainfrom
feat/per-folder-sort-no-prefs
Jan 4, 2026
Merged

feat: per-folder sort preferences#5
hxreborn merged 24 commits intomainfrom
feat/per-folder-sort-no-prefs

Conversation

@hxreborn
Copy link
Owner

@hxreborn hxreborn commented Jan 4, 2026

Closes #3

Summary

  • Long-press sort option to save per-folder preference
  • Regular tap sets global default and clears folder overrides
  • Recent view uses global sort only

- feat(hooks): add FolderContextHolder and loader hookers
- feat(prefs): add ContentProvider and settings UI for per-folder toggle
- feat(data): add FolderSortPreferenceStore with LRU and migration
- feat(hooks): update SortCursorHooker to use folder context
- feat(module): register loader hooks with graceful fallbacks
- fix(hooks): detect folder changes and skip duplicate persists
- refactor(hooks): optimize loaders with early return and cached reflection
- refactor(hooks): simplify to inline global-first routing
- refactor(hooks): isolate per-folder state with WeakHashMap
- refactor: apply idiomatic Kotlin patterns and fix persist bug
- refactor: replace ContentProvider with libxposed RemotePreferences
- refactor: extract shared loader fields and bump to 2.0.0-beta
- feat(ui): rewrite settings with Jetpack Compose and Material 3
- Long-press (~400ms) on sort option saves for current folder only
- Normal tap saves globally and clears any folder override
- Toast feedback: "Sort saved for [folder]", "Global sort saved",
  "Folder override cleared"
- Removed settings UI (MainActivity, PrefsManager, RememberMySortApp)
- Added TouchTimeTracker for dialog touch event interception
- Added SortByUserHooker to detect long-press timing
- String resources for toast messages
- Remove dead migration code from FolderSortPreferenceStore
- Combine double toast into single message with context
- Add displayName() to FolderContext for readable folder names
- Replace sentinel -1 with nullable Int for clearer error handling
- Add longPressConsumed flag to prevent double-triggering on finger lift
- Capture dialogFolderKey on dialog open for stable folder context
- Hook onStop via SortDialogDismissHooker to clear dialog state
- Rename methods for clarity: triggerAutoRelease → performLongPressClick
- Remove debugViewHierarchy and reduce per-touch logging
Hook RecentsLoader to clear lastLoadedContext, preventing wrong
per-folder saves when user opens sort dialog in Recent view.
- Add Usage section with tap/long-press behavior
- Add per-folder sorting quirks in NOTE callout
- Consolidate Requirements and Compatibility sections
- Streamline Installation and Build sections
- SortCursor hook now throws on failure (module is broken without it)
- Consistent log format: $className.method
- Add explicit type for LOADERS list
let/?: pattern fails for void methods - invoke() returns null,
causing ?: branch to also execute. Use explicit if/else instead.
@hxreborn hxreborn merged commit ffb4e6a into main Jan 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Suggestion: add option to make sorting folder specific

1 participant