Skip to content

Releases: softartdev/NoteDelight

desktop/8.5.5

01 May 23:03

Choose a tag to compare

feat: implement biometric authentication and reorganize core modules

- Implement biometric authentication for Android and iOS using a platform-agnostic `BiometricInteractor`.
- Add `BiometricEnrollViewModel` and `BiometricDisableViewModel` to handle secure credential enrollment and management.
- Introduce `BiometricEnrollDialog` and `BiometricDisableConfirmationDialog` UI components.
- Update `SignInViewModel` and `SettingsViewModel` to support biometric unlock and configuration toggles.
- Implement secure storage using Android Keystore (AES-GCM) with DataStore on Android, and Keychain with biometric access control on iOS.
- Relocate the `:ui:shared` module to `:core:ui` and reorganize testing modules into a nested `:core:test` structure (`:common`, `:ui`, `:jvm`).
- Introduce `AutofillInteractor` to decouple presentation logic from the Compose-specific `AutofillManager`.
- Add `TooltipIconButton` common composable and apply it to action buttons in `NoteDetail`, `FileListScreen`, `MainScreen`, and `SignInScreen`.
- Refine the `DeleteDialog` UI to use Material 3 error color schemes and updated button styles.
- Update string resources to include biometric labels and refine empty state messaging.
- Add UI test cases for biometric sign-in and settings flows.
- Bump project version to `8.5.5` and update dependencies including Gradle (9.5.0), AGP (9.2.0), and Kotlin (2.3.21).
- Update project documentation, architecture guides, and GitHub Actions workflows to reflect the new module structure.

android/8.5.5

01 May 23:28

Choose a tag to compare

feat: implement biometric authentication and reorganize core modules

- Implement biometric authentication for Android and iOS using a platform-agnostic `BiometricInteractor`.
- Add `BiometricEnrollViewModel` and `BiometricDisableViewModel` to handle secure credential enrollment and management.
- Introduce `BiometricEnrollDialog` and `BiometricDisableConfirmationDialog` UI components.
- Update `SignInViewModel` and `SettingsViewModel` to support biometric unlock and configuration toggles.
- Implement secure storage using Android Keystore (AES-GCM) with DataStore on Android, and Keychain with biometric access control on iOS.
- Relocate the `:ui:shared` module to `:core:ui` and reorganize testing modules into a nested `:core:test` structure (`:common`, `:ui`, `:jvm`).
- Introduce `AutofillInteractor` to decouple presentation logic from the Compose-specific `AutofillManager`.
- Add `TooltipIconButton` common composable and apply it to action buttons in `NoteDetail`, `FileListScreen`, `MainScreen`, and `SignInScreen`.
- Refine the `DeleteDialog` UI to use Material 3 error color schemes and updated button styles.
- Update string resources to include biometric labels and refine empty state messaging.
- Add UI test cases for biometric sign-in and settings flows.
- Bump project version to `8.5.5` and update dependencies including Gradle (9.5.0), AGP (9.2.0), and Kotlin (2.3.21).
- Update project documentation, architecture guides, and GitHub Actions workflows to reflect the new module structure.

desktop/8.5.4

18 Apr 05:02

Choose a tag to compare

feat: add SQLite console and platform-aware version checks

- Implement a custom SQL console feature with domain, presentation, and UI modules, enabling ad-hoc SQLite queries across all platforms.
- Add `ConsoleSurface`, a Compose Multiplatform terminal UI with theme-aware syntax coloring, multi-line input support, and scrollback history.
- Introduce a typed `Platform` enum to replace the `platformName()` function for better type safety and platform-specific logic.
- Update `CheckSqlCipherVersionUseCase` to support `sqlite3mc_version()` checks on Desktop and Web platforms.
- Refactor `AdaptiveFrame` to utilize `WindowSizeClass` breakpoints for improved responsive layouts.
- Replace custom `BackHandler` with `NavigationBackHandler` from `androidx.navigationevent`.
- Enhance the vendored SQLDelight Paging3 extension with async-driver support for `generateAsync = true`.
- Add an Android APK release workflow to GitHub Actions and update installation documentation.
- Update project version to `8.5.4` and bump various dependencies, including Gradle (9.4.1), Kotlin (2.3.20), and KSP (2.3.6).
- Update `.gitignore` to exclude AI-related directories (`.claude/`, `.codex/`).

android/8.5.4

18 Apr 05:16

Choose a tag to compare

feat: add SQLite console and platform-aware version checks

