github Kilowatch/ultimate-file-manager-pro v2.1.8

5 hours ago

Added

  • Per-Thread Speed Telemetry & Multi-Threading Progress Section: Added real-time per-thread transfer speed metrics and active thread breakdown to the file transfer progress dialogs across all 4 browser implementations (FileBrowserActivity, NetworkBrowserActivity, TabbedBrowserActivity, and TwinWindowActivity). Displays live average throughput per thread and an active thread grid dynamically populated based on the user's configured thread count (1, 2, 4, 6, or 8 threads).
  • Canonical UFMStandard Transfer Threads Dialog: Migrated the Settings multi-threading dialog from stock platform single-choice dialogs to custom Mobile and Android TV glass layouts (dialog_network_transfer_threads.xml and dialog_network_transfer_threads_tv.xml) with frosted lightning hero badge, technical performance descriptions per option, checkmark indicators, and D-pad focus handling.
  • Native Linux Companion App (UFM-Linux/): Native Linux desktop companion built with Tauri 2, Rust, and React 19 for Wayland and X11 desktops (#45).
  • Wayland-First Integration: Stable app_id (za.kilowatch.ufm-companion) for tiling compositors (Sway, Hyprland, Niri), native decorations, and XDG desktop portal integration.
  • Standalone AppImage & Deb Packaging: Standalone .AppImage and .deb packaging with an Ubuntu 22.04 glibc 2.35 baseline.
  • Native Rust Core Engine: Multi-NIC UDP broadcast LAN discovery, TLS TOFU SHA-256 certificate fingerprint pinning, and streaming transfer buffers implemented in the Linux companion Rust backend (UFM-Linux/src-tauri).
  • Automated Linux CI/CD Workflow: GitHub Actions build workflow (.github/workflows/linux-companion.yml) for Linux companion compilation, tests, and release asset generation.
  • Restored Windows Companion Backend: Restored Windows desktop companion Rust backend (UFM-Windows/src-tauri/).

Changed

  • Multi-Threading Settings Title Extended to SMB: Updated Settings title and backup descriptor from "FTP & SFTP Multi-threading" to "FTP, SFTP & SMB Multi-threading" to reflect parallel segmented transfer and multi-worker engine support across SMB shares. Automatically cleaned stale keys from all 17 non-English translation files.
  • Transfer Progress Dialog UFMStandard Compliance: Standardized dialog_transfer_progress.xml and dialog_transfer_progress_tv.xml with frosted hero badges (bg_btn_icon_frosted) and embedded Cancel buttons, eliminating stock platform dialog buttons. Migrated FileBrowserActivity from programmatic dialog views to the canonical layout.
  • Folder Sync & Advanced Sync Android TV Layouts: Modernized Android TV layouts to adhere to UFMStandard:
    • Reduced profile card height by 50% (~84dp) with 44dp frosted icon containers, inline schedule badges, and horizontal source-to-destination route lines.
    • Standardized TV header bar (64dp) and safe padding (32dp), eliminating oversized 120dp margins and bloated empty states.
    • Rebuilt Sync and Advanced Sync TV edit screens into two-column widescreen forms with horizontal segmented button rows, replacing 1,700px wide stretched single columns.
    • Polished TV action dialogs with standard yellow primary action buttons and clean spacing.

Fixed

  • Instant Sync Watcher Startup Main Thread Blocked ANR (UfmApplication, InstantSyncWatcher, AdvancedSyncProfileRepository): Resolved a cold-start ANR ("Main thread blocked >5000ms") on Android TV and mobile devices (reported on a Changhong AI PONT DE, Android 14 / SDK 34, app 2.1.6-GOOGLE). During application cold start, InstantSyncWatcher.rewatchAll() was invoked synchronously on the main thread looper in UfmApplication.onCreate() after the ANR watchdog had armed. In rewatchAll(), AdvancedSyncProfileRepository.getInstance() read advanced_sync_profiles.json from flash storage while storage and startup indexing were spinning up under heavy cold-start I/O contention, followed by synchronous File.canonicalPath resolution and directory exists() / isDirectory() stat queries across enabled profiles during watcher registration. Offloaded InstantSyncWatcher.rewatchAll(), WorkManager daily Recycle Bin cleanup scheduling, and ReviewPrefs.init() from onCreate() to the background daemon thread ufm-startup-io. In addition, guarded InstantSyncWatcher.rewatchAll() to automatically dispatch to a background daemon thread (ufm-instantsync-init) if invoked on the main looper, synchronized InstantSyncWatcher map state (watchers, watchPaths, debounceHandlers, debounceRunnables, pendingTriggers) and AdvancedSyncProfileRepository profile mutations against concurrent access, and ensured debounced trigger execution runs asynchronously on the I/O dispatcher.
  • Advanced Sync Android TV Size Unit Button ClassCastException (AdvancedSyncEditActivity): Fixed an uncaught java.lang.ClassCastException: com.google.android.material.button.MaterialButton cannot be cast to com.google.android.material.button.MaterialButtonToggleGroup crash (java.lang.RuntimeException: Unable to start activity ... AdvancedSyncEditActivity) on Android TV devices (e.g. Xiaomi MIBOX4, SDK 31) when opening the Advanced Sync profile edit screen. In the Android TV widescreen layout (activity_advanced_sync_edit_tv.xml), toggleMinSizeUnit and toggleMaxSizeUnit are standard compact Button widgets styled for D-pad navigation rather than mobile MaterialButtonToggleGroup containers. Updated property declarations to View?, added D-pad click listeners to cycle units between MB and GB on press, and harmonized profile loading and saving to evaluate unit state across both mobile and TV layouts.
  • Linux AppImage Blank Window (Could not connect to localhost: Connection refused): The published Linux companion AppImage/deb were built as Tauri development binaries with no embedded frontend assets, so the webview tried to load the Vite dev server (http://localhost:1420, build.devUrl) and showed a blank WebKit error page for end users. Linux companion releases are now built with tauri build in GitHub Actions, and the pipeline runs UFM-Linux/scripts/verify-appimage.sh, which fails the build if the production frontend bundle is not embedded.
  • Linux Companion Drag & Drop / File Picker: Fixed APK/XAPK sideloading on Linux where Tauri intercepts OS file drops and WebKitGTK does not expose real file paths through the DOM (File.path is empty). Drag & drop now uses the Tauri webview drag-drop events (onDragDropEvent, absolute paths), and the browse action uses the native @tauri-apps/plugin-dialog picker (XDG portal friendly on Wayland).
  • Linux Companion AppImage Verifier (CI): The UFM-Linux/scripts/verify-appimage.sh guard added with the embedded-assets fix could never pass: it looked for a hard-coded payload binary name (ufm-companion) that tauri build does not produce (the payload is the Cargo binary, ufm-linux), and its strings | grep -q check aborted itself under set -o pipefail (the upstream strings dies with SIGPIPE once grep finds a match). The verifier now discovers the payload binary by inspection and checks the extracted strings safely, so it reliably rejects dev builds and accepts production builds.

Don't miss a new ultimate-file-manager-pro release

NewReleases is sending notifications on new releases.