Added
- Main Menu Storage Favorites (Mobile & Android TV): Long-pressing on the main menu to enter Edit Mode and selecting an actual storage tile (Internal Storage, SD Card, USB, SAF custom location, Network share, or Cloud mount) displays a UFMStandard dialog to add the storage location as a favorite shortcut on the device home screen (or Android TV preview channel) with custom naming support.
- Main Menu Duplicate Suppression: Storage favorites added from the main menu are tracked in Settings (
FavoritesManager) where they can be removed or disabled, while being cleanly suppressed from generating duplicate tiles on the main menu screen. - Mobile Long-Press Viewer & Slide Show Triage: Mobile long-press triage dialog in UFM Viewer and Slide Show to rapidly Copy or Move items to a persistent destination folder across Local, SAF, Network, and Cloud storage with zero data loss conflict handling.
- Subtitle Styling Customization (Mobile & Android TV): Full subtitle styling customization for the video player supporting both system caption styles and custom UFM styling (yellow
#FBBF24font, outline, size, color, background, edge effects, and bottom margin). - UFMStandard Subtitle Styling Dialogs: Mobile glass bottom sheet and Android TV centered 680dp D-pad navigable dialog featuring interactive live subtitle preview against a simulated video gradient.
- Direct Subtitle Styling Quick-Access: Added a direct "Subtitle Style" entry button in the in-player subtitle track selection sheet.
- Global Subtitle Styling Settings: Dedicated Subtitle Styling preference under Player Settings in SettingsActivity with live summary updates.
- Direct CaptioningManager Integration: Direct OS captioning style retrieval reading system font scale and user style regardless of whether the global master accessibility CC toggle is enabled.
- Custom "Open With" Resolver & Chooser (Mobile & Android TV): Replaced Android's capped system resolver with a custom, high-performance "Open With" experience that discovers and lists all installed applications capable of handling the file with no 10-app limit.
- Full Media Player & Document Visibility: Added package queries for popular video players (MX Player Free/Pro, VLC, Just Player, Kodi, MPV, Nova) and document viewers, guaranteeing they appear in the chooser without needing broad query permissions.
- UFMStandard Glass Mobile Bottom Sheet: Displays file preview header (name, size, MIME type badge), responsive 4-column app grid, dynamic search bar when over 12 apps are installed, a dedicated "Always use selected app" glass card with toggle switch, and a full-width "Use Android System Chooser" button.
- UFMStandard 10-Foot TV Dialog: Centered 780dp glass dialog with 10-foot typography (18sp text, 56dp+ icons), full D-pad remote directional navigation with yellow glow focus highlights, "Just once" / "Always" footer buttons, and long-press OK context menu ("Always use this app", "App info").
- Media & Subtitle Extra Parity: Full integration with UFM's media intent engine, automatically attaching video titles, resume tracking (
from_start = false), and sibling subtitles for external players, plus MX Player extras. - Default Application Management: Set persistent app associations per file extension ("Always"), with automatic recovery if an app is uninstalled, and backup/restore registration in SettingsBackupManager.
- Favorites Home Screen Presence (Mobile & Android TV): Any saved favorite (folder or file, local or network) can now be pinned directly to the device home screen.
- Mobile Launcher Shortcuts: Pinned shortcuts on mobile launch directly into the folder or open the file in UFM's viewer.
- Android TV Preview Channel: Added a dedicated "UFM Favorites" preview channel on Android TV with 16:9 glass poster cards for pinned items.
- Save Favorite Home Screen Toggle: Added an "Add to home screen" checkbox in the Add/Save Favorite dialog across Standalone, Tabbed, and Twin-Window browsers.
- Favorite Star Badge Overlays: Overlaid a distinctive gold star badge on the top-right corner of all launcher shortcut icons and TV preview cards.
- Manage Favorites Home Screen Actions: Tapping the trash icon in Settings → Manage Favorites for a pinned item opens a UFMStandard dialog with options to either remove from the home screen or delete the favorite completely.
Changed
- Unified Subtitle Rendering: Consolidated video player subtitle rendering to the canonical
playerView.subtitleView, removing redundant overlaid subtitle views. - Dynamic Subtitle Elevation: Automatically elevates subtitles above player controls when media controls are visible and lowers them when controls hide.
Fixed
- Instant Home Screen Shortcut Launch: Replaced intermediate trampoline activity launches for folder and storage shortcuts with direct explicit intents, eliminating launch lag and opening storage locations instantly from the home screen launcher and Android TV preview channels.
- Shortcut Router Theme Attribute Crash: Fixed an
UnsupportedOperationExceptioncrash when inflating shortcut error dialogs inFavoriteShortcutActivityby properly inheritingTheme.UltimateFileManageronTheme.UFM.Transparent. - Shortcut ID Upsert & Deduplication: Fixed silent favorite drop issues when re-pinning existing storage paths, preserving canonical IDs and synchronizing launcher shortcut state.
- Custom Folder & File Icon Application in File Manager Views: Fixed custom image icons (PNG, JPG, ICO, WEBP) and built-in alternative icons assigned in Settings → Icons not displaying on directories and files in file manager views (
FileAdapter,NetworkFileAdapter,RecycleBinAdapter,VaultFolderPickerActivity,ManageFavoritesAdapter). Resolved by providing unified icon application helpers, adding thread-safe in-memory caching for overrides and custom bitmaps (LruCache) to eliminate scroll stutter, preventing monochromatic theme tint washout on custom full-color image bitmaps, enforcing mutual exclusivity when toggling between custom image files and built-in vector icons, staging custom icons in app-private storage on mobile, and enabling distinct"folder_network"customization for network shares. - Edge Bar Tile Icon Consistency: Fixed tile icons in the Edge Bar Quick Access drawer inadvertently shifting to cyan/accent colors instead of consistently remaining white to match the Home screen tiles.
- Activity Lifecycle QueuedWork ANR (
LastLocationManager,TwinWindowPreferenceManager,TabSessionManager,PairingManager,AutoBackupPrefs): Fixed a main-thread freeze and ANR ("Main thread blocked >5000ms" inQueuedWork.waitToFinish()called fromActivityThread.handleStopActivity(), reported on Xiaomi MiTV-AFKR0, Android SDK 30, app 2.2.1-GOOGLE) when activities stop or pause while concurrent disk I/O occurs.SharedPreferences.apply()schedules background disk writes throughQueuedWork, which forces the main thread to block and drain all pending write finishers at activity lifecycle boundaries (onPause/onStop). Moved browsing location tracking (LastLocationManager), Twin Window pane configuration snapshots (TwinWindowPreferenceManager), tab session serialization (TabSessionManager), paired device storage (PairingManager), and auto-backup state flags (AutoBackupPrefs) to serialize disk persistence via synchronouscommit()on dedicated single-thread background executors, completely decoupling lifecycle teardown from flash memoryfsyncflushes and eliminatingQueuedWorkmain-thread blocking. - CursorWindow Allocation & Shared Memory Crash (
UfmApplication,RecycleBinDatabase,UfmIndexingDatabase): Fixed an unhandledandroid.database.CursorWindowAllocationException("Could not allocate CursorWindow '/data/user/0/za.kilowatch.ultimatefilemanager/databases/ufm_indexing.db' of size 52428800 due to error -12") on Android TV and low-memory devices (reported on Haier Android TV DVB2K, SDK 30, app 2.2.1-GOOGLE) caused by process-wide static reflection overridingCursorWindow.sCursorWindowSizeto 50MB, which forced every subsequent SQLite/Room database query cursor across the entire application to attempt allocating a 50MB contiguous ashmem shared memory region. Removed the unsafe reflection overrides inUfmApplicationandRecycleBinDatabaseto preserve Android's system default window sizing, relying on established query-level pagination (LIMIT 500,LIMIT 250 OFFSET offset) and direct SQL aggregations. - Media Playback Queue Callback Initialization Crash (
UFMPlayerActivity,UFMPlaybackService,QueueManager): Fixed an unhandledjava.lang.NullPointerException(Attempt to read from field 'java.lang.String xt7.a' on a null object reference) inUFMPlayerActivity.onQueueChangedandonTrackChangedduring service callback registration on Android TV (reported on NVIDIA SHIELD Android TV, SDK 30, app 2.2.1-GOOGLE) when playback queue callbacks were dispatched before tracks finished initializing or when empty/null items were encountered. Filtered null items acrossQueueManagermutations (setQueue,addToQueue,playNext,queue), sanitized list transformations viamapNotNullandfilterNotNullinUFMPlayerActivity.onQueueChangedandUFMPlaybackService.updateQueue, safely guardedonBindViewHolderagainst null or out-of-bounds positions inTvPlayerPlaylistAdapterandQueueAdapter, and validated track path non-emptiness before executing track change workflows. - Media Playback Queue Concurrency & Index Out Of Bounds Crash: Fixed an unhandled
java.lang.ArrayIndexOutOfBoundsException(length=250; index=458) inUFMPlaybackServiceandQueueManagerwhen automatically advancing tracks or reading the active queue item while background metadata extraction or queue modifications occurred concurrently. HardenedQueueManagerwith thread synchronization across all mutations and queries, clampedcurrentIndexassignments to valid queue boundaries, safely handled bounds incurrentItemandget(), replaced race-prone full-queue re-setting inextractMetadata()with atomic in-place item updates (replaceItem()), and bounded TV/mobile playlist adapter index assignments. - Storage Browser Dialog Window Token Crash: Fixed an unhandled
WindowManager$BadTokenException("Unable to add window -- token android.os.BinderProxy is not valid; is your activity running?") when launching auto-backup restore, password prompts, rating dialogs, or crash submission dialogs while the activity is transitioning, stopped, or backgrounded on Android TV and mobile devices. - Android TV Preview Channel Publishing: Attached the channel logo directly during channel creation, resolving channel rollback in the TV Provider and ensuring UFM correctly appears in Android TV "Customize channels".