- Implement a custom SQL console feature with domain, presentation, and UI modules, enabling ad-hoc SQLite queries across all platforms.
- Add `ConsoleSurface`, a Compose Multiplatform terminal UI with theme-aware syntax coloring, multi-line input support, and scrollback history.
- Introduce a typed `Platform` enum to replace the `platformName()` function for better type safety and platform-specific logic.
- Update `CheckSqlCipherVersionUseCase` to support `sqlite3mc_version()` checks on Desktop and Web platforms.
- Refactor `AdaptiveFrame` to utilize `WindowSizeClass` breakpoints for improved responsive layouts.
- Replace custom `BackHandler` with `NavigationBackHandler` from `androidx.navigationevent`.
- Enhance the vendored SQLDelight Paging3 extension with async-driver support for `generateAsync = true`.
- Add an Android APK release workflow to GitHub Actions and update installation documentation.
- Update project version to `8.5.4` and bump various dependencies, including Gradle (9.4.1), Kotlin (2.3.20), and KSP (2.3.6).
- Update `.gitignore` to exclude AI-related directories (`.claude/`, `.codex/`).

desktop/8.5.3

10 Mar 00:52

Choose a tag to compare

feat: add web database encryption and app version display

- Enable web database encryption using SQLite3MultipleCiphers WASM with OPFS storage.
- Implement `AppVersionUseCase` across all platforms (Android, iOS, JVM, WasmJs) to display the application version in the Info settings.
- Rename "Theme" settings category to "Appearance" and update related UI components and test tags.
- Refactor `SettingsViewModel` and state handling to use a unified `SettingsResult` model.
- Extract shared build logic into reusable Gradle convention extensions for Karma tests, SQLite3MC resources, and dependency management.
- Remove the vendored `androidx.paging.compose` fork.
- Expand WasmJs UI test coverage and update shared test infrastructure.
- Bump project version to `8.5.3` and update dependencies (Gradle 9.4.0, Compose 1.10.2).
- Update documentation for web encryption, OPFS, and database export/inspection.

desktop/8.5.2

05 Feb 22:23

Choose a tag to compare

feat: Implement adaptive Settings layout and cross-platform database …

desktop/8.5.1

27 Jan 01:02

Choose a tag to compare

feat: Refactor note handling and migrate build configuration

- **Note Handling & Adaptive UI**:
    - Update `NoteDetail` and `NoteAction` to use `TextFieldState` and `CharSequence` for text input.
    - Implement a save-change confirmation flow via `AdaptiveInteractor` when creating or switching notes in adaptive layouts.
    - Remove explicit `title` parameters from `NoteAction.Save` and `CheckSaveChange`, centralizing title generation logic in `NoteViewModel`.
    - Lift `SnackbarHostState` to the `App` level and update `GlobalSnackbarHost` to ensure visibility over system bars and the keyboard.
    - Adjust `ExtendedFloatingActionButton` in `MainScreen` to move upward dynamically when a snackbar is displayed.

- **Build & CI/CD**:
    - Migrate from `android-library` to `android-kotlin-multiplatform-library` across core and UI modules.
    - Update AGP to 9.0.0, Compose to 1.10.0, and Gradle to 9.3.0.
    - Rename `androidUnitTest` source sets to `androidHostTest` and `androidInstrumentedTest` to `androidDeviceTest` to align with new KMP project structures.
    - Increase `kotlin.native.jvmArgs` to `-Xmx8g` for improved build performance.

- **Testing**:
    - Add `CreateNoteWhileSelectedTestCase` and `SaveDialog` page object to support testing save-change flows.
    - Disable unstable iOS and process checker tests on CI.
    - Improve database cleanup in JVM UI tests to handle WAL and journal files.

- **Refactoring & Cleanup**:
    - Standardize Compose preview imports using `androidx.compose.ui.tooling.preview.Preview` globally.
    - Ensure dialog text and password fields use `fillMaxWidth` for consistent UI layout.
    - Add explicit type to `QueryResult` in `WebSafeRepo` for Wasm compatibility.

desktop/8.5.0

08 Jan 01:34

Choose a tag to compare

feat: Improve wasmJs and iOS testing and database handling

- Refactor WebAssembly (wasmJs) database worker to support both SQLite3-WASM/OPFS and SQL.js as a fallback.
- Add `deleteDatabase` functionality for iOS to properly clean up database files, including WAL and SHM.
- Configure wasmJs browser tests to run with Karma and Chrome.
- Introduce `WebUiTests.kt` and `IosUiTests.kt` extending a common test base to improve test isolation.
- Bump app versions to `8.5.0` for Android and iOS.

refactor: Use test tags and remove `runBlockingAll` in UI tests

- Replace string resource lookups in UI tests with `testTag` modifiers for improved stability and performance.
- Create a centralized `TestTags.kt` file to define all UI test tags.
- Remove the `runBlockingAll` utility and update tests to use standard coroutine scopes.
- Add a reusable `PasswordSaveButton` composable to reduce code duplication in password-related dialogs.

