Repository navigation
Release 1.1.48 (versionCode 51) - #136
Merged
Merged
Conversation
uNyanda (Discord, 2026-10-27) saw every daily, weekly and monthly note twice in the drawer, and deleting one copy took the other with it. The drawer's top group has Daily, Weekly and Monthly Notes rows that open those folders, and the Notes list below lists every folder core's getBrowseDirectory hands it, those three included, marked only by a calendar icon. One folder, two rows. The layout fix for #17 (a2d584a) dealt with a real second folder on disk and never touched this. The Notes list now leaves out the folders those rows open, which is how the desktop sidebar has drawn them since 2.4.0 (periodic notes in Quick Access, their folders pruned from the tree). A folder holding nothing but periodic folders (Journal around Journal/Daily) goes too, so the list never offers a folder that opens onto nothing; one holding a note, a file, a database or a folder of its own keeps its row. A hidden folder reached through a note's breadcrumb shows everything in it, or it would read "No notes here yet". Nothing moves on disk, a note in a periodic folder that is not periodic is still one tap away through its row, and turning a kind off brings its folder back to the list. Tests: drawer-folders.test.ts (8 cases). typecheck, boundaries:check and 340 tests pass. On an API 36 emulator the Notes list went from Daily Notes, Monthly Notes, Projects, Weekly Notes to Projects alone, the Daily row still opens its folder (a non-date note included), and turning weekly notes off lists Weekly Notes again. The iPhone build shows the same, plus the nested Journal/Daily case and its breadcrumb.
openAssetExternally was notImplemented in this shell, so a tap on an attachment chip (a .zip, a .tldraw) ended in an error toast. It matters more now: the WebView has no PDF viewer, so a PDF embed or the reference pane drew an empty page (Dave, Discord, 2026-10-27), and core now hands a PDF to openAssetExternally wherever navigator.pdfViewerEnabled is false (ZenNotes/zennotes fix/pdf-embed-phones). - OpenFilePlugin.java sends a VIEW intent to the app the user keeps for the type. A file:// path (the app's vault folder, or a copy staged out of a remote vault) goes out through the FileProvider; a content:// document under a picked folder goes out as it is, with this app's read grant passed along. The type comes from the provider, then from the extension. With no app for the type it rejects NO_APP, and core shows "No app on this phone opens this kind of file." - open-asset.ts resolves the vault-relative path, refuses one that climbs out, says when the file is missing, and stages a remote vault's asset in a fresh cache folder per open, as the iPhone shell does. - file_paths.xml adds files-path for a phone whose vaults live in internal storage (vaultsRoot falls back to Directory.Data). - NativeFs.fileUri is public. Tests: open-asset.test.ts (on-device file, missing file, a path outside the vault, no app, remote staging). On an API 37 emulator (WebView 145) with that core, a tap on Dave's PDF card opened Drive's PDF viewer on both pages, and Back came back to the note. The PDF card needs the core from fix/pdf-embed-phones; attachment chips work with core 2.77.0. The new plugin needs a native rebuild.
… the note
The reference pane (a pinned note or PDF) is a full-screen sheet on
phones like the other right panels, but it lives outside EditorPane and
never hears zen:close-right-panel. Done and system Back sent that event
and the sheet stayed (instrumented on the emulator: both fired, the pane
stayed). Its header got the injected back chevron, which went Home; the
pin stays with the note, so reopening the note brought the sheet back.
Only the x, which unpins, got out (Dave, Discord, 2026-10-27).
closeRightPanel() hides the reference pane when it is showing, through
core's Hide Reference Pane (ref.toggle, the pane's own square button),
which keeps the pin; otherwise it sends the event as before. Done, system
Back and the reference sheet's chevron ("Back to the note") use it. The
reference pane renders after the editor panes, so it is the one on top.
ref.toggle sees a pin made for one note only with the core from
ZenNotes/zennotes fix/pdf-embed-phones; with core 2.77.0, Done over a
PDF pinned from its card still does nothing.
Checked on the emulator with that core, after pinning Dave's PDF on the
1.1.47 build and installing over it: Done, the chevron and system Back
each closed the sheet onto the note, and reopening the note left it
closed. typecheck and 337 tests pass.
…ck on the Home Screen Dave (Discord, 2026-10-27) asked for the Calendar sheet on his Home Screen, given the whole screen if need be, with the task list scrollable underneath. This is that widget: the month with its writing dots, open-task marks, week numbers and today ring on top, the selected day's week below with a box to tick on every task. It is resizable to the whole screen, the list scrolls, and narrow or short sizes drop the week column or the grid. As in the app on a touch screen, a tap selects a day and shows its week, and a tap on the selected day opens its note. The arrows page months; the month label goes back to today's. Day and Week open or offer the note through the Calendar. A widget cannot hold a text field, so "Add a task for ..." opens the Calendar on that day with the cursor in its field and the keyboard up. A task's text opens it on its line. A tick works with the app closed. The widget logs it (WidgetActions), draws it ticked at once, and writes it into the note itself when the task's line is still exactly the one the snapshot named: core sent the line both ways, so TaskLineWriter swaps one string for the other and parses nothing. It keeps CRLF and a BOM, overwrites in place as the vault does, walks a picked folder by name, and leaves a note that is not UTF-8 alone. Anything else waits in the log. The app applies the log on launch and on every return to the foreground through core's setTaskChecked, in order, retrying what cannot land yet. The next snapshot's actionsAck tells the widget which taps it may forget, so a snapshot built before the app saw a tap never undoes it on screen. From Android 12 the box is a real CheckBox, and the week list goes out in the same update as RemoteCollectionItems: notifyAppWidgetViewDataChanged after the update re-sent stale views and dead tap targets. Before 12 a box image ticks and a RemoteViewsService feeds the list. Each day shows at most 12 tasks plus "+N more", keeping one update within the transaction limit. The taps receiver is not exported, and a midnight alarm moves the today ring. The shared JS (same as the iPhone shell's): widget-calendar.ts is the tap-log contract; widgets.ts publishes the calendar block and applies the log; widget-links.ts adds zennotes://calendar, day and week, which deep-links.ts runs through calendar-request.ts and MobileShell's sheet. Needs core with getCalendarWidgetData and setTaskChecked (ZenNotes/zennotes 3fc40107). It was built and checked on a rehearsal core adopted from that tree, whose vendor files are not part of this commit; adopt the published core before release. On a throwaway API 37 emulator (WebView 145): - The widget was placed from the picker and the grid, marks and agenda match the sheet. - With the app killed, a tick wrote "- [x]" into the note, also in a CRLF note and for a "[/]" task; an untick restored the line. - A task whose line moved on disk waited and was applied when the app opened. - Day select, month paging, and the Day, task and Add links work; text typed after the Add link landed in the day's note. typecheck and 337 tests pass.
…Back close the reference sheet
… month and the week's tasks to tick
…ne's viewer and note covers Core core-2.78.0-core.h0bc32cbd73a78fac, built by CI from ZenNotes/zennotes 52ab86fd (the v2.78.0 release commit); core:adopt checked SHA-256, SHA-512, packed versions and clean-source provenance. Core 2.78.0 supplies what this shell's Calendar widget draws and takes its ticks back (getCalendarWidgetData, setTaskChecked; the shell half arrived with feat/calendar-widget), opens a PDF in the phone's own viewer where the WebView has none and lets Done and Back close a PDF pinned as a reference (the shell half arrived with fix/pdf-embed), and keeps the PDF card's name clear of Preview at phone width. Notes show their covers, Mermaid labels typeset $$ math and stay readable on any fill (Pele 1.12.0), ticking a task in a note saved with Windows line endings ticks the right one, and the Themes picker no longer previews a theme nobody chose. No new bridge method; the bridge contract adds the portable key noteCoverPlacement. Desktop vault.ts is unchanged since 2.77.0.
adibhanna
marked this pull request as ready for review
October 27, 2026 21:09
CI failed on release/1.1.48 at lintDebug: "Found byte-order-mark in the middle of a file [ByteOrderMark]", TaskLineWriter.java lines 68 and 69. The writer keeps a note's leading BOM when it swaps a ticked line, and both string literals held the raw U+FEFF character. They now read "", which Java turns into the same character, so the compiled class is unchanged; only the source the lint check reads differs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ZenNotes for Android 1.1.48 (versionCode 51), on core 2.78.0.
feat/calendar-widget,e1d17d5): the month with writing dots, open-task marks, week numbers and the today ring, and the selected day's week below with a box to tick on every task; resizable to the whole screen, the list scrolls. A tick works with the app closed: the widget writes the line core named into the note when it is still exactly that line, and anything else waits in a log the app applies through core'ssetTaskChecked.fix/pdf-embed,bdaec85+12dadd8): Android's WebView has no PDF viewer, so a PDF now goes to the app you keep for PDFs through the newopenAssetExternally, and Done and Back close the reference sheet and leave you on the note.fix/drawer-periodic-twice,b959dda).febe775,core-2.78.0-core.h0bc32cbd73a78facfrom ZenNotes/zennotes52ab86fd): note covers,$$math in Mermaid labels and Pele 1.12.0, the PDF and reference fixes, ticking tasks in CRLF notes, the Themes picker fix. No new bridge method; the contract adds the portable keynoteCoverPlacement.dcf8427): 1.1.48, versionCode 51.Validation:
boundaries:check, typecheck, 350 tests,npm run buildandnpm run syncon the adopted core. The widget and the PDF fix were each walked on an Android emulator when built.