Commit Graph
10262 Commits
Author SHA1 Message Date
Vitor Pamplona 8097ca52c6 refactor: complete TextFieldState migration — remove all dual TextFieldValue properties
Remove the old `var message by mutableStateOf(TextFieldValue(""))` properties from all ViewModels, making TextFieldState the single source of truth.

https://claude.ai/code/session_01VminH5nD1jbzncbgTaqXEK
2026-03-28 13:19:48 -04:00
Vitor Pamplona 68c3360c0f refactor: complete TextFieldState migration — remove all dual TextFieldValue properties
Remove the old `var message by mutableStateOf(TextFieldValue(""))` properties from all ViewModels, making TextFieldState the single source of truth.

https://claude.ai/code/session_01VminH5nD1jbzncbgTaqXEK
2026-03-28 13:16:55 -04:00
Vitor Pamplona 1f496bf101 refactor: complete TextFieldState migration — remove all dual TextFieldValue properties
Remove the old `var message by mutableStateOf(TextFieldValue(""))` properties
from all ViewModels, making `TextFieldState` the single source of truth.

Key changes:
- Add TextFieldState extension functions (updateText, insertUrlAtCursor,
  replaceCurrentWord, currentWord) to TextFieldValueExtensions.kt
- Update PreviewState to accept String instead of TextFieldValue
- Add TextFieldState overload to UserSuggestionState.replaceCurrentWord
- Remove forwardZapToEditting and updateZapForwardTo from IZapField interface
- Migrate all 8 ViewModels: EditPostViewModel, ShortNotePostViewModel,
  ChatNewMessageViewModel, NewPublicMessageViewModel, CommentPostViewModel,
  LongFormPostViewModel, NewProductViewModel, ChannelNewMessageViewModel
- Update all Screen composables that referenced removed properties

https://claude.ai/code/session_01VminH5nD1jbzncbgTaqXEK
2026-03-28 13:15:37 -04:00
davotoulaandClaude 09b3d3be8a 1. Merged main — Picked up missing vanish string resources
2. ShortNotePostViewModel.kt — Added messageState/forwardZapToEdittingState fields and removed stale override keywords to match updated IMessageField/IZapField interfaces
3. ChatNewMessageViewModel.kt — Same pattern: added messageState, forwardZapToEdittingState, toUsersState, subjectState fields and removed stale override keywords
2026-03-28 16:30:30 +00:00
Vitor PamplonaandClaude 77a0a00a1a refactor: TextFieldState migration
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:30 +00:00
Vitor PamplonaandClaude 9042075fe3 refactor: TextFieldState migration
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:30 +00:00
Vitor PamplonaandClaude b047769cf3 refactor: TextFieldState migration
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:30 +00:00
Vitor PamplonaandClaude 4299d02abf refactor: TextFieldState migration
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:30 +00:00
Vitor PamplonaandClaude daa4b1cf3b refactor: TextFieldState migration
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:29 +00:00
Vitor PamplonaandClaude ba8934b0e8 refactor: TextFieldState migration
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:07 +00:00
Vitor PamplonaandClaude 6ec46daa31 refactor(wip): add TextFieldState to ViewModels and update call sites
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:07 +00:00
Vitor PamplonaandClaude 6b77d2dd49 refactor(wip): add TextFieldState to ViewModels and update call sites
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude 2b4805ca14 refactor(wip): add TextFieldState to ViewModels and update call sites
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude f00f64fd18 refactor(wip): add TextFieldState to ViewModels and update call sites
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude 44b4c6a789 refactor(wip): add TextFieldState to ViewModels and update call sites
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude eefb76ba77 refactor(wip): add TextFieldState to ViewModels and update call sites
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude e72bbdb59d refactor(wip): add TextFieldState to ViewModels and update call sites
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude 92d67f670a fix: restore SellProduct.kt with correct TextFieldState migration
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude 1a9bcbf3f8 fix: restore PrivateMessageEditFieldRow.kt with correct TextFieldState migration
https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude 62e8b35c1c refactor(wip): migrate ViewModels and call sites to TextFieldState
- Add messageState (TextFieldState) to all IMessageField implementations
- Add TextFieldState properties: toUsersState, subjectState, titleState,
  priceState, locationTextState to respective ViewModels
- Update all ThinPaddingTextField call sites: value→state,
  visualTransformation→outputTransformation, singleLine→lineLimits
- Add forwardZapToEdittingState to IZapField
- Add messageState to EditPostViewModel and ChannelNewMessageViewModel

https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude 1878d9fd13 refactor(wip): add TextFieldState to ViewModels and call sites
Part of the BasicTextField migration. Adding TextFieldState properties
alongside existing TextFieldValue for backward compatibility.

