UI polish: toolbar redesign, clipboard, snap fix, startup state

Toolbar:
- Replace FilterChip with custom ToolButton (no ripple, instant response)
- Reorder tools: 0.38 0.5 Line Box Eraser Select
- DropdownMenus anchored to buttons via Box wrapper (drop below)
- Page indicator styled as OutlinedButton (visible affordance)
- Cut/Del/Copy/Paste operations (internal clipboard)

Line snap fix:
- Check pen position when timer fires instead of canceling on movement
- Handles EMR stylus micro-tremor correctly

EMR eraser button:
- TOOL_TYPE_ERASER events route to eraser handler regardless of active tool
- Physical eraser end of pen works as temporary eraser

App state:
- Startup navigates to last-visited notebook/page via SharedPreferences
- Closing notebook (X button) clears last notebook so app starts at list
- Updated app icon

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-24 16:15:58 -07:00
parent e81dd60f30
commit 408ba57051
9 changed files with 316 additions and 168 deletions

View File

@@ -4,7 +4,13 @@
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<!-- White background -->
<path
android:fillColor="#FFFFFF"
android:fillColor="#F5F5F5"
android:pathData="M0,0h108v108H0z" />
<!-- Subtle grid lines evoking graph paper / blueprint -->
<path
android:strokeColor="#E0E0E0"
android:strokeWidth="0.5"
android:pathData="M18,0 V108 M30,0 V108 M42,0 V108 M54,0 V108 M66,0 V108 M78,0 V108 M90,0 V108 M0,18 H108 M0,30 H108 M0,42 H108 M0,54 H108 M0,66 H108 M0,78 H108 M0,90 H108" />
</vector>

View File

@@ -4,8 +4,31 @@
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<!-- Simple pen icon -->
<!--
Architecture node graph: three connected nodes in a triangle.
All content within the 66dp adaptive-icon safe zone (2187).
Node centers: top (54,35), bottom-left (37,67), bottom-right (71,67).
-->
<!-- Edges (drawn first, behind nodes) -->
<path
android:fillColor="#000000"
android:pathData="M54,24 L62,72 L54,80 L46,72 Z" />
android:strokeColor="#2C2C2C"
android:strokeWidth="2"
android:strokeLineCap="round"
android:pathData="M54,35 L37,67 M54,35 L71,67 M37,67 L71,67" />
<!-- Top node -->
<path
android:fillColor="#2C2C2C"
android:pathData="M48,29 L60,29 Q63,29 63,32 L63,38 Q63,41 60,41 L48,41 Q45,41 45,38 L45,32 Q45,29 48,29 Z" />
<!-- Bottom-left node -->
<path
android:fillColor="#2C2C2C"
android:pathData="M31,61 L43,61 Q46,61 46,64 L46,70 Q46,73 43,73 L31,73 Q28,73 28,70 L28,64 Q28,61 31,61 Z" />
<!-- Bottom-right node -->
<path
android:fillColor="#2C2C2C"
android:pathData="M65,61 L77,61 Q80,61 80,64 L80,70 Q80,73 77,73 L65,73 Q62,73 62,70 L62,64 Q62,61 65,61 Z" />
</vector>