Repository navigation
Obinot v2.1
Obinot v2.1 — Changelog
Version: 2.1.0 (versionCode 3)
For Everyone
✨ Highlights
- Chat with AI about any note. Long-press the three-dot menu in the reader and a bottom sheet opens with a full conversation. Ask follow-ups, request rewrites, dig deeper — the chat is saved with the note and travels in your backups.
- Edit AI summaries as raw Markdown. New "Edit Summary" action in the reader: toggle between raw Markdown and a live preview rendered with the same engine that displays your notes. The original processing metadata (language / task / format) is preserved on save.
- Faster, smaller math rendering. KaTeX (WebView + ~1 MB of CSS/JS/fonts) is replaced by RaTeX, a native LaTeX renderer. Formulas paint immediately on the same line as your text, no first-WebView jank, no asset bloat.
🆕 New Features
- AI chat persistence. Conversations are stored on each note (
chatHistoryfield) and survive app restarts. A "Clear chat" button in the sheet header wipes it with a confirmation dialog. - Long-press the three-dot menu → jump straight into chat. One-time tooltip the first time you open the reader explains the gesture.
- Markdown summary editor (
SummaryEditorSheet) — plain-text editor on one side, liveMarkdownTextpreview on the other. - Wavy audio progress bar in the reader — replaces the flat slider with a Material 3 Expressive wave that animates during playback.
- License split. The original Binot codebase stays MIT; everything added by the fork (including the new chat, summary editor, and RaTeX integration) is now Apache 2.0 under
LICENSE-OBINOT. The README explains which parts fall under which license, with credits for RaTeX, Mermaid, and the AndroidX/Kotlin stack.
🐛 Bug Fixes
- Math no longer blocks the entrance animation. With KaTeX gone, the first-paint jank when opening a note with formulas is gone too — formulas render at native speed.
- "Share .binot" always reports what happened. The snackbar now fires whether the file was saved to Documents or only available via the share sheet. Previously, the snackbar only appeared when saving failed.
- Shared-element transition on the reader works again. The
sharedBoundsmodifier was on the wrong composable; moved to the content area so the History → Result handoff animates from the card's bounds. - Audio waveform amplitude was passing Dp where the API expects a number.
wavelengthandamplitudeare now using the right units for the wavy slider. - Chat was reading from a StateFlow on Dispatchers.IO. Replaced with a synchronous snapshot before leaving the main thread.
MediaStore.Downloads.EXTERNAL_CONTENT_URIrejected on some OEMs. Switched toMediaStore.Files.getContentUri("external")for the Documents save flow.
For Developers
- DB v10 with
MIGRATION_9_10addingnotes.chatHistory(TEXT, nullable) for serialized[{role, content}, ...]JSON. Not indexed. Not included in single-note.binotexports (they use an explicitdata.json); is included in.obinotbakbackups because Moshi serializesNoteEntitywhole. NoteEntitygainedchatHistory: String?..binotexport still excludes it; backup format picks it up automatically.io.ratex.RaTeXViewreplacesandroid.webkit.WebView-basedKaTeXWebViewandKaTeXInlineWebView. Block + inline math both use the same native view (displayMode = true/false).- Removed:
androidx.webkit:webkit:1.11.0dependency,assets/katex/directory (CSS, JS, all.ttf/.woff/.woff2fonts). Net APK reduction: ~1 MB. - Removed:
exportNoteToMarkdown()andexportMarkdownFile()— Markdown export is no longer wired up in the UI. - Removed: "AI Explain" selection menu (the 2.0 feature). Chat replaces it as the single conversational entry point.
ResultViewModelgainedchatMessages,isChatSending,chatTooltipShown, plussendChatMessage(...),clearChat(),loadChatHistory().ChatMessage(role, content)is a new public type.ImportExportHelper.shareBinotToDocumentsnow surfaces a boolean back to the screen, which switches the snackbar between "Saved to Documents and ready to share" and "Ready to share (couldn't save to Documents)".MediaStore.Filesis used in place ofMediaStore.Downloadsfor broader OEM compatibility. ComprehensiveLogcalls added on every failure path.MermaidAssetCacheis now three-tier: memory → disk (filesDir/mermaid_cached.js) → APK assets. First read decompresses and writes to disk; subsequent app launches skip the APK decompression, ~5× faster on low-end devices.NoteDao.getNotesWithLabelSync(label)—SELECT * WHERE isTrashed = 0 AND label LIKE '%' || :label || '%' AND title != '[[BINOT_SYSTEM_LABELS]]'. Used by label rename/delete to avoid loading the full notes table.- ProGuard rules trimmed for the KaTeX removal (no more
InlineTextContent/AndroidView/ViewFactoryHolder/WebViewkeep-rules); added-keep class io.github.erweixin.ratex.**for JNI calls. ai_chat_tooltip_shownpreference in DataStore, set after the first-time tooltip is dismissed.- CI: removed the "Inspect RaTeX AAR packages" diagnostic step from both
build-dev.ymlandrelease.ymlonce the real package name (io.ratex) was confirmed. LICENSE-OBINOTadded with the Apache 2.0 text and aNOTICEsection preserving the original Binot attribution.- Version:
2.1.0/3.