Commit Graph

3083 Commits

Author SHA1 Message Date
davotoula 478c4cc356 feat(chess): notifications for challenge accepted and opponent moves
Add Android push notifications for chess events:
- LiveChessGameAcceptEvent (kind 30065): notifies when opponent accepts challenge
- LiveChessMoveEvent (kind 30066): notifies when opponent makes a move
- New Chess notification channel alongside existing DM and Zap channels
- Chess kinds added to NotificationFeedFilter for in-app notification feed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 19:31:11 +01:00
davotoula 292c6de08a feat(chess): exit spectator mode with Leave Game button
Adds ability to leave a spectated game on both Android and Desktop:
- Added stopSpectating() to ChessLobbyLogic (removes from state + stops polling)
- Both ViewModels now delegate to logic.stopSpectating() instead of bypassing it
- LiveChessGameScreen accepts onLeaveSpectating callback shown in spectator info area
- Android: Leave Game button pops back stack and stops spectating
- Desktop: Leave Game button clears selectedGameId (returns to lobby) and stops spectating

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 19:31:11 +01:00
davotoula ed9d942ce0 feat(chess): finished games section below active games in lobby
Adds a "Finished Games" section to the Android chess lobby screen,
showing up to 10 completed games with opponent avatars, result
(Won/Lost/Draw), and move count. The section only appears when
completedGames is non-empty, matching the Desktop implementation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 19:31:11 +01:00
davotoula 006a2229fe feat(chess): avatar vs avatar display on board and game list
Add ChessPlayerChip.kt with three shared composables:
- ChessPlayerChip: single player avatar + name with active border
- ChessPlayerVsHeader: mirrored White vs Black header above the board
- OverlappingAvatars: compact overlapping circular avatars for list cards

Wire avatars into:
- LiveChessGameScreen: vs header with active player green border
- DesktopChessGameLayout: vs header above the chess board
- Android & Desktop lobby cards: overlapping avatars in ActiveGameCard,
  ChallengeCard, and OutgoingChallengeCard avatar slots

Uses existing UserAvatar (coil3 AsyncImage + Robohash fallback) from
commons for KMP compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 19:31:10 +01:00
davotoula 638bdb7b2d fix(chess): finished games transition from active to completed
Wire onGameEndDismiss callback so the "Continue" button on game end
overlay moves the game to the completed list. Add auto-detection of
finished games during polling refresh so games transition even if the
user navigates away without clicking the button. Discovered games that
are already finished now go straight to completed instead of appearing
in the active list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 19:31:10 +01:00
Vitor Pamplona 306d76f793 Tries to fix
IllegalArgumentException: 1.06.0-PLAY

| Prop | Value |
|------|-------|
| Manuf |Google |
| Model |Pixel 8a |
| Prod |akita |
| Android |16 |
| SDK Int |36 |
| Brand |google |
| Hardware |akita |
| Device | akita |
| Host | r-0123456789abcdef-0123 |
| User | android-user |

```
java.lang.IllegalArgumentException: Cannot disable reuse from root if it was caused by other groups
    androidx.compose.runtime.PreconditionsKt.throwIllegalArgumentException(r8-map-id-eb237b6d0af50dd04fa25285a72672c5149c195876ad0d708b61d757d31f3d90:3)
    androidx.compose.runtime.ComposerImpl.endReuseFromRoot(r8-map-id-eb237b6d0af50dd04fa25285a72672c5149c195876ad0d708b61d757d31f3d90:19)
    androidx.compose.runtime.PausedCompositionImpl.resume(r8-map-id-eb237b6d0af50dd04fa25285a72672c5149c195876ad0d708b61d757d31f3d90:369)
    androidx.compose.ui.layout.LayoutNodeSubcompositionsState$precomposePaused$2.resume(r8-map-id-eb237b6d0af50dd04fa25285a72672c5149c195876ad0d708b61d757d31f3d90:50)
    androidx.compose.foundation.lazy.layout.PrefetchHandleProvider$HandleAndRequestImpl.performPausableComposition(r8-map-id-eb237b6d0af50dd04fa25285a72672c5149c195876ad0d708b61d757d31f3d90:49)
    androidx.compose.foundation.lazy.layout.PrefetchHandleProvider$HandleAndRequestImpl.executeRequest(r8-map-id-eb237b6d0af50dd04fa25285a72672c5149c195876ad0d708b61d757d31f3d90:128)
    androidx.compose.foundation.lazy.layout.PrefetchHandleProvider$HandleAndRequestImpl.execute(r8-map-id-eb237b6d0af50dd04fa25285a72672c5149c195876ad0d708b61d757d31f3d90:33)
    androidx.compose.foundation.lazy.layout.AndroidPrefetchScheduler.runRequest(r8-map-id-eb237b6d0af50dd04fa25285a72672c5149c195876ad0d708b61d757d31f3d90:36)
    androidx.compose.foundation.lazy.layout.AndroidPrefetchScheduler.run(r8-map-id-eb237b6d0af50dd04fa25285a72672c5149c195876ad0d708b61d757d31f3d90:113)
    android.os.Handler.handleCallback(Handler.java:1070)
    android.os.Handler.dispatchMessage(Handler.java:125)
    android.os.Looper.dispatchMessage(Looper.java:333)
    android.os.Looper.loopOnce(Looper.java:263)
    android.os.Looper.loop(Looper.java:367)
    android.app.ActivityThread.main(ActivityThread.java:9331)
    java.lang.reflect.Method.invoke(Native Method)
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:566)
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:837)
```
2026-03-23 13:47:00 -04:00
Vitor Pamplona eeca86e542 Fixes comparator to avoid Comparison method violates its general contract! 2026-03-23 13:16:32 -04:00
Vitor Pamplona 590bd21f62 UriParser might crash, wraps in a try catch 2026-03-23 13:03:43 -04:00
Vitor Pamplona 7af1be7363 v1.06.0 2026-03-23 11:23:44 -04:00
Vitor Pamplona 1f5841d090 Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
  update translations: CZ, DE, PT, SE
  New Crowdin translations by GitHub Action
2026-03-23 10:31:22 -04:00
Vitor Pamplona 9d086df37a Updating all dependencies 2026-03-23 10:28:33 -04:00
Crowdin Bot 0cc06f424e New Crowdin translations by GitHub Action 2026-03-23 13:12:22 +00:00
davotoula 11176a4679 update translations: CZ, DE, PT, SE 2026-03-23 14:08:14 +01:00
Vitor Pamplona bbb75afed9 Merge pull request #1904 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-23 08:27:58 -04:00
Crowdin Bot 2eb3ebd365 New Crowdin translations by GitHub Action 2026-03-23 12:25:24 +00:00
Vitor Pamplona d4fd8088f1 lint 2 2026-03-22 21:04:11 -04:00
Vitor Pamplona 3e7633ea6b lint 2026-03-22 20:02:13 -04:00
Vitor Pamplona 11ed878111 Removing unnecessary XML loading. 2026-03-22 19:43:00 -04:00
Vitor Pamplona 76df43b031 Removes logs from blossom fetcher 2026-03-22 19:07:18 -04:00
Vitor Pamplona 41b0abc8e9 Moves expiration process to IO 2026-03-22 19:06:37 -04:00
Vitor Pamplona 439b392aa0 Moves EmptyNostrClient to a class to avoid auto-import issues 2026-03-22 15:14:49 -04:00
Vitor Pamplona 2e1066a609 Merge pull request #1902 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-22 14:55:48 -04:00
Crowdin Bot 0905b05388 New Crowdin translations by GitHub Action 2026-03-22 18:50:38 +00:00
Vitor Pamplona b2f7c3296f Activate edits for Articles. 2026-03-22 14:47:27 -04:00
Vitor Pamplona 9c30e2d0f6 Adds draft editing to long form posting 2026-03-22 14:38:44 -04:00
Vitor Pamplona 570639c1df Fixes build 2026-03-22 12:50:26 -04:00
Vitor Pamplona 65ae09e201 Adding file uploads and metadata stripping to the Longform screen 2026-03-22 12:46:25 -04:00
Vitor Pamplona 3e93472dce Merge branch 'main' into claude/add-markdown-post-screen-Xma8x 2026-03-22 12:38:04 -04:00
Vitor Pamplona 26a3dcbd85 Adds upload cover url 2026-03-22 12:35:19 -04:00
Vitor Pamplona ffa60c5fd3 Final touches on new Markdown Screen 2026-03-22 12:25:49 -04:00
Crowdin Bot 41539c1b7a New Crowdin translations by GitHub Action 2026-03-22 15:21:49 +00:00
Vitor Pamplona 40c45fb3a1 Adds a RelaySync filter by since/until dates. 2026-03-22 11:18:28 -04:00
Vitor Pamplona 459f69ff2c Moves open polls view to a state flow in thew viewmodel 2026-03-21 16:20:15 -04:00
Vitor Pamplona 90cced23d2 Fixes search by noteID returning a version of the note instead of the address 2026-03-21 15:49:19 -04:00
Crowdin Bot a86b9ab2e1 New Crowdin translations by GitHub Action 2026-03-21 17:35:12 +00:00
davotoula 32c0efb291 update translations: CZ, DE, PT, SE 2026-03-21 16:04:16 +01:00
Vitor Pamplona b2ad97bb6b merge 2026-03-20 21:19:49 -04:00
Vitor Pamplona df6dc17047 Final touches on the Attestation cards 2026-03-20 21:16:59 -04:00
Crowdin Bot 24d2928881 New Crowdin translations by GitHub Action 2026-03-20 23:08:05 +00:00
Vitor Pamplona 2ef634ca01 Fixes showing attestations in the NoteMaster 2026-03-20 19:05:07 -04:00
Vitor Pamplona aca62ec81f Improves layout of the open poll cards 2026-03-20 18:41:11 -04:00
Vitor Pamplona f2e60986d6 Merge pull request #1895 from vitorpamplona/claude/show-open-polls-notifications-1ZDVi
Add Open Polls section to notifications feed
2026-03-20 18:30:07 -04:00
Vitor Pamplona 73536dd421 merge 2026-03-20 17:49:31 -04:00
Vitor Pamplona 817c4c7723 Removes some Attestation events from the feeds, adding on others 2026-03-20 17:45:45 -04:00
Claude 98cda3ba71 style: apply spotless formatting to OpenPollsSection
https://claude.ai/code/session_01LLLN5MDA5nJFYx38MVo81Q
2026-03-20 21:41:13 +00:00
Claude b6e54db81b refactor: use LocalCache.observeNotes flow for open polls
Replace LocalCache.notes.forEach iteration with observeNotes using a
Filter for PollEvent.KIND and ZapPollEvent.KIND by the current user.
This makes the open polls list reactive — it updates automatically
when new polls arrive instead of only computing once on composition.

https://claude.ai/code/session_01LLLN5MDA5nJFYx38MVo81Q
2026-03-20 21:38:48 +00:00
Crowdin Bot 57c046261e New Crowdin translations by GitHub Action 2026-03-20 21:32:27 +00:00
Vitor Pamplona bbac00ccb3 Merge branch 'main' into convert-dropdown-menus-to-M3-action-sheet-dialogs 2026-03-20 17:30:50 -04:00
Vitor Pamplona 0f921989b9 Merge pull request #1891 from vitorpamplona/claude/add-attestations-home-feed-lQCT8
Add support for rendering attestation events
2026-03-20 17:28:38 -04:00
Crowdin Bot 752f460bc0 New Crowdin translations by GitHub Action 2026-03-20 21:08:30 +00:00