Trey T
1cbeeafa2d
Integration: remove legacy WidgetTaskActionReceiver (replaced by CompleteTaskAction — P3 Stream M follow-up)
...
Stream M replaced the widget's task-complete path with CompleteTaskAction +
WidgetActionProcessor. Grepping confirmed the only references to
WidgetTaskActionReceiver were its own class file and the manifest entry.
Remove both.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-18 13:32:26 -05:00
Trey T
7d71408bcc
Fix: add WidgetDataRepository.isPendingCompletion predicate
...
Stream M's WidgetActionProcessorTest.kt references this predicate but
Stream J's initial repo only exposed mark/clear mutators. Trivial addition:
reads the pending-completion set and checks membership.
Unblocks :composeApp:testDebugUnitTest (now green across all streams).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-18 12:56:20 -05:00
Trey T
1fcb456ef1
P3 Stream K: Glance widgets (small/medium/large) matching iOS
...
- HoneyDueSmallWidget (2x2), HoneyDueMediumWidget (4x2),
HoneyDueLargeWidget (4x4) rewritten to consume the
iOS-parity WidgetDataRepository (Stream J).
- Free-tier shows a large count-only layout (matches iOS
FreeWidgetView); premium shows task list + complete buttons
(Large widget also renders the Overdue / 7 Days / 30 Days
stats row from WidgetDataRepository.computeStats()).
- WidgetFormatter mirrors iOS formatWidgetDate: "Today" /
"in N day(s)" / "N day(s) ago".
- WidgetColors maps priority levels (1-4) to primary/yellow/
accent/error, matching iOS OrganicTaskRowView.priorityColor.
- WidgetUi shared Glance composables (TaskRow, WidgetHeader,
EmptyState, TaskCountBlock, StatPill, StatsRow, CompleteButton)
wired to Stream M's CompleteTaskAction for interactive rows.
- JVM tests: WidgetFormatterTest + WidgetColorsTest covering
10 formatter assertions and 11 color mapping assertions.
Glance caveats: no radial/linear gradients or custom shapes, so
iOS's "organic" glows are dropped in favor of cream background +
tinted TaskRow cards. Colors, typography, and priority semantics
match iOS exactly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-18 12:55:08 -05:00
Trey T
dbff329384
P3 Stream L: widget refresh scheduler (WorkManager, iOS cadence)
...
WidgetRefreshSchedule: 30-min day / 120-min overnight (6am–11pm split).
WidgetRefreshWorker: CoroutineWorker fetches via APILayer -> repo -> widget.update.
WidgetUpdateManager: chained one-time enqueue pattern (WorkManager PeriodicWork
can't vary cadence).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-18 12:54:35 -05:00
Trey T
58b9371d0d
P3 Stream M: CompleteTaskAction (widget interactive completion)
...
Glance ActionCallback wires to WidgetActionProcessor: premium marks pending +
calls API + refreshes; free tier opens paywall deep link instead. Idempotent,
rollback-safe on API failure.
Also fixes a one-line compile error in WidgetTaskActionReceiver.kt where
updateAllWidgets() had been removed by Stream L — swapped for forceRefresh()
so the build stays green. The legacy receiver is now redundant (replaced by
CompleteTaskAction) but deletion is deferred to a Stream K follow-up so the
AndroidManifest entry can be removed in the same commit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-18 12:52:01 -05:00
Trey T
6d7b5ee990
P3 Stream J: widget data repository (DataStore-backed)
...
Ports iOS WidgetDataManager.swift semantics. DTO + JSON serialization +
pending-completion tracking + stats (overdueCount / dueWithin7 / dueWithin8To30).
Same-process DataStore is sufficient for Glance widgets.
Unblocks Streams K (widgets) / L (scheduler) / M (actions).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-18 12:40:48 -05:00
Trey t
d3b6b14e78
Fix build failures from rebrand: restore pbxproj exceptions, fix Kotlin casing, move missed source dirs
...
- Restore 6 missing PBXFileSystemSynchronizedBuildFileExceptionSet entries
and exceptions arrays on 5 root groups (lost during sed rename)
- Rename extension WidgetIconView.swift to avoid stringsdata collision
(original had different names: MyCribIconView vs CaseraIconView)
- Rename CaseraExtension.entitlements → HoneyDueExtension.entitlements
- Fix Kotlin object casing: honeyDueShareCodec → HoneyDueShareCodec,
honeyDuePackageType → HoneyDuePackageType
- Move missed Kotlin source dirs (jsMain, webMain, androidMain/com/casera)
to com/tt/honeyDue
- Rename remaining Casera widget files to HoneyDue
- Rename CaseraTests.swift → HoneyDueTests.swift
All 4 projects (Go API, iOS, Android, Web) now compile clean.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-07 06:58:56 -06:00
Trey t
1e2adf7660
Rebrand from Casera/MyCrib to honeyDue
...
Total rebrand across KMM project:
- Kotlin package: com.example.casera -> com.tt.honeyDue (dirs + declarations)
- Gradle: rootProject.name, namespace, applicationId
- Android: manifest, strings.xml (all languages), widget resources
- iOS: pbxproj bundle IDs, Info.plist, entitlements, xcconfig
- iOS directories: Casera/ -> HoneyDue/, CaseraTests/ -> HoneyDueTests/, etc.
- Swift source: all class/struct/enum renames
- Deep links: casera:// -> honeydue://, .casera -> .honeydue
- App icons replaced with honeyDue honeycomb icon
- Domains: casera.treytartt.com -> honeyDue.treytartt.com
- Bundle IDs: com.tt.casera -> com.tt.honeyDue
- Database table names preserved
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-07 06:33:57 -06:00