https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:06 +00:00
Vitor PamplonaandClaude 019d53b77e refactor(wip): migrate ViewModels and call sites to TextFieldState
- Add messageState (TextFieldState) to all IMessageField implementations
- Update ThinPaddingTextField call sites: value→state,
  visualTransformation→outputTransformation, singleLine→lineLimits
- Add TextFieldState properties for toUsers, subject, title, price,
  locationText in respective ViewModels

WIP: remaining files to be pushed in follow-up commits

https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:05 +00:00
Vitor PamplonaandClaude 6554ef78be refactor(wip): migrate ThinPaddingTextField to new BasicTextField(TextFieldState)
Migrate from the old BasicTextField (TextFieldValue/onValueChange) to the new
BasicTextField (TextFieldState) which properly sets EditorInfo.contentMimeTypes
when contentReceiver modifier is present, enabling GIF keyboard support.

Core changes:
- ThinPaddingTextField: uses new BasicTextField with TextFieldState,
  OutputTransformation, TextFieldDecorator, TextFieldLineLimits
- UrlUserTagTransformation: converted from VisualTransformation to
  OutputTransformation using TextFieldBuffer.addStyle/replace
- IMessageField: simplified to val messageState: TextFieldState
- MessageField: uses contentReceiver + new ThinPaddingTextField
- RichContentTextField: deleted (no longer needed)
- ViewModels: added messageState (TextFieldState) to IMessageField impls

WIP: call sites still need updating to new ThinPaddingTextField API

https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:05 +00:00
Vitor PamplonaandClaude 6945f8a934 fix: use AndroidView with EditorInfo for GIF keyboard support
The Compose contentReceiver modifier doesn't set EditorInfo.contentMimeTypes
on the old BasicTextField, so Android keyboards never enable the GIF button.

Replace with an AndroidView wrapping EditText that uses
ViewCompat.setOnReceiveContentListener() to properly declare supported
MIME types to the IME, enabling the GIF/sticker button on keyboards
like Gboard.

https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:05 +00:00
Claude 7caabd9ea2 feat: add GIF keyboard support to short new post screen
Add contentReceiver modifier to MessageField to receive images/GIFs
directly from Android's keyboard. When a GIF is selected from the
keyboard, its URI is passed to the post ViewModel's selectImage flow
for upload handling.

https://claude.ai/code/session_014FZPV258VfdeE1mcyeU7wU
2026-03-28 16:30:05 +00:00
Vitor PamplonaandGitHub 0054c01921 Merge pull request #1984 from vitorpamplona/claude/parallelize-db-tests-I6D3g
Refactor forEachDB to use coroutines with parallel execution
2026-03-28 12:22:02 -04:00
Claude d299b65c8a feat: make forEachDB action suspending, remove redundant runBlocking
Change the action lambda to `suspend (EventStore) -> Unit` so callers
can use suspend functions directly. Remove the now-unnecessary
runBlocking wrapper around delay() in ExpirationTest.

https://claude.ai/code/session_01TQRzVTAXBVWRGstcsapA5F
2026-03-28 16:15:23 +00:00
Claude 0889473c15 feat: parallelize BaseDBTest forEachDB using coroutines
Each EventStore uses an independent in-memory SQLite database, so tests
can safely run concurrently. This launches all 16 DB configurations in
parallel via coroutines on Dispatchers.Default instead of running them
sequentially.

https://claude.ai/code/session_01TQRzVTAXBVWRGstcsapA5F
2026-03-28 16:12:44 +00:00
Vitor PamplonaandGitHub 009326ae0b Merge pull request #1982 from davotoula/fix-for-githooks-in-git-worktree
Handle git worktree where .git is a file, not a directory
2026-03-28 12:08:28 -04:00
davotoula 60686d0fef fix: resolves the .git file in worktrees by reading the gitdir: pointer and using the actual git directory for hooks installation 2026-03-28 16:59:01 +01:00
Vitor Pamplona 4c5606cd8d Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  feat: complete NIP-85 Trusted Assertions implementation in quartz
2026-03-28 11:51:50 -04:00
Vitor Pamplona dd2ec3f05f moves the initialization of the Secp lib to the setup of the test to make sure it doesn't affect the expiration timing tests. 2026-03-28 11:50:43 -04:00
Vitor Pamplona b147e6d4c3 Fixes missing actual 2026-03-28 11:39:25 -04:00
Vitor Pamplona 2745b29bf7 removing some warnings 2026-03-28 11:39:15 -04:00
Vitor PamplonaandGitHub be62ca5374 Merge pull request #1981 from vitorpamplona/claude/implement-nip-85-hBlbp
Add NIP-85 trusted assertions support for events and addressables
2026-03-28 11:36:29 -04:00
Vitor PamplonaandGitHub b51efb5caf Merge branch 'main' into claude/implement-nip-85-hBlbp 2026-03-28 11:35:19 -04:00
Vitor Pamplona 5776e74bb5 Fixing some warnings 2026-03-28 11:33:03 -04:00
Vitor Pamplona eaa45aee05 Fixes constructor issue in this BigDecimal Implementation 2026-03-28 11:31:14 -04:00
Vitor PamplonaandGitHub c11e41529e Merge pull request #1980 from davotoula/toast-for-downloads
Show toast instead of dialog on media download success
2026-03-28 10:36:06 -04:00
davotoula cbf9b31a3f feat: show toast instead of dialog on media download success
Replace the interruptive AlertDialog with a brief Android Toast when
media downloads complete. Errors still show the full dialog for visibility.
2026-03-28 15:04:27 +01:00
Claude d40dccde11 feat: complete NIP-85 Trusted Assertions implementation in quartz
Add full compliance with NIP-85 by implementing all four assertion event
kinds and their associated tag types in the nip85TrustedAssertions package:

- Kind 30382 (User Assertions): Add all 15 missing tag parsers and
  builders (first_created_at, post_cnt, reply_cnt, reactions_cnt, all
  zap/report/topic/active_hours tags) to ContactCardEvent
- Kind 30383 (Event Assertions): New EventAssertionEvent with rank,
  comment_cnt, quote_cnt, repost_cnt, reaction_cnt, zap_cnt, zap_amount
- Kind 30384 (Addressable Event Assertions): New
  AddressableAssertionEvent with same tags as 30383
- Kind 30385 (External ID Assertions): New ExternalIdAssertionEvent
  with rank, comment_cnt, reaction_cnt
- Add ProviderTypes for all new assertion kinds (30383/30384/30385)
- Register all new event kinds in EventFactory
- Add comprehensive tests for all assertion event types

https://claude.ai/code/session_01XZQsSnkHJ6tFiPS7fRLzPJ
2026-03-28 13:59:12 +00:00
Vitor PamplonaandGitHub e3c6c35688 Merge pull request #1973 from vitorpamplona/claude/review-quartz-multiplatform-00Oi0
feat: add linuxX64 KMP target and restructure native source sets
2026-03-28 09:54:11 -04:00
Vitor PamplonaandGitHub 05e7b305a7 Merge pull request #1977 from vitorpamplona/claude/polls-feed-screen-DQ78j
Add Polls feed screen with filtering and discovery support
2026-03-28 09:53:50 -04:00
Vitor PamplonaandGitHub 3b15242a02 Merge pull request #1978 from vitorpamplona/claude/nip-a4-compliance-mftpU
Add NIP-A4 support: k tag in zap requests and e tag filtering
2026-03-28 09:53:15 -04:00
Claude 5db9330306 fix: update test packages after nipA4PublicMessages rename
Move test files from experimental.publicMessages to nipA4PublicMessages
to match the package rename on main.

https://claude.ai/code/session_019JsSsTTXivnNWiAtE5DE1R
2026-03-28 13:52:02 +00:00
Claude 559ad40223 feat: add Polls feed screen with Global/Follows filter
Add a dedicated Polls-only feed screen (NIP-88 kind 1068, non-zap polls)
accessible from the left navigation drawer. The screen includes the
standard top nav filter bar for Global/Follows/etc filtering, reusing
the Discovery follow list settings.

New files:
- PollsFeedFilter: filters LocalCache for PollEvent only
- PollsFilterAssembler + PollsSubAssembler: relay subscriptions
- PollsScreen: main screen with pull-to-refresh feed
- PollsTopBar: top bar with Global/Follows filter spinner
- Relay filter subassemblies for authors, follows, global, hashtag

Wiring:
- Route.Polls added to navigation
- Polls entry in left drawer with ic_poll icon
- pollsFeed added to AccountFeedContentStates
- PollsFilterAssembler added to RelaySubscriptionsCoordinator

https://claude.ai/code/session_013JWrsYpQczmZtpW3WwRRfK
2026-03-28 13:51:51 +00:00
Vitor PamplonaandGitHub 3ad42d2d8b Merge pull request #1979 from vitorpamplona/claude/nip24-compliance-check-WvjhO
Add birthday field support to UserMetadata
2026-03-28 09:48:35 -04:00
Claude b465785c27 feat: NIP-A4 compliance - add k tag to zap requests and enforce e tag prohibition
- Add KindTag to LnZapRequestEvent.create() when zapping events, as required
  by NIP-A4 ("NIP-57 zaps MUST include the k tag to 24")
- Enforce e tag prohibition in all PublicMessageEvent.build() methods by
  stripping any e tags from the tag builder output (NIP-A4: "e tags must not
  be used")
- Add comprehensive tests for both changes

https://claude.ai/code/session_019JsSsTTXivnNWiAtE5DE1R
2026-03-28 13:48:29 +00:00
Vitor Pamplona 9b483f903d Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
  feat: implement NIP-32 Labeling protocol in quartz
2026-03-28 09:41:26 -04:00
Vitor Pamplona 0c7e5fddea Fixes test cases 2026-03-28 09:41:09 -04:00