Skip to content

Nrobi144/feat/contact creation compose#29

Closed
nrobi144 wants to merge 29 commits into
GrapheneOS:16-qpr2from
nrobi144:nrobi144/feat/contact-creation-compose
Closed

Nrobi144/feat/contact creation compose#29
nrobi144 wants to merge 29 commits into
GrapheneOS:16-qpr2from
nrobi144:nrobi144/feat/contact-creation-compose

Conversation

@nrobi144
Copy link
Copy Markdown

No description provided.

muhomorr and others added 29 commits April 11, 2026 20:11
…acOS build

- Add .claude/CLAUDE.md with architecture conventions, SDD workflow, build commands
- Add 8 skills: sdd-workflow, android-build, compose-screen, compose-test,
  m3-expressive, viewmodel-pattern, hilt-module, delta-mapper
- Add brainstorm and implementation plan for contact creation Compose rewrite
- Update verification-metadata.xml with macOS aapt2 checksums
- Rename Bazel BUILD file conflicting with Gradle output dir (in submodule)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…il + save

SDD: tests written first (39 unit tests), then implementation.

- Add ContactCreationActivity with ACTION_INSERT, singleTop launch mode
- Add ContactCreationEditorScreen (Scaffold + LargeTopAppBar + LazyColumn)
- Add ContactCreationViewModel with SavedStateHandle, sealed Actions/Effects
- Add ContactFieldsDelegate with PersistentList internals
- Add RawContactDeltaMapper (name, phone, email → RawContactDeltaList)
- Add NameSection, PhoneSection, EmailSection composables
- Add AccountChip with bottom sheet picker
- Add FieldType sealed classes (PhoneType, EmailType)
- Add TestTags, intent sanitization, save callback via onNewIntent
- Add Coil, hilt-navigation-compose, kotlinx-collections-immutable deps
- 39 unit tests: mapper (12), delegate (11), viewmodel (16)
- 7 androidTest files for UI verification

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SDD: tests expanded first (102 unit tests), then implementation.

- Add AddressSection (multi-column: street, city, region, postcode, country)
- Add OrganizationSection (company + title)
- Add MoreFieldsSection with AnimatedVisibility expand/collapse
  (events, relations, IM, websites, note, nickname, SIP)
- Add GroupSection with account-scoped checkbox list
- IM correctly uses PROTOCOL + CUSTOM_PROTOCOL (not TYPE + LABEL)
- Address blank check spans all 5 sub-fields
- Groups cleared on account change
- Account-specific SIP field filtering
- Mapper expanded: all 13 MIME types → RawContactDeltaList
- Delegate expanded: full CRUD for all field types
- 40 mapper tests, 46 delegate tests, 16 VM tests
- 7 new androidTest files for sections

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SDD: mapper + VM tests expanded first (107 unit tests), then implementation.

- Add PhotoSection with tappable avatar, dropdown menu (gallery/camera/remove)
- Coil AsyncImage for off-thread photo display with downsampling
- PickVisualMedia for gallery, ACTION_IMAGE_CAPTURE for camera
- Photo URI passed to save service via EXTRA_UPDATED_PHOTOS bundle
- Temp files in getCacheDir()/contact_photos/ subdirectory
- Temp file cleanup in ViewModel.onCleared()
- FileProvider scoped to contact_photos/ path only
- 42 mapper tests, 19 VM tests, 8 photo section androidTests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…e back

SDD: VM + screen tests expanded first, then implementation.

- Add spring animations: GentleBounce/SmoothExit on animateItem()
- Add reduce-motion guard (isReduceMotionEnabled -> skip springs)
- Add shape morphing on photo avatar press
- Add PredictiveBackHandler for Android 14+
- Add discard dialog (state-driven AlertDialog)
- Add Material Icons per field type (Person, Phone, Email, Place, etc.)
- Add M3 typography roles throughout (headlineMedium, bodyLarge, etc.)
- Add AnimatedVisibility spring specs on MoreFieldsSection
- Zero-account local-only contact support
- PII-safe error handling (generic messages only)
- 5 new VM tests, 5 new screen androidTests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Coverage audit: added 38 tests to fill gaps identified during review.

Mapper (+26):
- Whitespace-only fields treated as blank (11 field types)
- Multiple entries for repeatables (emails, events, relations, IMs, websites)
- Non-custom type does NOT set LABEL column
- Temp ID is negative
- Mixed blank/populated repeatables (only populated saved)

ViewModel (+12):
- Full process death round-trip (all 13+ fields serialize/restore)
- Extended field actions (address, event, note, nickname, SIP, etc.)
- SelectAccount clears groups
- ToggleMoreFields
- hasPendingChanges edge cases

Total: 68 mapper, 46 delegate, 35 VM, 71 androidTest = 220 tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@nrobi144
Copy link
Copy Markdown
Author

nrobi144 commented Apr 14, 2026

accidental only, not ready yet

@nrobi144 nrobi144 closed this Apr 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants