SambaLite

de.schliweb.sambalite
by Zapstore _@zapstore.dev

Republished from GitHub / F-Droid by the Zapstore main account.

SambaLite is a lightweight, modern, and open-source Android client for SMB/CIFS shares (Samba). It is designed as a minimalist, reliable, and secure tool for accessing SMB shares on your local network – without ads, tracking, or unnecessary features. SambaLite is a file client, not a system-level filesystem. It focuses on accessing and transferring files, not on providing a mounted network drive. The app is intended for tech-savvy users who prefer a lean, transparent solution and value privacy and open source. Main features: • Manage connections: SMB server (hostname/IP), share/path, username, password, optional domain • Multiple connections with custom names • Connection testing with clear error messages • Secure credential storage (Android Keystore) • File browser with name, type, size, and modification date • Pull-to-refresh • Sorting (name, date, size) • File operations: download, upload, delete, rename • File properties • Dark/Light mode (system default) Compatibility: • Supports modern SMB2/SMB3 servers • SMB1 is not supported (deprecated and insecure) Security & Privacy: • No telemetry or third-party connections • No unencrypted storage of sensitive data • Credentials stored securely using the Android Keystore Permissions: SambaLite only requests the permissions required for its functionality: • Network access (SMB communication) • Access to user-selected storage locations (via Android system file picker) • Foreground service and notifications (for reliable background transfers and progress display) No data is collected or transmitted to third parties. SambaLite provides a modern, minimal, and privacy-friendly way to access SMB shares on Android – focused on reliability and transparency.

First release: Sep 17, 2025, 19 total releases.

Most recent release: Sep 26, 2026.

Repo

Appears in 1 app stack.

0 sats / 0 zaps received in the past year.

Sats Received

Underlying data available via MCP: app_zaps, app_releases.

Zap Count

Underlying data available via MCP: app_zaps, app_releases.

Releases

  • Sep 26, 2026 2.5.5
    ## SambaLite v2.5.5 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Fixed - **Folder sync skips same-size local file replacements (issue #39)**: The database fast path only compared the stored remote metadata and checked that the local size matched the remote size. Replacing a local file with different content of the same size was therefore treated as unchanged and the remote copy stayed stale. The sync state now records size and modification time of both the local and the remote side, and the fast path is used only when both sides still match the last successful sync. Same-size local updates are uploaded, while the "Newer Wins" rule is preserved: a local file that became older than the remote (e.g. restored from a backup) is never uploaded over the newer remote version, and the 3-second timestamp tolerance is applied to the local side as well to avoid spurious re-uploads caused by SAF timestamp jitter. The sync database is migrated from schema version 1 to 2 without discarding existing state. Contributed by @RubenSDev10 (PR #38). - **Queued uploads fail with "Permission Denial" after app restart**: The upload file and folder pickers did not request persistable URI permissions, unlike the download paths. If the app process was stopped before a queued upload started, `TransferWorker` could no longer open the content URI and the transfer failed permanently. Both upload picker intents now request persistable read access, and the result handlers take the permission. Contributed by @mattbasta (PR #35). ### Changed - **Tests**: `GuestLoginIntegrationTest` is pinned to the `dockurr/samba:4.23.8` image because the mutable `latest` tag no longer exposes the expected guest share. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Jun 25, 2026 2.5.2
    ## SambaLite v2.5.2 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Changed - **Faster folder sync on high-latency connections (issue #21)**: When syncing local files to a remote share, SambaLite now fetches all remote file metadata for a directory in a single `share.list()` call instead of opening every remote file multiple times (existence check + timestamp read + size read). This mirrors the approach already used for remote-to-local sync and dramatically reduces the number of SMB round-trips, which dominate sync time over Wi-Fi or slow networks. Idle syncs (many files, few or no changes) that previously took minutes or hours now complete in seconds. The per-uploaded-file overhead is also reduced by avoiding redundant post-upload metadata reads. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • May 5, 2026 2.5.0
    ## SambaLite v2.5.0 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - **Mirror Sync Mode**: One-way folder sync configurations (Local → Remote, Remote → Local) can now be run in mirror mode. After a successful sync, files and directories that previously existed on the source (tracked in the local sync state DB) but are no longer present in the source's current listing are removed on the target side as well. Mirror mode is implemented by the new `MirrorSweeper` class and is ignored for bidirectional sync. - **Mirror Trash Safeguard**: When mirror mode is enabled, removed entries are by default moved into a hidden, per-run trash folder (`.sambalite-trash/<timestamp>/<relPath>`) at the target root instead of being permanently deleted. If the storage provider does not support move, the entry is deleted as a fallback. The behavior can be toggled via the new "Move to trash folder" option. - **Mirror Sweep Sanity Limits**: To prevent catastrophic data loss from misconfigured shares or temporarily empty source listings, mirror sweeps abort automatically when the source listing is empty, or when the planned number of deletions exceeds 50% of the previously tracked entries AND more than 100 entries. - **Mirror Action Logging**: New action types in `SyncActionLog` (`MIRROR_DELETED` 🪞, `MIRROR_TRASHED` 🪞, `MIRROR_ABORTED` 🪞) and corresponding counters in the sync run summary. - **UI for Mirror Mode**: The sync setup and edit dialogs (`dialog_sync_setup.xml`) now offer a "Mirror mode" switch, a nested "Move to trash folder" switch, and a clear warning text explaining the destructive nature of the option. The sync configuration list (`item_sync_config.xml`) shows a "Mirror" indicator for configurations with mirror mode enabled. - **Trash Exclusion**: The sync engine now skips the `.sambalite-trash` folder during scans so that mirror trash from previous runs is never re-uploaded, re-downloaded, or counted against the sweep sanity limits. - **Tests**: New `MirrorIntegrationTest` (end-to-end mirror behavior against a Samba container) and `TrashExclusionTest`. `SyncStateStore` now exposes a public DAO-injection constructor to make mirror logic testable without the Android runtime. - Translations for all new mirror-mode strings in all 7 supported languages (EN, DE, ES, FR, NL, PL, ZH). ### Changed - **`FolderSyncWorker` rework**: Significantly extended (~700 added lines) to integrate `MirrorSweeper`, track per-run state, log mirror actions, and exclude the trash folder from scans on both local and remote sides. - **`SyncManager.addSyncConfig` signature**: Extended with `mirror` and `mirrorUseTrash` parameters. The legacy 6-argument overload is preserved and now defaults mirror to `false` and `mirrorUseTrash` to `true`. Mirror is automatically disabled when the direction is `BIDIRECTIONAL`. - **`SyncRepository` persistence**: `SyncConfig` JSON serialization now persists `mirror` and `mirrorUseTrash` (default: mirror off, trash on). - **Documentation**: `docs/sync_user_guide.md` updated with a dedicated section on mirror mode, the trash safeguard, and the sanity limits. ### Fixed - **Docker API compatibility for integration tests**: Testcontainers-based SMB tests previously failed against Docker Engine 29+ / OrbStack, which reject the default Docker Java client API version (1.32). The Docker API version is now pinned to 1.44 via `app/src/test/resources/docker-java.properties`, restoring CI and local integration test runs. - **Unnecessary File List Refresh on Unrelated Uploads**: `FileBrowserActivity` previously refreshed the currently displayed directory after every completed upload, even when the upload target was an entirely different folder (e.g. background sync or share uploads to another path). The refresh now only triggers when the upload's parent directory matches the directory currently shown in the browser. The new helper `isUploadInDirectory(...)` normalizes the broadcast `remotePath`, strips the share-name prefix, and compares it against the share-relative current path. The `TransferWorker` upload-success broadcast carries the `EXTRA_REMOTE_PATH` extra used for this comparison. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • May 1, 2026 2.4.1
    ## SambaLite v2.4.1 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Fixed - **Share upload to share root and duplicated path segments (Issue #27)**: When sharing files to SambaLite via the Android "Share" menu, uploads could fail or land at the wrong target if the share root or a subfolder with the same name as the share was selected. The share receiver incorrectly interpreted the first path segment as the connection name, producing paths such as `share/share/...` (e.g. `AA/AA`). The connection is now unambiguously referenced via the persisted connection ID, and the stored path is treated as a share-relative internal path (empty for the share root). - **Wrong target for subfolders with the same name as the share in `SmbRepositoryImpl`**: `getPathWithoutShare()` stripped the first path segment when it matched the active share name. For a subfolder with the same name as the share (e.g. share `music` containing a subfolder `music`), this caused `delete`, `rename`, and `create` operations to silently act on the share root instead of the subfolder. The method now only normalizes leading slashes and leaves the path otherwise unchanged. - **Consistent persistence of the current folder in `FileBrowserActivity`**: When changing the remote folder, the internal path (without the share prefix) is now stored together with the connection ID, so subsequent share handoffs can reconstruct the correct upload target. ### Changed - **Simplified share receiver flow**: Heuristics for deriving the connection from the target path (`getConnectionFromTargetPath`, `getConnectionNameFromTargetFolder`, `getPathFromTargetFolder`) have been removed. The confirmation dialog still shows a readable "share/sub/path" label, composed from the connection ID and the internal path. - **Tests**: Extended and stabilized unit tests for `ShareReceiverActivity`, `FileBrowserActivity` (new path normalization and upload target helpers), and `PathProcessingTest`. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Apr 18, 2026 2.4.0
    ## SambaLite v2.4.0 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - **Directory Multi-Select Operations**: Directories can now be selected in multi-select mode. Multi-select delete supports directories with a confirmation warning, and multi-select download supports recursive directory downloads. - **WiFi-Only Folder Sync**: New `wifiOnly` option for folder sync configurations. When enabled, `FolderSyncWorker` checks the WiFi constraint before syncing, and `SyncManager` sets `NetworkType.UNMETERED`. A MaterialSwitch is available in the sync setup and edit dialogs, and the WiFi-Only status is displayed in the sync configuration overview. - **SMB Port Support**: Custom SMB port can now be configured per connection in the connection model and repository. - **Connection Cleanup**: New `closeConnections()` method in `SmbRepository` for explicit connection lifecycle management. - **Testcontainers Integration**: Added Testcontainers support with a Samba container for realistic SMB integration testing in CI. - **Comprehensive Test Suite**: New integration and unit tests for WiFi constraints, end-to-end sync workflows, transfer queue integration, error recovery, search functionality, and notification handling. - Translations for directory selection and WiFi-Only strings in all 7 supported languages (EN, DE, ES, FR, NL, PL, ZH). ### Changed - **Selection Subtitle**: Toolbar subtitle now shows the count of selected files and directories separately during multi-select mode. - **Disk Space Check Refactoring**: Moved disk space check logic to `EnhancedFileUtils` for better separation of concerns. - **Directory Download moved to TransferWorker**: Recursive directory download logic moved from `FileOperationsViewModel` into `TransferWorker`. A single `DOWNLOAD_DIRECTORY` placeholder is enqueued, and the worker resolves directory contents using its own SMB connection — avoiding dependency on the (possibly closed) UI-layer SMB session. - **TransferWorker Work Policy**: Changed `ExistingWorkPolicy` from `REPLACE` to `KEEP` to prevent restarting an already running transfer worker when new transfers are enqueued. - **Transfer Queue Scalability**: Transfer list query now uses `LIMIT 500` to prevent `CursorWindow` overflow on large queues. Status counts (Pending, Active, Completed, Failed, Total) are observed via separate lightweight `COUNT` queries for accurate stats display independent of the list limit. - **Transfer Badge Performance**: `FileListController` now uses lightweight path-only DAO queries (`getActiveUploadPathsForConnection`, `getActiveDownloadPathsForConnection`) instead of loading full `PendingTransfer` objects for UI badge indicators. - **TransferItemAdapter Cleanup**: Removed verbose `Log.v` debug logging from `DiffUtil` callbacks. - **Test Infrastructure Overhaul**: Reworked `SmbTestHelper` and `SambaContainer`, updated and stabilized existing repository tests, and updated test documentation with the new test structure. ### Fixed - **Disk Space Protection in TransferWorker**: Added comprehensive disk space checks before, during, and after transfers. The worker now stops immediately when disk space is insufficient instead of retrying endlessly, and returns `Result.failure()` when disk is full. - **Disk Space Protection in FolderSyncWorker**: Added disk space checks before each sync config, before each file download, and periodically during downloads (every 10 MB). Sync aborts gracefully via `InsufficientDiskSpaceException` when disk space runs low. - **SQLiteFullException Crash Prevention**: `SmartErrorHandler` now catches `SQLiteFullException` on WorkManager threads (caused by WorkManager internal DB operations when disk is full) and swallows them to prevent app crashes. - **Robust DB Error Handling in TransferWorker**: Wrapped transfer status updates in try-catch to prevent secondary crashes when the database is full. - **System Monitor Disk Info**: `SystemMonitorActivity` now displays internal and external storage usage with free/total space and a low disk space warning. - **Sort Dialog Crash in Landscape Mode**: Fixed a `NullPointerException` crash when opening the sort dialog in landscape orientation. The landscape layout (`dialog_sort.xml`) was missing the `show_thumbnails_checkbox`, and `getDirectoriesFirst().getValue()` could return `null` causing an unboxing crash. - **Upload Crash After ViewModel Cleared**: Fixed a `RejectedExecutionException` crash in `FileOperationsViewModel` when tasks were submitted to the background executor after the ViewModel had been cleared. All executor submissions now use a safe wrapper that catches rejected tasks gracefully. - **Battery Dialog Crash**: Fixed a `BadTokenException` crash when showing the battery optimization dialog after the activity was already finishing or destroyed. Added lifecycle checks before displaying the dialog. - **Unnecessary Refresh on Download**: Removed redundant file list refreshes after each completed download. Since downloads don't modify the remote directory, the per-file refresh was wasting resources — especially during batch downloads with many small files. Refreshes now only occur after uploads. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Apr 7, 2026 2.3.0
    ## SambaLite v2.3.0 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - **Thumbnail Support (NEW)**: Introduced a "Show thumbnails" option in the sort dialog. Thumbnails are managed by a new `ThumbnailManager` for efficient loading and display in the file list. To ensure best performance, this feature is disabled by default. - **Improved Data Streaming**: Introduced `SmbInputStream` for more robust and efficient data reading from SMB shares. - **Enhanced Share Discovery**: Significantly expanded list of common share names (now includes localized names for media, documents, and technical folders) and implemented parallel share discovery with 8 threads for faster results. - **Dynamic Connection Feedback**: Share discovery in the "Add Connection" dialog now automatically triggers when updating username, password, or domain, providing immediate feedback. - Translations for the new thumbnail option in all 7 supported languages (EN, DE, ES, FR, NL, PL, ZH). ### Changed - **Folder Sync Optimization**: Improved performance and reliability of folder synchronization by implementing local file caching. This avoids expensive and potentially error-prone `findFile()` calls in the Storage Access Framework (SAF), which could previously cause duplicate file creations. - **Performance Optimization**: `IntelligentCacheManager` now uses a pool of 4 threads (increased from 1) for concurrent operations. - **Cache Reliability**: Added a mechanism to `IntelligentCacheManager` to prevent redundant disk writes for the same cache key in quick succession. - **UI FAB Refactoring**: Reorganized the Floating Action Buttons (FAB) in the file browser for "Select All" and "Clear Selection" for better consistency. ### Fixed - **Foreground Service Compliance**: `SmbBackgroundService` now calls `startForeground()` more reliably at every start to satisfy Android's strict 5-second contract for foreground services, preventing potential crashes. - **File List Consistency**: Implemented an update ID mechanism in `FileAdapter` to prevent stale search or directory results from overwriting newer content during rapid navigation or searching. - **Lifecycle Handling**: Improved lifecycle handling in `FileListViewModel` and `FileAdapter` to prevent potential memory leaks or inconsistent states during view updates. - **UI Interaction**: Added missing "Cancel" buttons to sort and filter dialogs for better navigation control. - **Layout Adjustments**: Fixed visibility and ordering of share discovery results in the connection dialog. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Apr 4, 2026 2.2.0
    ## SambaLite v2.2.0 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - **Sync Configuration Management on Main Screen**: Folder sync configurations are now displayed directly on the main screen with a dedicated list. Each configuration shows connection details, sync interval, and last sync time. A popup menu provides quick access to "Sync Now", "Edit", and "Remove" actions. - **Live Sync Status**: The main screen observes WorkManager to display real-time sync running/idle status for each configuration, with automatic UI refresh when sync completes. - **Sync Completion Feedback**: Snackbar notifications now inform the user whether a sync completed successfully, failed, or was interrupted and will be retried. - **Multi-Select in Transfer Queue**: The Transfer Queue now supports multi-selection with "Select All", "Deselect All", and batch action FABs for managing multiple transfers at once. - **Multi-Select in File Browser**: The File Browser gains a "Select All" FAB for quickly selecting all visible files during multi-selection mode. - **Sync Configuration Editing**: Existing sync configurations can be updated in-place via the new edit option in the popup menu. - **Persistent Transfer Queue Preferences**: Sort mode and "Hide completed" filter in the Transfer Queue are now persisted across sessions via SharedPreferences. - New icons: `ic_menu_selectall`, `ic_menu_unselectall`, `ic_menu_more` for selection and overflow actions. - Translations for all new strings in all 7 languages (EN, DE, ES, FR, NL, PL, ZH), including sync status messages (completed, failed, cancelled). ### Changed - **Transfer Queue multi-select toggle**: Tapping a transfer item in multi-select mode now toggles its selection on and off, and multi-select mode exits automatically when the last item is deselected. - **Shared text cache cleanup moved to TransferWorker**: Temporary files created by `ShareReceiverActivity` for text shares are now cleaned up after successful upload inside `TransferWorker`, instead of immediately at enqueue time in `FileOperationsController`. This ensures the source file remains available for retry if the upload fails. - `SyncConfigAdapter` now resolves and displays human-readable local paths (from content URIs) and full server paths (e.g. `//server/share/path`) instead of raw URIs and relative remote paths. - Sync action callbacks (`onSyncNowClick`, `onEditClick`, `onRemoveClick`) moved from `MainActivity` into `SyncConfigAdapter` for better separation of concerns. - `SyncConfigAdapter` receives the list of `SmbConnection`s to build full server paths for display. - Sync configuration item layout (`item_sync_config.xml`) redesigned to show local path and improved visual structure. - `SyncConfig` model extended with transient `isRunning` flag for live UI status tracking. - `SyncManager` now supports updating existing sync configurations via `updateSyncConfig()`. - `PendingTransferDao` extended with additional query methods for batch operations. - Transfer item layout updated with overflow "more options" button. - Main activity layout updated to include sync configuration list section. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Apr 2, 2026 2.1.0
    ## SambaLite v2.1.0 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    _First public release after 1.8.3. Versions 2.0.0–2.0.6 were internal development builds and were not published to Play Store or F-Droid._ ### Added - **Persistent Transfer Queue**: Uploads and downloads are now queued persistently and processed in the background via WorkManager. Transfers survive app kills and device restarts, with automatic resume from the last byte offset. Includes foreground notification with live progress, connection reuse, direct SAF→SMB streaming, and disk space checks. - **Transfer Queue Activity**: New dedicated screen to view, sort, retry, cancel, and remove queued transfers. Supports batch actions, status filtering, sorting by name/date/status, and a "Hide completed" filter. - **Individual transfer cancellation**: Users can cancel individual transfers without stopping the entire queue. - **Background transfer progress**: Accurate byte-level progress display in notifications for uploads and downloads. - **Background Search**: File search now runs in the background via WorkManager with live results appearing as they are found. Survives activity recreation. - **Batch file deletion**: Multiple files can be deleted in a single SMB session, improving performance and avoiding oplock issues. - **Multi-file overwrite dialog**: When uploading files that already exist, users can individually select which files to overwrite. - **Async transport option**: New per-connection toggle for faster SMB transfers using async direct TCP transport. - **Transfer status badges**: Files with active uploads or downloads display a transfer badge in the file browser. - **Blocked actions during transfer**: Files currently being transferred cannot be edited or multi-selected, preventing conflicts. - **Authentication before security settings**: Biometric/device authentication is now required before opening security settings if any auth setting is enabled. - **Connection failure tracking**: The transfer worker skips unreachable connections for the remainder of a run, avoiding tight retry loops. - Translations for all new strings in all 7 languages (EN, DE, ES, FR, NL, PL, ZH). ### Changed - Uploads and downloads no longer block the UI with progress dialogs — they are enqueued and processed in the background. - File search rewritten from blocking in-process execution to WorkManager-backed background search with Room persistence. - Batch file deletion replaces one-by-one deletion for multi-file operations, with single directory refresh after completion. - Unified user feedback: All messages now use Snackbar exclusively (Toast removed). Consistent color semantics: green = success, red = error, blue = informational. - File-exists dialogs refactored to custom in-layout button views for better consistency. - Layout improvements for long file names in file list and transfer queue items. ### Fixed - **Database migration crash**: Databases now use `fallbackToDestructiveMigration` to prevent crashes on schema changes. - **Cancelled transfer status**: Cancelled transfers are no longer overwritten with FAILED status. - **Single-file delete verification**: Deletion is verified and retried if the file still exists due to SMB oplock delays. - **Transfer integrity check**: File size comparisons now use actual file sizes instead of potentially stale database values. - **Keyboard not dismissed on dialog close**: Fixed on devices where the keyboard reappeared after dismissing the rename dialog. - **Folder upload overwrite selection**: Folder uploads now respect individual per-file overwrite selections. - **Thread-safe date formatting** and **locale-independent sorting** in the transfer queue. ### Removed - `FileUploadTask` class — upload logic is now handled by `TransferWorker`. - `AdvancedNetworkOptimizer` class — network optimization is handled by the system `ConnectivityManager`. - Toast-based user feedback — replaced entirely by Snackbar. - Blocking progress dialogs for uploads and downloads. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels <details> <summary>Internal development builds (2.0.0–2.0.6) — not published to Play Store or F-Droid</summary> ### [2.0.6] - 2026-04-02 - Added: Authentication before security settings, individual transfer cancellation, background transfer progress reporting. - Fixed: Database migration crash, cancelled transfer status overwrite. ### [2.0.5] - 2026-04-01 - Added: Batch file deletion, "Hide completed" filter in Transfer Queue, connection failure tracking. - Changed: Batch delete performance, layout improvements for long file names. - Fixed: Single-file delete verification with retry. ### [2.0.4] - 2026-04-01 - Added: Transfer status badges in file browser, blocked actions during transfer. - Changed: Unified Snackbar feedback, consistent color strategy. - Removed: Toast completely removed. ### [2.0.3] - 2026-03-31 - Added: Async transport option, transfer throughput logging. - Fixed: Keyboard not dismissed on dialog close, folder upload overwrite selection. - Changed: File-exists dialogs refactored, AdvancedNetworkOptimizer removed. ### [2.0.2] - 2026-03-31 - Added: Multi-file overwrite dialog. - Fixed: Transfer integrity check, thread-safe date formatting, locale-independent sorting. ### [2.0.1] - 2026-03-30 - Fixed: Polish locale lint error (MissingQuantity). ### [2.0.0] - 2026-03-30 - Added: Persistent Transfer Queue, Transfer Queue Activity, Background Search, transfer completion broadcast, duplicate upload detection. - Changed: Uploads/downloads no longer block UI, SearchViewModel rewritten, FileOperationsController refactored. - Removed: FileUploadTask, blocking progress dialogs, in-memory search. </details>
  • Mar 30, 2026 1.8.3
    ## SambaLite v1.8.3 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Improved - Transfer performance: Increased I/O buffer size from 8 KB to 64 KB for uploads and downloads. - Upload progress reporting: Throttled progress updates to reduce UI overhead during large file transfers. ### Fixed - Keyboard remains visible after renaming: On some devices (e.g., Amazon Fire Tablet), the soft keyboard reappeared after dismissing the rename dialog due to a race condition with pending focus events. Fixed by clearing focus on the edit text and adding a delayed secondary `hideKeyboard()` call (100ms) in the dialog's `OnDismissListener`. - FAB buttons stuck in multi-selection state: After starting a batch download or delete via the floating action buttons, the selection UI (FAB icons, selection count) was not cleared. Added `clearSelection()` calls to both FAB click handlers to match the existing toolbar menu behavior. - SAF folder picker missing "Use this folder" option: When reopening the folder picker for downloads, the previously used folder was shown but the "Use this folder" button was absent. Fixed by storing the last used download folder URI and setting `EXTRA_INITIAL_URI` on the picker intent. The stored URI is converted from a tree URI to a document URI via `DocumentsContract.buildDocumentUriUsingTree()`, which is required for the SAF picker to recognize the folder and offer the selection button. - Duplicate progress dialogs: Prevented duplicate progress dialog creation when multiple operations start in quick succession by introducing a `dialogShowPending` guard flag. - Upload/download state race condition: Fixed a race condition where the uploading/downloading LiveData could reflect a stale count by reading the AtomicInteger inside the posted Runnable instead of capturing a local snapshot. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Mar 16, 2026 1.7.0
    ## SambaLite v1.7.0 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - Modernized all dialogs (Rename, Search, Sort, Progress, Sync Setup, Loading, Share) with Material Design 3 styling matching the Connection dialog: header with icon card, title and subtitle, MaterialCardView sections, and consistent 24dp padding. - New custom layouts for Share dialogs (`dialog_share_upload.xml`, `dialog_share_needs_target.xml`, `dialog_upload_complete.xml`, `dialog_file_exists.xml`) with Material Design 3 header and card sections. - New "Change folder" dialog (`dialog_change_folder.xml`) for Share workflow, displaying available connections as clickable Material cards (matching the Shares section in the Connection dialog). - Night theme variant for `Theme.SambaLite.Dialog` to ensure correct text colors in Dark Mode. - Translations for all new dialog subtitles and labels in all supported languages (DE, ES, FR, NL, PL, ZH). - Automatic service shutdown: The background SMB service now stops automatically when all activities are closed and no file transfers are active, eliminating the need to manually stop the service. ### Changed - Replaced CheckBox with MaterialSwitch in Search and Sort dialogs for a more modern appearance. - Replaced ProgressBar with LinearProgressIndicator (Material Design 3) in the Progress dialog. ### Fixed - Memory leak: `SmbBackgroundService$LocalBinder` (non-static inner class) held an implicit strong reference to the destroyed service, preventing garbage collection. Converted to a static class with `WeakReference`. ### Developer Notes - `BackgroundSmbManager`: New `visibleActivityCount` (AtomicInteger) tracks visible activities. New `onActivityStarted()`/`onActivityStopped()` methods auto-stop the service when count reaches zero and no operations are active. Auto-stop check also added in `finishOperation()`. - `MainActivity` and `FileBrowserActivity`: Added `onStart()`/`onStop()` lifecycle overrides to call the new activity tracking methods. - `SmbBackgroundService.LocalBinder`: Converted from non-static inner class to `static` class with `WeakReference<SmbBackgroundService>`. Added `clearService()` called in `onDestroy()`. - `BackgroundSmbManager.onServiceConnected()`: Updated to handle nullable return from `getService()`. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Mar 14, 2026 1.6.0
    ## SambaLite v1.6.0 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - Adaptive launcher icons for improved visual consistency across Android devices and launchers. - `SharesDiffCallback` for efficient RecyclerView list updates when browsing SMB shares. - GitHub Actions workflow for automated code quality checks (CI). - New unit tests for caching, file utilities, diff callbacks, and progress formatting. - Open files directly from SMB shares: New utility classes for file opening (`FileOpenHelper`), MIME type resolution (`MimeTypeUtils`), cache management (`OpenFileCacheManager`), and a custom `FileProvider` with `_data` column support for broad app compatibility. - `downloadToCache` method in `FileOperationsViewModel` for managing open-file downloads and cache handling. - Leave confirmation dialog when navigating away from the file browser during active file transfers. - New unit tests for `MimeTypeUtils` and `OpenFileCacheManager` covering MIME type resolution, cache cleanup, and size-based eviction logic. - Translations for leave confirmation and file open strings in all supported languages. - FileProvider configuration (`file_paths.xml`) for external file sharing via content URIs. ### Changed - Comprehensive `@NonNull` and `@Nullable` annotations added across the entire codebase (~40 classes) for improved null safety, API clarity, and `NullPointerException` prevention. Affected areas include ViewModels, controllers, adapters, repositories, utilities, cache classes, sync classes, Dagger components, and more. - Enabled stricter lint checks with a new lint baseline for better code quality enforcement. - Updated WorkManager dependencies to version 2.11.1. - Removed unused resources, plurals, and obsolete strings; simplified layout attributes for dialogs. - Refactored `SambaLiteApp` and utility classes for enhanced readability and formatting consistency. - Removed redundant API-level checks in `BatteryOptimizationUtils`. - Replaced `getMimeType` implementation in `FolderSyncWorker` with shared utility method from `MimeTypeUtils`. - Prevented potential memory leaks in `DialogController` by replacing strong `Context` references with `WeakReference` and adding null checks. - Made `instance` field volatile in `IntelligentCacheManager` to ensure thread-safe singleton access. - Improved keyboard handling: New utility method for hiding keyboard in dialogs; dialogs now resize correctly with keyboard visibility. - Added file transfer activity checks before finishing `FileBrowserActivity` and streamlined FAB visibility logic. - Added default case handling in `SmartErrorHandler` switch statements for improved code clarity. - Used UTF-8 charset explicitly in `hashString` method and simplified fallback hash calculation logic. - Removed redundant code: unused `Locale` import and `getSubnetFromIp` method in `NetworkScanner`, unused `lastByteCount` field in `BandwidthMonitor`, redundant `if` checks in `DiscoveredServerAdapter` and `SharesAdapter`, unused `isLifecycleAtLeastStarted` method in `ProgressController`, redundant fallback cache key logic in `SearchViewModel`, unnecessary type checks in `SerializationValidator`. - Suppressed lint warnings in `FileListCacheOperations`, `CacheMaintenanceManager`, `SmbBackgroundService`, `SmbRepositoryImpl`, `SearchCacheOperations`, and `ShareReceiverActivity` for future-use variables and non-API types. - Open-file cache cleanup now runs on app start in `SambaLiteApp` initialization. - Updated `AndroidManifest.xml`: Added FileProvider for external file sharing and handle configuration changes in `MainActivity`. ### Fixed - `FileDiffCallback.areContentsTheSame` now compares timestamps correctly. - Keyboard dismissal logic fixed in `MainActivity` dialogs. ### Developer Notes - Lint baseline file added to track and gradually resolve pre-existing lint issues. - `SharesDiffCallback`: New `DiffUtil.ItemCallback` implementation for `SmbFileItem` lists, enabling efficient partial RecyclerView updates. - Null safety annotations applied systematically to: `FileBrowserUIState`, `FileListController`, `FileListViewModel`, `ConnectionAdapter`, `FileOperationCallbacks`, `FileSkippedException`, `FileUploadTask`, `InputController`, `LogUtils`, `PreferenceUtils`, `ProgressController`, `ProgressFormat`, `UIHelper`, `UserFeedbackProvider`, `ActivityResultController`, `DialogController`, `MemoryCacheStrategy`, `DiscoveredServerAdapter`, `SmbFileItem`, `LoadingIndicator`, `SearchCacheOperations`, `ShareReceiverViewModel`, `ShareReceiverActivity`, `SimplePerformanceMonitor`, `BatteryOptimizationUtils`, `SmartErrorHandler`, `CacheKeyGenerator`, `CacheExceptionHandler`, `SambaLiteApp`, Dagger components, `ViewModelFactory`, `ConnectionRepository`, `SmbRepository`, and related test classes. - CI workflow: GitHub Actions pipeline for lint, unit tests, and build verification. - `MimeTypeUtils`: Extracted shared MIME type resolution utility, used by both `FolderSyncWorker` and the new file open feature. - `OpenFileCacheManager`: Size-based eviction cache for temporarily stored files opened from SMB shares. - `DialogController`: Refactored to use `WeakReference<Context>` to prevent activity leak on configuration changes. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Mar 8, 2026 1.5.1
    ## SambaLite v1.5.1 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - Hide hidden files/folders: New "Show hidden files/folders" toggle in the sort dialog. Files and folders starting with a dot (e.g. `.config`, `.cache`) are now hidden by default, reducing clutter when browsing Linux home directories or other locations with many dotfiles. - The setting is persisted across app restarts and applies to both normal browsing and search results. - Translations for the new option in all 7 languages (EN, DE, ES, FR, NL, PL, ZH). ### Fixed - Sync icon was incorrectly shown on parent folders (e.g. "Podcasts") when only a deeper subfolder (e.g. "Podcasts/BundB") was configured for sync. Now only the actual sync-configured folder displays the sync icon. - Local folder collision check for sync configurations: Prevents setting up sync on a local folder that is already synced, or is a parent/child of an already-synced folder. Supports Android Content-URIs with encoded path separators (`%2F`). Translations in all 7 languages. - Memory leak: `FileBrowserUIState` (Dagger singleton) retained a reference to a destroyed `FileBrowserActivity` via `syncFolderDisplay` (TextView), causing a ~2 MB leak on every activity recreation (e.g. rotation). - Navigation state lost on device rotation: Browsing a subfolder and rotating the device would reset the file browser to the root directory, because `FileBrowserState.setConnection()` cleared the current path on every activity restart. ### Developer Notes - `PreferencesManager`: New `saveShowHiddenFiles()`/`getShowHiddenFiles()` methods with `show_hidden_files` SharedPreferences key (default: `false`). - `FileBrowserState`: New `showHiddenFiles` field and `showHiddenFilesLiveData`, loaded from preferences on initialization. - `FileListViewModel`: New `filterHiddenFiles()` method applied after sorting in all `loadFiles` paths (cache, server, force-refresh) and in search results. New `setShowHiddenFiles()` triggers cache invalidation and reload. - `DialogController.showSortDialog()`: Wired `show_hidden_files_checkbox` to `FileListViewModel`. - `dialog_sort.xml` (portrait + landscape): Added CheckBox for the new option. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Jan 14, 2026 1.3.2
    ## SambaLite v1.3.2 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Changed - Improved button visibility in Scan and Connection dialogs for large font settings: buttons now use full-width vertical layout. - Increased minimum height of Scan and Connection dialogs (400dp) for better usability on various display configurations. - Streamlined welcome screen by removing redundant "Add Connection" button (FAB remains available). ### Fixed - Buttons in Network Scan dialog were not visible with certain display and font settings. - Buttons in Add/Edit Connection dialog were not visible with large font configurations. ### Developer Notes - `dialog_network_scan.xml`: Wrapped in `NestedScrollView` with `fillViewport="true"` and `minHeight="400dp"`; button bar changed to vertical orientation with full-width buttons. - `dialog_add_connection.xml`: Added `minHeight="400dp"` and `fillViewport="true"`; added custom vertical button bar with Save/Cancel buttons. - `MainActivity.java`: Updated Add and Edit connection dialogs to use custom buttons instead of AlertDialog default buttons. - `activity_main.xml`: Removed `welcome_add_button` from welcome card.
  • Jan 14, 2026 v1.3.2 Release page →
    ## SambaLite v1.3.2 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Changed - Improved button visibility in Scan and Connection dialogs for large font settings: buttons now use full-width vertical layout. - Increased minimum height of Scan and Connection dialogs (400dp) for better usability on various display configurations. - Streamlined welcome screen by removing redundant "Add Connection" button (FAB remains available). ### Fixed - Buttons in Network Scan dialog were not visible with certain display and font settings. - Buttons in Add/Edit Connection dialog were not visible with large font configurations. ### Developer Notes - `dialog_network_scan.xml`: Wrapped in `NestedScrollView` with `fillViewport="true"` and `minHeight="400dp"`; button bar changed to vertical orientation with full-width buttons. - `dialog_add_connection.xml`: Added `minHeight="400dp"` and `fillViewport="true"`; added custom vertical button bar with Save/Cancel buttons. - `MainActivity.java`: Updated Add and Edit connection dialogs to use custom buttons instead of AlertDialog default buttons. - `activity_main.xml`: Removed `welcome_add_button` from welcome card.
  • Oct 25, 2025 v1.3.1 Release page →
    ## SambaLite v1.3.1 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - Multi-select for files with batch Download and Delete actions. ### Changed - Reused existing progress UI and Cancel flow; hardened dialog lifecycle (reliable open/close on success, error, or cancel). - Unified wording and internationalization: replaced hardcoded strings in controllers/viewmodels with resources; consistent labels and summaries. - Cleanup of temporary files/folders across success, error, and cancel paths. - Selection UX: long-press to enter selection mode, tap toggles items, toolbar shows selected count; contextual FAB icons in multi-select mode (Download, Delete). ### Developer Notes - Controller-driven iteration without repository API changes; improved cancel propagation and progress reporting. - Key components: FileOperationsController, FileOperationsViewModel, ProgressController, and string resources. If you like this update, support SambaLite here: https://ko-fi.com/egdels • https://www.paypal.com/paypalme/egdels
  • Oct 11, 2025 v1.3.0 Release page →
    ## SambaLite v1.3.0 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - Per-connection security options in Add/Edit Connection: toggles to "Require encryption (SMB3)" and "Require signing". - Translations for the new security options: de, es, fr, nl, pl, zh. ### Changed - Use a per-connection SMB client configuration (encryption/signing) when needed instead of relying solely on a single global client. ### Fixed - Connection failures to Samba shares with `smb encrypt = required` or signing requirements. The app now negotiates encrypted/signed sessions when configured per connection. ### Developer Notes - SmbConnection: added boolean fields `encryptData` and `signingRequired` (persisted via ConnectionRepositoryImpl; defaults to false for existing entries). - SmbRepositoryImpl: new `getClientFor(SmbConnection)` builds an `SmbConfig` with `withEncryptData(...)` and `withSigningRequired(...)` (fallback to `withSigningEnabled(...)` if needed) and uses it across search/list/withShare. - UI: `dialog_add_connection.xml` adds security switches; MainActivity wires them for Add/Edit and Test Connection.
  • Oct 6, 2025 v1.2.10 Release page →
    ## SambaLite v1.2.10 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Added - Chinese translation (zh).
  • Oct 1, 2025 v1.2.9 Release page →
    ## SambaLite v1.2.9 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Developer Notes Code cleanup, no functional changes
  • Sep 17, 2025 v1.2.8 Release page →
    ## SambaLite v1.2.8 ### Downloads - **APK**: For direct installation (sideloading) - **AAB**: For Google Play Store and other app stores ### Verification Both files include SHA256 checksums for integrity verification. ### Changelog
    More…
    ### Improvements - Share intent: More reliable multi-file uploads. The previous absolute 60-second timeout for entire batches has been removed. Instead, a per-file inactivity watchdog (reset by progress) is used. Long uploads will no longer be aborted prematurely. - Google Photos (Share): More robust URI handling. For URIs with the authority `com.google.android.apps.photos` we no longer call `takePersistableUriPermission()`; we rely on the temporary read grant from the intent and still perform best-effort self grants. This reduces log warnings and makes starting uploads more reliable. ### Fixed - Premature cancellation after ~60s when the first shared file is large in the share workflow. ### Developer Notes - `SmbBackgroundService.executeSmbOperation`: removed absolute batch timeout; only the inactivity watchdog remains. - `FileBrowserActivity.checkAndHandleShareUpload`: skip persistable permissions for Google Photos URIs.