Skip to content

Releases: mini-page/Cleanify

v2.9.2

Choose a tag to compare

@mini-page mini-page released this 17 Jun 09:08

v2.9.2 - UX Polish & Media Controls

New Features

  • Per-media tap actions: Images open preview, videos/audio play/pause, PDFs/docs no-op
  • Audio mute/unmute toggle: Mute button now works on audio files
  • Audio/Docs 3:4 ratio: Audio players and document previews display in a centered 3:4 card
  • Hide Action Buttons: New toggle for immersive swiping without delete/keep buttons
  • Scan Video Files: Toggle in Settings > Media & Storage
  • File type scan toggles: Filter by Images/Videos/Audio/Documents in duplicate scanner
  • Hide filename toggle: Controls filename visibility in context menu

Improvements

  • Video controls hidden by default, shown when paused
  • N/N counter pill has better padding
  • Video mute state defaults to unmuted
  • Removed duplicate lint entry in lint.xml

Bug Fixes

  • Fixed ClassCastException in
    estoreSessionState (savedStateHandle collision)
  • Fixed mute toggle not working on audio files
  • Fixed duplicate scanner empty state rescan button
  • Fixed home screen empty state rescan button
  • Fixed FileCategory unresolved reference in SwiperViewModel

Full Changelog: v2.9.1...v2.9.2

v2.9.1

Choose a tag to compare

@mini-page mini-page released this 17 Jun 05:22

v2.9.1 - Bug Fixes & Performance

Bug Fixes

  • Fix crash on Start Session button tap (ClassCastException in SwiperViewModel)
  • Fix duplicate scanner empty state - add Rescan button
  • Add Rescan button on home screen empty state

Performance

  • Split SettingsScreen: 1982 → 563 lines (72% reduction)
  • Split SwiperScreen: 2973 → 793 lines (73% reduction)

Testing

  • Add Compose UI tests (EmptyState, SectionHeader, SettingSwitch)

Other

  • Add lint configuration
  • Clean up code structure into packages

Cleanify v2.9.0

Choose a tag to compare

@mini-page mini-page released this 15 Jun 11:08

🎉 Cleanify v2.9.0

✨ New Features

  • Immersive Mode — Hide status/navigation bars in Swiper (Settings → Appearance)
  • Privacy Policy & Terms of Use — Standalone web pages linked in app About screen
  • Recycle Bin Home Shortcut — Long-press app icon to access Recycle Bin directly

🌐 Website & Links

  • Developer portfolio link updated (mini-page.github.io/ugsoc)
  • Website images fixed (GitHub raw URLs, now work on Vercel)
  • Website lazy loading + DNS prefetch hints added
  • CONTRIBUTING.md repository links fixed

🔧 Improvements

  • Settings dropdowns now inline with pill-shaped trigger (like toggles)
  • N/N counter restored as simple pill in Swiper header
  • Swipe direction tags appear on trailing edge for clarity
  • 3-dot menu dropdown positioned correctly below button
  • Git tags v2.5.0 and v2.7.0 backfilled

🐛 Fixes

  • Dropdown menu positioning in settings
  • Keep/Delete tag colors and positions during swipe
  • Media info sheet accessibility

APK: Cleanify-v2.9.0-release.apk (universal)

v2.8.0: UI/UX Audit, Code Quality & Swiper Redesign

Choose a tag to compare

@mini-page mini-page released this 13 Jun 12:35

What's New

SwiperScreen Redesign

  • Icon-only round buttons for Delete/Keep with smooth interactions
  • Swipe direction tags (Keep/Delete) overlay on card during swipe
  • Stronger swipe visuals - 0.9 alpha, 3-stop radial gradient, smoother feel
  • Long press menu - truncated filename, integrated Info button for media info
  • 3-dot menu consolidated - Open With, Share, Info all in dropdown
  • N/N counter pill moved to header next to 3-dot menu

Settings Screen

  • Replaced ModalBottomSheet with DropdownMenu for all 18 picker items (DRY principle)
  • Layout settings moved to Sorting sub-page

Code Quality

  • Preference wrapper for type-safe preferences
  • Formatters.kt - shared fileSize(), duration(), pathForDisplay() eliminating 5 duplicates
  • Fixed API 33+ crash - getInstalledApplications() now uses ApplicationInfoFlags
  • Proper logging - replaced e.printStackTrace() with Log.w() in FileManager
  • AppDialog - consistent styling for all confirmation dialogs across app

Bug Fixes

  • Fixed FileManager deprecations (getUuid() → uuid)
  • Fixed StorageVolumeProvider isRemovable API handling
  • Fixed FileScanner API 33+ compatibility
  • Added logging to silent catch blocks in RecycleBinManager, NomediaManager, ContactCleanerViewModel

APKs

  • arm64-v8a - Most modern devices (recommended)
  • armeabi-v7a - Older 32-bit ARM devices
  • x86_64 - 64-bit emulators
  • Universal - All architectures (larger file)

Cleanify v2.7.0

