How ethran/notable works
Notable is an Android handwriting notebook app, aimed especially at Onyx BOOX devices. Users organize notebooks and folders, open pages, write or edit on a scrollable canvas, then import or export documents; an additional sync subsystem coordinates notebook data with WebDAV. The tree and README establish these product capabilities, while sampled source confirms key responsibilities in page caching, canvas refresh, import/export, and sync. Some UI-to-service wiring is not shown in the excerpts, so uncertain links are omitted.
Main entry points: AppRepository.kt App repository · EditorView.kt Editor view · ExportEngine.kt Export engine · DrawCanvas.kt Canvas input
Components 23
App and library
- App entry
app/src/main/java/com/ethran/notable/MainActivity.kt - Notebook library
app/src/main/java/com/ethran/notable/ui/views/HomeView.kt - Library state
app/src/main/java/com/ethran/notable/ui/viewmodels/LibraryViewModel.kt
Writing and editing
- Editor view
app/src/main/java/com/ethran/notable/editor/EditorView.kt - Editor state
app/src/main/java/com/ethran/notable/editor/EditorViewModel.kt - Gesture handling
app/src/main/java/com/ethran/notable/gestures/EditorGestureReceiver.kt - Canvas input
app/src/main/java/com/ethran/notable/editor/canvas/DrawCanvas.kt - Canvas refresh
app/src/main/java/com/ethran/notable/editor/canvas/CanvasRefreshManager.kt - Stroke rendering
app/src/main/java/com/ethran/notable/editor/drawing/StrokeRenderer.kt - Image handling
app/src/main/java/com/ethran/notable/editor/utils/ImageHandler.kt
Notebook data
- Page cache
app/src/main/java/com/ethran/notable/data/PageDataManager.kt - App repository
app/src/main/java/com/ethran/notable/data/AppRepository.kt - Notebook database
app/src/main/java/com/ethran/notable/data/db/Db.kt - App settings
app/src/main/java/com/ethran/notable/data/datastore/AppSettings.kt
Import and export
- Import engine
app/src/main/java/com/ethran/notable/io/ImportEngine.kt - Export engine
app/src/main/java/com/ethran/notable/io/ExportEngine.kt - Page renderer
app/src/main/java/com/ethran/notable/io/PageContentRenderer.kt
Synchronization
- Sync orchestration
app/src/main/java/com/ethran/notable/sync/SyncOrchestrator.kt - Notebook reconciliation
app/src/main/java/com/ethran/notable/sync/NotebookReconciliationService.kt - Notebook transfer
app/src/main/java/com/ethran/notable/sync/NotebookSyncService.kt
Other components
- User
- Selected files
- WebDAV server
Connections 24
- User → App entry: opens
- App entry → Notebook library: shows
- Notebook library → Library state: requests library
- User → Editor view: edits pages
- Editor view → Editor state: uses state
- Editor view → Gesture handling: receives gestures
- Editor view → Canvas input: hosts input
- Canvas input → Stroke rendering: renders strokes
- Canvas input → Canvas refresh: refreshes surface
- Image handling → Canvas input: draws image
- Page cache → App repository: loads and saves
- App repository → Notebook database: reads and writes
- User → Import engine: imports
- Selected files → Import engine: provides URI
- Import engine → App repository: creates notebook data
- User → Export engine: exports
- Export engine → Page renderer: renders pages
- Export engine → App repository: reads notebook data
- Export engine → Selected files: writes output
- User → Sync orchestration: requests sync
- Sync orchestration → Notebook reconciliation: reconciles notebooks
- Notebook reconciliation → Notebook transfer: uploads or downloads
- Notebook transfer → WebDAV server: transfers files
- Sync orchestration → App repository: uses local data