github Darknetzz/jotty-android v1.4.0

4 hours ago

Install

Download jotty-android-1.4.0.apk from this release (release-signed when CI secrets are configured).

*Updating from an older -debug.apk or mixed signing? Android may show "App not installed" — uninstall once, then install this APK. Your Jotty server data is unchanged.

Full changelog: https://github.com/Darknetzz/jotty-android/blob/v1.4.0/CHANGELOG.md


Added

  • Home-screen widget — A New note Glance widget opens the app straight into the create-note dialog.
  • Markdown formatting toolbar — The note editor has a toolbar for bold, italic, code, heading, bullet list, quote, and link that wraps the current selection or inserts at the cursor.
  • Share into Jotty — Text shared from other apps (and the widget) opens a prefilled new note via an ACTION_SEND share target.
  • Category management — Pick or type a category when creating notes/checklists and change it from the detail editor, with suggestions from existing categories.
  • Sort menu — Notes and checklists can be sorted by Updated, Created, or Title; the choice is remembered.
  • Material You — Settings → Appearance → Theme color adds a Dynamic option using wallpaper colors on Android 12+.
  • Reader text size — Settings → Appearance → Reader text size (Small / Medium / Large / Extra large) scales note content.
  • Quick instance switcher — The top bar shows the current instance accent and a menu to switch instances or manage them.
  • Richer dashboard — Settings → Overview now breaks down checklist items and tasks with totals and completion progress bars.
  • Reduced motion — Settings → Appearance → Reduced motion (System / On / Off). System follows the device accessibility setting; On skips decorative transitions such as the setup ↔ main cross-fade.
  • Note list preview toggle — Settings → Behavior → Note preview in list shows or hides the body excerpt under each title in the notes list (encrypted notes still show the lock label).
  • Update changelog from GitHub — When checking for updates, the app fetches CHANGELOG.md from the matching branch (main for stable, dev for dev-latest) and uses it for “What’s new” instead of the bundled file on the installed APK.

Changed

  • Settings UX — “Offline mode” renamed to Local storage & sync; sync status when unreachable shows Server unreachable (not “Offline”). Export debug logs replaces the debug-logging toggle (in-app ring buffer, share as file). Default instance is set via the star in Manage instances only (removed from Settings overview). Settings split into Appearance, Behavior, and Troubleshooting; dashboard moved under Overview. Manage instances from Settings shows back navigation and a default-instance hint.
  • Decrypt errors — Failed decrypt shows a collapsible Details section for technical messages (no debug toggle).
  • About update status — Check-for-updates results use styled alert banners (success, info, error, and loading) with icons in the About dialog.
  • In-app changelog — About → View changelog shows the bundled CHANGELOG.md for the installed version; when an update is available, View changelog for … opens the matching section (or GitHub release notes as fallback) in a scrollable dialog.
  • Detail top spacing — Note and checklist detail screens now use a tighter top inset (4dp) so the title/header sits closer to the app bar while preserving a small visual gap.
  • Online checklist parity — The online-only checklists screen gains the search field and category filter chips already present in the offline-enabled screen.
  • Animated list ↔ detail — Opening and closing a note or checklist now slides between the list and detail (respecting Reduced motion).
  • Loading skeletons — List screens show shimmer placeholders while loading instead of a centered spinner.
  • Pull-to-refresh on empty/error — Empty and error states for notes and checklists can now be pulled to refresh.
  • Category filter persistence — The selected notes/checklists category filter survives app restarts.
  • Editing encrypted notes — Saving an edited encrypted note re-uses the passphrase from this session by default (same as when you unlocked it). Tap Change passphrase in the save dialog if you want a new one.

Added

  • Legacy encryption detection — After decrypting a note encrypted with the old Android payload order (tag then ciphertext), the app shows a warning that the note should be re-encrypted and saved to restore Jotty web compatibility.

Documentation

  • Agent guideAGENTS.md now requires updating CHANGELOG.md under [VERSION-dev] for user-visible changes; XChaCha20 format notes corrected (ciphertext then tag, legacy decrypt path).

Fixed

  • Web decrypt after Android save — Notes encrypted or re-encrypted in the app now use hex-encoded salt, nonce, and payload (matching the Jotty web app) instead of base64, so the web UI can decrypt them with the same passphrase.
  • Note content artifacts after save — Invisible Unicode (BOM / zero-width characters) embedded in web-authored HTML is stripped on decrypt and before re-encrypt so it no longer appears as odd symbols in the app or syncs back to the web. Font-family <span> tags from the web editor are unwrapped for in-app display instead of showing broken HTML like pan style=....
  • XChaCha20 encryption and Jotty web — Notes encrypted in the app now use AEAD combined order (ciphertext then tag), matching the Jotty web app. Previously, web showed “Incorrect password” for the correct passphrase; existing legacy-format notes still decrypt in the app and are flagged for re-encryption.
  • Encrypted notes missing from list — Notes returned by the API with sparse or null fields (common on some encrypted payloads) are normalized on fetch/sync so they appear in the notes list instead of being dropped.
  • Biometric settings when unavailable — Settings → Security hides auto-prompt, save-offer, and clear-all options when biometrics are not enrolled or not supported; only the status row is shown.
  • Empty checklists/notes after first setup — Initial sync no longer runs in a LaunchedEffect that could be cancelled when connectivity or settings update (showing “Job was cancelled” with an empty list). Sync is started from the offline ViewModel scope and re-runs while the local cache is empty and the device is online; overlapping sync requests are serialized instead of skipped; cancelled syncs are not recorded as user-visible errors; debounce is skipped while the local checklist cache is empty.
  • Note image rendering from HTML content — Notes containing HTML image tags now render images in-app: standalone <img> plus common wrapper patterns (<figure>, <picture>) are converted to Markdown image syntax before rendering, matching web-authored note content more reliably.
  • Colored note text from web HTML — Notes containing inline color spans (e.g. <span style="color: ...">) now preserve color in-app by converting them to a renderer-friendly HTML color format before markdown rendering.
  • Bottom-tab reselect in detail — While viewing a note or checklist, tapping the active bottom tab (Notes/Checklists) now closes detail and returns to the overview list, matching back-button behavior.
  • Edit decrypted notes — A decrypted note can now be edited; saving re-encrypts the body with a passphrase you confirm.
  • Checklist undo restores items — Undoing a checklist delete now restores the full item tree (including nested items and completion state), not just the title and type.
  • Duplicate note title removed — The note title no longer appears twice (it was rendered in both the app bar and the note view).
  • Offline category moves — Moving an offline note between categories now sends originalCategory on sync so the server moves it correctly.
  • Theme palette edge casessepia+dark and midnight+light now use matching variants instead of falling back to unrelated schemes.
  • Note open crash — Fixed Compose layout crashes when opening notes: list/detail no longer compose two scrollables at once; detail uses Scaffold(topBar) with a bounded body Box; online detail fills the list/detail pane; offline detail uses weight(fill = true); encrypted placeholder is centered in a Box; biometric auto-unlock waits briefly after navigation. Debug log export now includes uncaught crash stack traces.

Don't miss a new jotty-android release

NewReleases is sending notifications on new releases.