Choose a tag to compare

@mini-page mini-page released this 12 Jun 07:28

What's New in v2.7.0

✨ Immersive Media Preview

Full-screen viewer with pinch-to-zoom, double-tap reset. Just the media — clean close/delete overlays only.

📊 Storage Analysis (New Tool!)

Donut chart showing used vs free storage, per-volume cards (internal + SD), category breakdown bars (Images, Videos, Music, Documents, APK, Downloads), and top-10 largest files with tap-to-detail dialog.

🧹 Multi-Volume Empty Cleaner

Dynamic volume selector when external storage is detected — scan All, Internal storage, or SD Card individually.

♻️ Recycle Bin Rewrite

Select-all/deselect-all toggle, always-visible tabs, media preview for images/videos, confirm dialogs for delete/empty operations.

♿ Accessibility

Reduce Animations toggle (snap transitions), Hide from Gallery (.nomedia, default ON), haptic feedback on destructive actions, full TalkBack support on all interactive elements.

🔗 App Shortcuts & Widgets

4 deep-link shortcuts (Empty Cleaner, Contact Cleaner, Duplicates, Recycle Bin), Quick Settings tile, redesigned home screen widget with emoji icons.

📂 External Storage Support

Cross-volume file moves, multi-root scanning across internal + SD + USB OTG in all cleaner tools.


Note: R8/proguard is temporarily disabled for this release due to a known OOM issue during minification. Debug builds are unaffected.

v2.6.0

Choose a tag to compare

@mini-page mini-page released this 11 Jun 06:59

Changelog

All notable changes to Cleanify are documented here.

[2.6.0] — 2026-06-11

Added

  • Native xxHash64 hashing engine — SHA-256 replaced with xxHash64 via C/NDK
    for exact duplicate detection. Uses mmap() for zero-copy file access, delivering
    ~10x faster hash computation on bulk media scanning.
  • CMake + NDK integration — C code compiled for all 4 ABIs (arm64-v8a,
    armeabi-v7a, x86_64, x86) and bundled into split APKs automatically.
  • NativeHasher fallback — pure-Kotlin hashBytes() fallback if native
    library fails to load, ensuring no functionality regression.
  • Release keystore — generated at app/release.jks for signed release builds.

Changed

  • Duplicate scanningDuplicateFinderUseCase now calls native xxHash64
    for full file hashes, partial video hashes, and pixel hashes instead of
    MessageDigest("SHA-256").
  • ABI-split APKssplits { abi { ... } } configured to produce separate
    APKs per architecture plus a universal fallback.

[2.5.0] — 2026-06-11

Added

  • Haptic feedback on destructive actions: swipe left/right/down in the media
    swiper, delete in Contact Cleaner, Duplicate Finder, Recycle Bin, Empty Cleaner,
    and "Apply Changes" in the Summary Sheet. Provides tactile confirmation for
    all irreversible operations.
  • In-app update checker (Settings → About → Updates). Checks
    github.com/mini-page/Cleanify/releases/latest, shows changelog dialog,
    downloads APK with progress bar, and launches the system package installer.

v2.4.0

v2.4.0 Pre-release
Pre-release

Choose a tag to compare

@mini-page mini-page released this 11 Jun 04:55

What's New in v2.4.0

✨ New Features

  • Tooltips — PlainTooltip added to Close, Favorite, More, Info, Create Album, Skip, Undo, Delete, and Keep icons in the swiper screen
  • Info bottom sheet — ⓘ button opens a details sheet with metadata (name, type, size, resolution, duration, dates) plus Rename and Drop Metadata actions
  • Rename items — Rename files directly from the info bottom sheet via an AlertDialog with OutlinedTextField
  • Drop EXIF metadata — Strip EXIF tags (artist, datetime, GPS, make, model, software) from images using ExifInterface
  • Favorite button — Heart icon in SwiperTopBar toggles item favorites, persisted via DataStore
  • Gesture settings sub-page — Dedicated settings page for swipe sensitivity, swipe-down action, full-screen swipe, invert swipe, tap action, and double-tap action
  • Tap / Double‑tap actions — Configurable tap (Play/Pause, None) and double-tap (Favorite, Fullscreen, None) actions
  • Invert swipe visual swap — FABs swap colors/icons when Invert Swipe is enabled (left shows Keep/Check, right shows Delete/Trash)
  • ABI-split APKs — Separate APKs for arm64-v8a, armeabi-v7a, x86_64, x86 plus universal

🎨 UI Changes

  • 80% container width — Media card width reduced to 80% of screen for edge-to-edge peeking
  • Filename overlay removed — Filename setting now controls visibility in the info bar instead of overlaid on the card
  • FAB swap — Left/right FABs visually invert when Invert Swipe is enabled

🛠 Build & Release

  • Version bumped to 2.4.0 (code 9)
  • Release keystore generated with credentials from gradle.properties
  • ProGuard rule added to suppress PDFBox JP2 warnings
  • R8 minification enabled for release builds
  • ABI-split APK configuration added