docs: Consolidate documentation into the /docs directory

- Move module structure, version management, and testing documentation into the central `/docs` directory.
- Update `CONTRIBUTING.md` and other guides to link to the new centralized documentation.

desktop/8.4.9

23 Dec 17:20

Choose a tag to compare

refactor: Stabilize and multiplatform UI tests

This commit refactors the UI testing infrastructure to improve stability and enable multiplatform testing. It introduces a new `ui:test` module for common UI test logic and stabilizes tests by using idling resources.

### Key Changes

-   **New `ui:test` Module**
    -   A new Gradle module, `ui:test`, has been created to house multiplatform UI tests.
    -   Existing UI test cases (`CrudTestCase`, `SettingPasswordTestCase`, etc.) and screen objects have been moved from `ui/test-jvm` to `ui:test/src/commonMain` to enable them to run on all platforms (Android, iOS, Desktop, and Web).
    -   `ui:test-jvm` now contains only JVM-specific utilities, such as the bridge between `ComposeContentTestRule` and the multiplatform `ComposeUiTest`.

-   **UI Test Stabilization with Idling Resources**
    -   Introduced `CountingIdlingRes`, a new utility in `core/domain` to track the state of long-running asynchronous operations in ViewModels.
    -   ViewModels now increment/decrement this counter during operations like database access or encryption changes.
    -   A `ComposeCountingIdlingResource` has been added to `ui/test-jvm` to integrate with the Compose test framework, making tests wait for async operations to complete, thus preventing flakiness.

-   **Test Tagging and Navigation**
    -   Added explicit test tags to UI components in security dialogs (`EnterPasswordDialog`, `ConfirmPasswordDialog`, `ChangePasswordDialog`) and the `SignInScreen` for more reliable test node selection.
    -   Improved the `RouterImpl` by setting `launchSingleTop = true` for all navigation actions to prevent duplicate screen instances.
    -   Added abstract navigation tests (`AbstractNavigationTest`) for Android and Desktop to verify router behavior.

-   **Dependency and Version Updates**
    -   Upgraded Kotlin to version `2.3.0` and updated various other dependencies like `androidx.activityCompose` and `androidx.paging`.
    -   Bumped the application version to `8.4.9` for Android, iOS, and Desktop.
    -   Added a `CHANGELOG.md` file to document project changes.

-   **Minor Refinements**
    -   Removed the `android_ui_test_job` dependency on `build_job` in the GitHub Actions workflow.
    -   Cleaned up and improved formatting in `.podspec` files.
    -   Added a "Save" string resource used in password dialogs.

desktop/8.4.8

13 Dec 08:22

Choose a tag to compare

feat: Enable SQLCipher encryption for Desktop JVM

This commit introduces database encryption support for the Desktop JVM target using SQLCipher, achieving feature parity with the Android and iOS versions. This was accomplished by replacing the standard `sqlite-jdbc` driver with `sqlite-jdbc-crypt`, a fork that bundles SQLCipher.

Key changes include:
- **feat(db-sqldelight):**
    - Added `sqlite-jdbc-crypt` as the JDBC driver for the `jvmMain` source set.
    - Updated `JdbcDatabaseHolder` to construct an encrypted JDBC URL with SQLCipher parameters (`cipher=sqlcipher`, `legacy=4`, and `key`) when a password is provided.
    - Implemented `JvmCipherUtils` to handle the encryption and decryption of the database file by leveraging SQLCipher's `ATTACH` and `sqlcipher_export` functionalities.
    - Added `JvmCipherUtilsEncryptionTest` to provide robust testing for the encryption/decryption logic.
- **test(desktop):**
    - Enabled previously ignored encryption-related UI tests for the desktop module (`flowAfterCryptTest`, `settingPasswordTest`).
    - Improved the reliability of UI tests by adding descriptive logging, explicit waits, and ensuring `requireNotNull` checks in the navigation router for better error reporting.
- **refactor(ui-test):**
    - Enhanced UI test helpers (`waitUntilDisplayed`, `waitAssert`, etc.) with descriptions for better debugging and logging.
    - Added logging to UI test cases (`SettingPasswordTestCase`, `FlowAfterCryptTestCase`) to trace test execution flow.
- **chore(deps):**
    - Bumped various dependencies, including AGP, Firebase, Compose, and SQLCipher.
    - Updated package versions for Android, iOS, and Desktop to `8.4.8`.
- **docs:**
    - Updated `README.md` and `ARCHITECTURE.md` files to reflect that encryption is now supported on the Desktop JVM platform.
- **fix(android):**
    - Configured the Crashlytics log writer to capture logs from `Debug` severity and higher in release builds to improve remote diagnostics.