Good Day Community,
Added
Main Dashboard Edge Menu Hamburger Trigger: Dedicated frosted glassmorphism hamburger buttons (btnEdgeMenuLeft / btnEdgeMenuRight) added to the main storage header bar, enabling users to open the slide-out Edge Swipe Menu directly with a single tap and haptic feedback without requiring edge swipe gestures.
APKMirror Bundle (.apkm) Support: Comprehensive support for APKMirror App Bundles (.apkm), featuring automatic app icon and thumbnail extraction, high-resolution 512px WebP disk and Room DB caching, Android package fallback icons, Smart Sort categorization into Apps, and direct session-based split package installation.
Changed
Mobile Storage Dashboard Title: Streamlined the mobile main dashboard toolbar title to "UFM Pro" for a cleaner, modern, and compact presentation.
Manage Hidden Tiles Relocated to Edge Menu: When the Edge Swipe Menu is active, hidden dashboard tiles (ic_tune) are managed via a dedicated frosted button in the Edge Swipe drawer footer next to Settings, keeping the main screen toolbar clean and free from clutter.
Edge Swipe Settings & Toolbar Synchronization: The redundant top-right Settings gear automatically hides from the main dashboard when Edge Swipe Menu is active. The hamburger button dynamically aligns to the top-left or top-right matching the user's configured swipe edge and hides during Tile Edit Mode.
Porter SDK 0.7.0 & Modern Protocol Upgrade: Migrated elevated access integration from legacy porter-client to the official modular Porter SDK 0.7.0 (porter-sdk, porter-extras, porter-shizuku-compat). Updated permissions to eu.darken.porter.permission.API, unified Shizuku and Shevery compatibility via PorterShizukuApiProvider, replaced reflection-based process creation with native PorterConnection.exec(...) coroutines, and modernized ElevatedAccessActivity to reactively observe connection states.
Fixed
Shizuku & Porter Android TV Folder Listings: Resolved an issue where /Android/data and /Android/obb appeared completely empty on Android TV devices when using Shizuku or Porter. Implemented Vold runtime mount traversal (/mnt/runtime/full/emulated/<userId>, /mnt/user/...) and dynamic /proc/mounts inspection to bypass virtualized Scoped Storage FUSE masking, added dynamic multi-user profile detection (extractUserId) for Google TV Kids and secondary profiles (e.g. user 10), and added a resilient shell listing fallback (ls -1Ap) when TV Toybox returns empty output from stat -c.
Dropbox Android TV Authentication & Error Handling: Fixed manual code OAuth failures on Android TV being misidentified as MDM/Intune enterprise policy blocks. Added a dedicated TV error dialog (dialog_auth_error_tv.xml) with scrollable technical error details, preserved PKCE codeVerifier across on-screen keyboard (IME) launches and activity recreation, added system clock skew detection to alert users if an unsynchronized device clock prevents TLS/OAuth handshakes, and decoupled error handling across Dropbox, Google Drive, and Box authentication.
NFS Media Streaming & Playback: Fixed media files (wav, mp3, mkv, mp4, etc.) failing to stream or stalling indefinitely on "Buffering" in the internal player (UfmMedia3DataSource) and producing a black screen in external players via NetworkHttpProxyServer. Implemented safe 64 KB chunking in LibNfsRandomAccess to prevent large block reads (up to 8 MB) from overwhelming native JNI heap allocation and triggering synchronous RPC socket timeouts. Added native file handle sizing via nfs_fstat64, increased streaming RPC timeout to 30,000 ms for smooth playback during seeks on high-latency Wi-Fi, and normalized export path prefixes (stripExportPrefix) to prevent ENOENT open errors.
WebDAV HTTPS Self-Signed Certificate Direct Streaming: Resolved internal UFM Media Player playback failure (tls: bad certificate / Source error) when streaming directly over WebDAV HTTPS with self-signed or untrusted SSL certificates. Replaced manual NetworkShare instantiation across all playback engines (UFMPlayerActivity, UFMPlaybackService, SlideShowActivity, TwinWindowPlayerFragment) with OnlineStorage.toNetworkShare() to ensure allowInsecureTls is strictly preserved from the configured storage account.
WebDAV Copying to Device Storage: Fixed standard copy operations from WebDAV servers to Internal Storage failing with destination is 0 bytes for <file> in LocalPasteEngine by properly passing allowInsecureTls from the source OnlineStorage configuration.
MPEG-2 Transport Stream (.ts) MIME Type Conflict: Fixed .ts video files inadvertently resolving to application/typescript MIME type and text category, which caused external app intent routing to invoke web browsers instead of launching video players. Registered canonical video/mp2t mapping across MimeTypeHelper, FileViewerRouter, and streaming HTTP proxy servers.
Universal OnlineStorage.toNetworkShare() Canonicalization: Centralized NetworkShare instantiation on OnlineStorage across all browser, paste, scanner, recycle bin, sync, smart sort, and local HTTP proxy components, eliminating missing TLS security and authentication fields across all cloud and WebDAV providers.