Added
- Elevated Access In-App Downloads: Directly download and trigger package installation for Shizuku and Shevery in-app on Mobile and Android TV matching the FOSS auto-update experience, complete with release notes and streaming progress.
- USB OTG & External HDD Safe Removal (Eject): Added the ability to safely remove connected USB flash drives, external HDDs, and SD cards on Android and Android TV via dedicated eject buttons on storage cards, context menus, and the file browser overflow menu. Performs active transfer pre-flight checks, flushes dirty kernel write cache to physical storage via POSIX sync, and unmounts elevated volumes via Shizuku/Root or guides standard users directly to OS storage settings.
- Mock USB OTG Drive Simulator: Added an optional simulated USB OTG drive with realistic sample files for testing mounting, browsing, transfers, and safe removal without physical hardware. Completely hidden from Settings and the UI when the feature toggle is disabled.
- Unmounted Storage Detection & 1-Tap Remount: Connected SD cards, USB drives, and simulated drives that are in an unmounted/ejected state are now retained on the main storage screen with an
(Unmounted)badge, tap-to-mount subtitle, and dedicated Mount button (📥). Supports elevated 1-tap remounting via Shizuku/Root or direct 1-tap shortcut to Android OS Storage Settings for standard users. - Display installed application icons as badges on the top-right corner of folders in
Android/data,Android/obb, andAndroid/mediaon mobile. - Removal Warning When a Drive Is Still in Use: Before an elevated unmount, UFM now inspects the target volume and reports what still holds it open — open files, memory-mapped files, and watched folders.
Unmount Anywayproceeds;Keep It Mountedaborts without touching the volume. Previously the unmount was issued with no warning, even when the app itself still held a reference. - Twin Window Handles Storage Removal: If a volume is disconnected while Twin Window is open, the pane showing it is closed and the surviving pane is promoted. If both panes were on that volume, UFM returns to the Main Menu. A message explains what happened in both cases.
Fixed
- Unmount Vold SIGINT Termination: Fixed an issue where unmounting an SD card or USB drive caused the Android
volddaemon to terminate the app withSIGINTdue to lingering directory file descriptors held by background coroutines onGlobalScope. Coroutines inFileAdapterare now bound to an adapter-lifecycle-scoped job, cancelled on detach, and flushed with a brief synchronization pause before elevated unmounting. - Unmounted Storage Subtitle Display: Fixed an issue where unmounted storages showed
0 B free of 0 Bwith an empty progress bar. Unmounted and offline volumes now hide the capacity progress bar and displayUnmounted • Tap to mountbeneath an(Unmounted)badge. - Multi-File Share Saving: Fixed an issue where sharing multiple files from an external app (e.g. Gallery, Photos) to UFM only saved the first file instead of all shared files.
- Media Playback Foreground Service Watchdog Crash: Fixed
RemoteServiceException$ForegroundServiceDidNotStartInTimeExceptioninUFMPlaybackServiceon Android SDK 36 (Android 14+) by invokingsafeStartForegroundimmediately inonCreate()and at the top ofonStartCommand(), gracefully callingstopSelf()if foreground promotion fails, preferringstartService()overstartForegroundService()from foreground activities, guarding against empty playback commands when re-entering from the mini-player or notifications, resolvingintent.datapaths, and avoiding synchronous SAF file size queries on the main looper for large playlists. - Twin Window Crash on Recreate / Split Change: Fixed
IllegalArgumentException: No view found for id ... (paneBottom)inTwinWindowActivityby standardizing pane container IDs (pane1andpane2) across all mobile and TV horizontal/vertical layouts, and discarding stale fragment state on recreation so orientation and split preference switches never attempt to restore fragments into missing containers. - ADB Session Foreground Service Watchdog Crash: Fixed
RemoteServiceException$ForegroundServiceDidNotStartInTimeExceptioninAdbSessionForegroundServiceby promoting to foreground on everyonStartCommandinvocation, guarding background starts on Android 14+ (SDK 34–36) viaProcessLifecycleOwner, and deferring service termination to the main looper to prevent immediate ActiveServices binder contract violations. - Safe Removal No Longer Terminates the App: Ejecting an SD card, USB drive or external HDD could close UFM instantly, with no error message and no crash report. Android's
volddaemon signals every process still holding a reference to a volume before unmounting it, and because UFM issues the unmount itself, it was signalled by its own request. Before an elevated unmount, UFM now closes the viewers, caches and background jobs it holds on the target volume, re-inspects the volume afterwards to report anything still holding it open, and flushes buffered writes to disk last. - Tabbed Browsing Explains Tabs Closed by Storage Removal: When storage was disconnected while UFM was in the background, the affected tabs were closed before the user returned, so the message explaining why was never seen. Tabs are now pruned on return to the foreground, so the explanation is shown.