Tags: loopotto/CleanSweep
Tags
fix(settings): stabilize search query flow and update dependencies This change refactors the search query debounce mechanism in SettingsViewModel to prevent the screen from flickering to an empty state while typing. It also brings all core libraries up to date with the latest releases, bumps app version to 0.9.8. - Convert `debouncedSearchQuery` from a computed property to a standard value in `SettingsViewModel` to reuse the Flow pipeline. - Bump library versions VERSION: 0.9.7 -> 0.9.8
refactor(settings): Convert settings items to composables for styling Refactored the settings screen to use a reusable `SettingsItem` composable function instead of a rigid data class structure. This enables passing styled text, such as `AnnotatedString`. - Replaced `data class SettingItem` with `@Composable fun SettingsItem`. - Replaced "GitHub" button with "GitLab" - Added a new "GitHub" button with strikethrough text to give more context on the migration - Added a dialog explaining the GitHub suspension, which is shown on click.
feat(ui): Add tooltips, 'To Edit' shortcut, and Summary Sheet layout … …enhancement This commit introduces several UI enhancements and bug fixes across the app. Bumps app version to 0.9.3. - Added Material 3 long-press tooltips to icon-only buttons in `SwiperScreen`, `DuplicatesScreen`, and `SessionSetupScreen` to improve usability and discoverability. - Implemented a "Move to 'To Edit'" option in the Swiper's media context menu. This adds a pending change to move the current item to a "To Edit" subfolder within its current directory. - Enhanced the `SummarySheet` expansion behavior. The sheet now properly wraps its content for small lists and expands to a reasonable maximum height for long lists. - Increased the maximum height of the `FastScrollbar` thumb for better aesthetic. VERSION: 0.9.2 -> 0.9.3
fix(session): Fix initial scan hang on empty media device and improve… … empty state UX Resolves a critical bug where the application would hang indefinitely on the "Scanning device..." screen during a fresh installation on devices with no media files. Bumps app version to 0.9.2. The root cause was a race condition in the data loading pipeline. The previous implementation could not distinguish between a temporary empty state from the Room cache and a definitive "no folders found" result after a full scan. This commit refactors the folder loading mechanism in `DirectMediaRepositoryImpl` to use the `transformLatest` operator, which guarantees a single, definitive emission for the initial load. Additionally, this commit introduces a new, user-friendly empty state message on the `SessionSetupScreen`. - A dedicated message with an icon now appears when no media folders are found, replacing the previous blank screen for better UX. - The implementation ensures that pull-to-refresh functionality remains fully intact on this new empty state screen. - A flicker guard was also added to the `SessionSetupViewModel` to prevent the folder list from disappearing during a manual refresh. This commit also improves some text for clarity in the "Mark as Sorted" confirmation dialog and in the Swiper "All media has been organized" page. VERSION: 0.9.1 -> 0.9.2
feat(ui): Implement progress sliders and fix layout virtualization Implements a visual progress scrollbar on all long lists to improve user navigation and provide a better sense of progress. Bumps app version to 0.9.1. Integrated the new scrollbar into the following screens: - `SessionSetupScreen`: For the main folder selection list. - `DuplicatesScreen`: For the list view, grid view, and the detailed group view. - `SummarySheet` (in `SwiperScreen.kt`): For the list of pending changes. - `OpenSourceLicensesScreen`: For the list of libraries. Refactored the `SettingsScreen` to correct its structure. The 'About' section was a remnant of a previous design and was incorrectly nested within 'Help & Support', causing a layout padding issue. It is now a distinct top-level section for consistency. A critical layout and state calculation issue was resolved in the `SummarySheet`'s grid view. The original implementation used a nested `LazyVerticalGrid` inside the main `LazyColumn`, which provided unstable measurements to the `LazyListS> Also includes misc code formatting updates and some unused code removal across the project. VERSION: 0.9.0 -> 0.9.1