Added
- Main Dashboard Edge Menu Hamburger Trigger: Added dedicated hamburger menu buttons (
btnEdgeMenuLeft/btnEdgeMenuRight) in the main storage header bar with glassmorphism frosted styling to open the slide-out Edge Swipe Menu directly on tap with haptic feedback. - APKMirror Bundle (.apkm) Support: Added full support for APKMirror App Bundles (
.apkm), including app icon thumbnail extraction, 512px WebP disk and Room DB caching, Android package fallback icons, Smart Sort app categorization, and direct session-based split package installation.
Changed
- Mobile Storage Dashboard Title ("UFM Pro"): Streamlined mobile main dashboard toolbar title to "UFM Pro" for a cleaner, compact presentation.
- Relocated "Manage Hidden Tiles" to Edge Menu: When Edge Swipe Menu is enabled, 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 & Header Toolbar Synchronization: When Edge Swipe Menu is active, the redundant top-right Settings gear is automatically hidden from the main screen (since Settings is directly accessible inside the swipe drawer footer). The hamburger button is dynamically aligned to the top-left or top-right matching the user's configured swipe edge, and automatically hides during Tile Edit Mode.
- Porter SDK 0.7.0 & Modern Protocol Upgrade: Migrated elevated access integration from legacy
porter-clientto official Porter SDK0.7.0(porter-sdk,porter-extras, andporter-shizuku-compat). Updated permission declarations fromeu.darken.porter.permission.API_V23toeu.darken.porter.permission.API. Replaced deprecatedPorterProviderandSelectedShizukuProviderwith officialPorterShizukuApiProviderfor unified Shizuku and Shevery compatibility. Eliminated fragile reflection-based process creation in favor of officialPorterConnection.exec(...)via suspending coroutines. ModernizedElevatedAccessProbeandElevatedAccessActivityto reactively observePorter.connectionStateFlow and use suspending permission requests.
Fixed
- Shizuku & Porter Android TV Folder Listings: Fixed empty folder listings in
/Android/dataand/Android/obbon Android TV when using Shizuku or Porter by adding runtime mount traversal (/mnt/runtime/full), dynamic multi-user profile support, and a robust shell listing fallback. - Dropbox Android TV Authentication & Error Dialogs:
- Fixed an issue where Dropbox manual code authentication failures on Android TV were misidentified as enterprise policy (MDM/Intune) blocks.
- Introduced a dedicated TV authentication error dialog (
dialog_auth_error_tv.xml) that displays transparent status descriptions and keeps scrollable technical error details (txtErrorDetails) visible. - Added PKCE
codeVerifierstate preservation across on-screen keyboard (IME) launches and activity recreation inDropboxManualCodeAuthActivity. - Added system clock skew validation on Android TV to warn users if an unsynchronized post-factory reset device date/time is preventing secure TLS/OAuth connections.
- Decoupled enterprise policy dialogs across
DropboxAuthActivity,GoogleDriveAuthActivity, andBoxAuthActivityso standard OAuth, network, and token exchange failures display accurate error details rather than assuming policy restrictions.
- NFS Media Streaming & Playback (
LibNfsClient,LibNfsBridge,nfs_jni.c,NfsShareClient):- 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 viaNetworkHttpProxyServer. - Implemented safe 64 KB chunking in
LibNfsRandomAccess.read()andwrite(), preventing large block reads (up to 8 MB) from overwhelming native JNI heap allocation and triggering synchronous RPC socket timeouts. - Added native
nfsFstatSizevianfs_fstat64on open file handles, eliminating redundant and fragile path-basednfs_stat64re-lookups. - Increased random access streaming RPC timeout to 30,000 ms to ensure smooth playback during seeks and buffering on high-latency or Wi-Fi connections.
- Added export path prefix normalization (
stripExportPrefix) to prevent duplicate mount export paths from causingENOENTduring file opens.
- Fixed media files (
- WebDAV HTTPS Self-Signed Certificate Direct Streaming & Playback: 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 manualNetworkShareinstantiation across all playback engines (UFMPlayerActivity,UFMPlaybackService,SlideShowActivity, andTwinWindowPlayerFragment) withOnlineStorage.toNetworkShare()to ensureallowInsecureTlsis strictly preserved from the configured storage account. - WebDAV Standard Copying to Device Storage: Fixed standard copy operations from WebDAV servers to Internal Storage failing with
destination is 0 bytes for <file>inLocalPasteEngineby properly passingallowInsecureTlsfrom the sourceOnlineStorageconfiguration. - MPEG-2 Transport Stream (.ts) MIME Type Conflict: Fixed
.tsvideo files inadvertently resolving toapplication/typescriptMIME type and text category, which caused external app intent routing to invoke web browsers to download the file instead of launching media players. Registered canonicalvideo/mp2tmapping acrossMimeTypeHelper,FileViewerRouter, and streaming HTTP proxy servers. - Universal OnlineStorage.toNetworkShare() Canonicalization: Centralized
NetworkShareinstantiation onOnlineStorageacross 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. - Folder Item Counting with Hidden Files: Fixed folder child item counter excluding subfolders and files starting with a dot (such as
.thumbnailor.nomedia) when "Show hidden files" is enabled. Synchronized item counting across local, SAF, root, Shizuku, and network/cloud storage in both Standalone and Tabbed/Twin Window modes.