Parser doctor: - validateContent() with error/warning severity levels - Errors: invalid date, invalid priority, reminder without due, invalid reminder unit - Warnings: time without date, past date, multiple metadata, typo detection with correction suggestions - 21 new tests in ParserDoctorTest Tag inheritance: - extractTasks() accepts memoTags parameter - Tasks without #tags inherit memo-level tags Offline queue: - PendingSyncEntity + PendingSyncDao for queued edits - MemoRepository queues failed API calls, drains on next sync - Sync status banner: "synced N min ago" / "offline · N pending" UI: - Parser doctor banner in tasks tab with inline highlighting - Error/warning dots on task rows - Pivot headers with absolute positioning and measured widths - Logo in settings about section (Canvas-drawn circle variant) Other: - MIT license - Logo design spec (LOGO.md) - Concentric circle logo: pink circle, black+teal 47° annular wedge - .gitignore updated for dev artifacts 144 tests passing. Co-Authored-By: Claude Opus 4.6 (1M context) Signed-off-by: Avinal Kumar <avinal.xlvii@gmail.com>
5.3 KiB
MemosApp Logo Specification
Concept
The logo is inspired by the Google Foobar challenge logo, adapted into a circular form. A large pink circle carries a 47-degree angular notch on the right side, split into black (inside the circle) and teal (extending beyond).
Colors
| Element | Hex | Usage |
|---|---|---|
| Pink | #EE67A4 |
Main circle fill |
| Black | #231F20 |
Wedge section inside the circle |
| Teal | #35BEB8 |
Wedge section outside the circle |
| Background | #1F1F1F |
Launcher icon background |
Geometry (Circle Variant — Primary)
All measurements relative to a 108x108dp Android adaptive icon viewport, center at (54, 54).
Base Shape
- Pink circle: radius = 28, centered at (54, 54)
47-Degree Wedge
The wedge is an annular sector — it does NOT originate from the center. It spans between two imaginary concentric circles:
- Imaginary inner circle: radius = 20 (where the wedge starts)
- Imaginary outer circle: radius = 35 (where the wedge ends)
- Wedge angle: 47 degrees, centered on the horizontal-right axis (east)
- Half-angle: 23.5 degrees above and below the horizontal
Wedge Sections
-
Black section — the portion of the wedge that falls inside the pink circle
- Annular sector from r=20 to r=28
- Creates a dark notch visible against the pink fill
-
Teal section — the portion of the wedge that extends beyond the pink circle
- Annular sector from r=28 to r=35
- Creates a colored protrusion outside the main circle
Key Coordinates
Using center (54, 54), half-angle 23.5 degrees:
cos(23.5°) = 0.91706
sin(23.5°) = 0.39875
| Point | X | Y |
|---|---|---|
| Inner upper (r=20) | 72.34 | 46.02 |
| Inner lower (r=20) | 72.34 | 61.98 |
| Circle upper (r=28) | 79.68 | 42.84 |
| Circle lower (r=28) | 79.68 | 65.16 |
| Outer upper (r=35) | 86.10 | 40.04 |
| Outer lower (r=35) | 86.10 | 67.96 |
Construction Steps
- Draw a filled circle at (54, 54) with radius 28, color
#EE67A4 - Draw the black annular sector:
- Path from inner-upper → circle-upper → arc along r=28 to circle-lower → inner-lower → arc along r=20 back
- Draw the teal annular sector:
- Path from circle-upper → outer-upper → arc along r=35 to outer-lower → circle-lower → arc along r=28 back
Android Vector Drawable Paths
<!-- Pink circle -->
<path android:fillColor="#EE67A4"
android:pathData="M26,54 A28,28 0 1,1 82,54 A28,28 0 1,1 26,54 Z" />
<!-- Black annular sector (r=20 to r=28) -->
<path android:fillColor="#231F20"
android:pathData="M72.34,46.02 L79.68,42.84 A28,28 0 0,1 79.68,65.16
L72.34,61.98 A20,20 0 0,0 72.34,46.02 Z" />
<!-- Teal annular sector (r=28 to r=35) -->
<path android:fillColor="#35BEB8"
android:pathData="M79.68,42.84 L86.1,40.04 A35,35 0 0,1 86.1,67.96
L79.68,65.16 A28,28 0 0,0 79.68,42.84 Z" />
Geometry (Triangle Variant — Alternate)
Three concentric equilateral triangles pointing upward, with a 47-degree wedge cutting through the right edge.
Triangle Circumradii (200x200 SVG, center at 100,100)
| Ring | Outer R | Inner R | Fill |
|---|---|---|---|
| Outer ring | 80 | 65 | Pink |
| Middle ring | 55 | 40 | Pink |
| Inner triangle | 30 | — | Pink (solid) |
| Gap | 65→55 | — | Background |
| Gap | 40→30 | — | Background |
Wedge Intersections
The 47-degree wedge (centered on horizontal-right) intersects each triangle's right edge. The intersection points are computed by solving the parametric line-line intersection of the wedge rays with each triangle edge.
- Black section: wedge intersection with the middle ring (R=40 to R=55)
- Teal section: wedge intersection with the outer ring (R=65 to R=80)
- Inner triangle: stays fully pink
Adaptive Icon Layers
| File | Purpose |
|---|---|
ic_launcher_foreground.xml |
Colored logo (pink/black/teal) |
ic_launcher_background.xml |
Solid #1F1F1F background |
ic_launcher_monochrome.xml |
White silhouette for themed icons |
Safe Zone
Android adaptive icons use a 108dp canvas. The recommended safe zone is a 66dp diameter circle (radius 33 from center). All critical logo elements should fall within this zone.
- Pink circle (r=28): within safe zone
- Teal extension (r=35): at safe zone boundary, may be slightly clipped on some launchers — this is intentional as it creates a "bleeding edge" effect
Files
logo-circle.svg— Circle variant previewlogo-triangle.svg— Triangle variant previewandroidApp/src/main/res/drawable/ic_launcher_foreground.xml— Production circle logoandroidApp/src/main/res/drawable/ic_launcher_monochrome.xml— Themed icon silhouetteandroidApp/src/main/res/drawable/ic_launcher_background.xml— Dark background