Commit Graph

10047 Commits

Author SHA1 Message Date
nrobi144 ca4e51afa9 feat(media): NIP-68 picture display and profile gallery grid
Phase 7: PictureDisplay composable for kind 20 events with image-first
layout, GalleryTab with adaptive grid of thumbnails, lightbox support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 05:44:33 +02:00
nrobi144 f0acbb1934 feat(media): encrypted media service for NIP-17 DM file sharing
Phase 6: AESGCM encrypt/decrypt for DM file attachments, Blossom
upload of encrypted files, ChatFileAttachment composable with
auto-decrypt for images and file type display.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 05:44:33 +02:00
nrobi144 1a2dc9efac feat(media): lightbox overlay with zoom, gallery navigation, and save
Phase 5: Full-screen lightbox overlay with mouse wheel zoom + pan,
left/right gallery carousel, keyboard shortcuts (Esc/arrows/Ctrl+S),
save to disk via FileDialog. Images in NoteCard are clickable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 05:44:33 +02:00
nrobi144 405601463e feat(media): VLCJ video playback with DirectRendering and player pool
Phase 4: VLCJ player pool (max 3 instances), DirectRendering via
CallbackVideoSurface → Skia Bitmap → Compose Image. Video controls
with auto-hide, seek, play/pause. Graceful fallback when VLC missing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 05:44:33 +02:00
nrobi144 2181407647 feat(media): desktop upload UX with file picker, clipboard paste, and attachment row
Phase 3: Native file dialog, AWT clipboard paste handler, media
attachment UI with thumbnails, and ComposeNoteDialog media integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 05:44:33 +02:00
nrobi144 443f7c6a09 feat(media): Phase 2 — Desktop Blossom upload client
- DesktopBlossomClient: PUT /upload, DELETE, HEAD /upload (BUD-06)
- DesktopBlossomAuth: kind 24242 auth with base64 Nostr header
- DesktopMediaMetadata: SHA-256, dimensions, blurhash via ImageIO
- DesktopMediaCompressor: lossless EXIF stripping (Commons Imaging)
- DesktopUploadOrchestrator: strip EXIF → metadata → auth → upload
- DesktopUploadTracker: StateFlow-based upload state tracking

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 05:44:33 +02:00
nrobi144 212dda40ca feat(media): Phase 0+1 — Coil3 image loading + inline images in notes
- DesktopImageLoaderSetup: Coil3 with explicit memory cache (25% heap,
  max 512MB), persistent disk cache (OS-appropriate paths), SVG decoder
- DesktopBlurHashFetcher: blurhash placeholder images via Skia Bitmap
- DesktopBase64Fetcher: base64 data: URI image decoding
- SkiaGifDecoder: GIF first-frame rendering via Skia Codec
- MediaAspectRatioCache: thread-safe LruCache for aspect ratios
- NoteCard: inline AsyncImage for image URLs, stripped from text
- Added coil-compose, coil-okhttp, coil-svg, vlcj, commons-imaging,
  androidx-collection deps to desktopApp

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 05:44:33 +02:00
Claude 883a2f995e style: apply ktlint formatting fixes
https://claude.ai/code/session_01HeWiRdKDTnMGfEBUegk3d1
2026-03-17 03:43:19 +00:00
Claude 1c4f9769b1 fix: session-start hook fails silently when dl.google.com is blocked
The Claude Code web egress proxy does not include dl.google.com in its
allowlist, causing the session-start hook to abort entirely (due to
set -euo pipefail) when Android SDK downloads fail. This cascading
failure also prevented local.properties creation and ANDROID_HOME export.

Additionally, JAVA_TOOL_OPTIONS contains nonProxyHosts entries for
*.google.com and *.googleapis.com, which causes the JVM to bypass the
proxy for Google Maven, resulting in connection failures.

Changes:
- Remove set -euo pipefail; use per-section error handling instead
- Fix JAVA_TOOL_OPTIONS: strip *.google.com from nonProxyHosts
- Fix no_proxy: remove *.google.com and *.googleapis.com entries
- Move local.properties and env exports before SDK download section
- Make SDK downloads non-fatal with clear warning messages
- Install standalone ktlint as fallback for spotlessApply
- Create spotless-apply wrapper script for proxy-blocked environments
- Update Stop hook to fall back to spotless-apply when Gradle fails

https://claude.ai/code/session_01HeWiRdKDTnMGfEBUegk3d1
2026-03-17 03:43:10 +00:00
Claude af12d13d67 fix: use artifact-url output for direct APK download link
The manually constructed URL was invalid. Use the artifact-url output
from upload-artifact which provides the correct download URL.

https://claude.ai/code/session_0138kUcZaPQoQcAc7nA1KDbf
2026-03-17 03:34:53 +00:00
Claude 39e15a8929 feat: comment benchmark APK link on open PRs
Add PR commenting to the build-benchmark-apk workflow. When a build
completes, it now finds any open PR for the branch and posts a comment
with a direct download link to the benchmark APK artifact.

https://claude.ai/code/session_0138kUcZaPQoQcAc7nA1KDbf
2026-03-17 03:23:00 +00:00
Claude 866dfca710 fix: rename _transactions to allTransactions to fix ktlint backing-property-naming
The backing property _transactions no longer has a matching public
property since it was replaced by filteredTransactions.

https://claude.ai/code/session_01CdNY7qYDRHJr1jhAFvVgzj
2026-03-17 03:07:57 +00:00
Vitor Pamplona 73d1e39587 Merge branch 'main' into claude/auto-load-transactions-scroll-KC8of 2026-03-16 23:03:09 -04:00
Claude 856e85988a feat: improve Android push notifications with modern notification APIs
- Use MessagingStyle for DM notifications with sender avatars and
  conversation formatting (integrates with Android Bubbles/conversation space)
- Add Direct Reply action so users can respond to DMs from the
  notification shade without opening the app
- Add Mark as Read action with SEMANTIC_ACTION_MARK_AS_READ for
  Android Auto/Wear OS integration
- Apply notification grouping with InboxStyle summary notifications
  for both DMs and Zaps (group keys were defined but never used)
- Use BigTextStyle for zap notifications so long messages expand
- Set proper notification categories (CATEGORY_MESSAGE for DMs,
  CATEGORY_SOCIAL for zaps) for OS-level prioritization and DND bypass
- Fix PendingIntent flag from FLAG_MUTABLE to FLAG_IMMUTABLE where
  mutability is not needed (security improvement)
- Replace blocking image load (executeBlocking) with suspend-friendly
  Coil execute() on IO dispatcher
- Upgrade DM channel importance to IMPORTANCE_HIGH for heads-up display

https://claude.ai/code/session_012w6K8H4nvZYxeRryW2USAp
2026-03-17 03:00:08 +00:00
Claude 11950dc4f4 feat: add transaction filter for zaps vs non-zaps on wallet screen
Adds filter chips (All / Zaps / Non-Zaps) to the transactions list.
Zap transactions are identified by having nostr metadata. The filter
is applied client-side via a combined Flow in WalletViewModel.

https://claude.ai/code/session_01CdNY7qYDRHJr1jhAFvVgzj
2026-03-17 02:55:16 +00:00
Claude c3f7e491a6 feat: increase wallet transaction page size to 100
https://claude.ai/code/session_01CdNY7qYDRHJr1jhAFvVgzj
2026-03-17 02:34:15 +00:00
Vitor Pamplona 7a3b1afacc Merge pull request #1865 from vitorpamplona/claude/add-apk-benchmark-action-5c4UX
Add GitHub Actions workflow for building benchmark APK
2026-03-16 22:33:15 -04:00
Claude 61e85df8db feat: post commit comment when benchmark APK is ready
Adds a GitHub Script step that comments on the commit with a direct
link to the workflow artifacts, making it visible in PRs and branch
pages.

https://claude.ai/code/session_013hcKzBgJgfsrArSgTTGNEk
2026-03-17 02:27:53 +00:00
Claude 146f3f91b5 feat: add GitHub Action to build benchmark APK on claude branches
Adds a lightweight workflow that triggers on pushes to claude/* branches,
building only the Play Benchmark APK for quick testing after Claude
completes a task.

https://claude.ai/code/session_013hcKzBgJgfsrArSgTTGNEk
2026-03-17 02:20:47 +00:00
Claude 0459633d82 feat: move delete all button to top bar as icon in drafts screen
Replace the ElevatedButton in a sticky header with a delete icon
(Icons.Default.Delete) in the top bar actions area. The confirmation
dialog is preserved and now lives at the screen level, reading the
current feed state directly when confirmed.

https://claude.ai/code/session_01AbiBeDnT4KPKD16sKKaLD8
2026-03-17 02:20:13 +00:00
Claude 4a430e6663 feat: auto-load wallet transactions on scroll
Add infinite scroll pagination to the wallet transactions screen.
When the user scrolls within 5 items of the bottom, the next page of
transactions is automatically fetched and appended. Uses the existing
NWC list_transactions limit/offset support and total_count to know
when all transactions have been loaded.

https://claude.ai/code/session_01CdNY7qYDRHJr1jhAFvVgzj
2026-03-17 02:09:44 +00:00
Vitor Pamplona d0297b7e34 Fixes stability plugin for AGP9 2026-03-16 19:44:51 -04:00
Vitor Pamplona 56cce46858 Solving all problems with Quartz tests 2026-03-16 19:22:28 -04:00
Vitor Pamplona 962da3280b Moves the N44 test to Jvmtest 2026-03-16 18:57:00 -04:00
Vitor Pamplona b0c714176a Updates versions for github actions 2026-03-16 18:46:39 -04:00
Vitor Pamplona 6ffc902598 Unifies UriParser 2026-03-16 18:15:43 -04:00
Vitor Pamplona 790fd45470 Removes warnings 2026-03-16 18:10:55 -04:00
Vitor Pamplona f708f6c265 Specify which .def file is used between simulators and ios Devices 2026-03-16 17:46:20 -04:00
Vitor Pamplona 7f61b4819b new log fuctions mocked 2026-03-16 17:45:05 -04:00
Vitor Pamplona e7760dc7c7 adds bundleId to the binary file 2026-03-16 17:16:18 -04:00
Vitor Pamplona 12c27af813 cancel other running builds in github actions when a new one comes up 2026-03-16 17:16:05 -04:00
Vitor Pamplona 7e2912ffd8 removes more warnings 2026-03-16 17:15:33 -04:00
Vitor Pamplona 874d750bf0 removing unused import 2026-03-16 17:01:59 -04:00
Vitor Pamplona 95c7adc90b Less warnings 2026-03-16 16:53:17 -04:00
Vitor Pamplona b96c1c2c3a Fixes iosGzip 2026-03-16 16:38:31 -04:00
Vitor Pamplona b916817247 Finishes serialization features for NIP-47 2026-03-16 16:35:05 -04:00
Vitor Pamplona 2d959b0108 Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
  drawerGesturesEnabled is true whenever the drawer is in transition (target != current)
  Split the logic between onPreScroll and onPostScroll
  New Crowdin translations by GitHub Action
  New Crowdin translations by GitHub Action
  Unnecessary ?. / ?: / !! on non-null Missing @OptIn annotations Parameter name mismatches Icons.Filled.*  / Icons.AutoMirrored.* No cast needed / remove inline LocalLifecycleOwner import fix NIP-51 name() → title() Chess gameId → startEventId Nullable DecimalFormat safe calls DelicateCoroutinesApi opt-in
  use 50/50 split for pager vs dock zones
  fix: allow swipe-to-close when drawer is open on pager screens
2026-03-16 16:28:55 -04:00
Vitor Pamplona abf2151bac Damus' relay is way too restrictive 2026-03-16 16:28:42 -04:00
Vitor Pamplona 56f7d83b5b Merge pull request #1860 from davotoula/swipe-on-main-screen
Swipe to switch tabs. Main screen and messages
2026-03-16 16:14:53 -04:00
Vitor Pamplona dd55827486 Merge pull request #1863 from davotoula/reduce-compilation-warnings
Reduce compilation warnings
2026-03-16 16:14:38 -04:00
David Kaspar 645affd511 Merge pull request #1864 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-16 18:34:37 +00:00
Crowdin Bot 1a671fd0b4 New Crowdin translations by GitHub Action 2026-03-16 18:27:11 +00:00
David Kaspar 0c8a462ddf Merge pull request #1862 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-16 18:25:26 +00:00
davotoula 9d95817b4d drawerGesturesEnabled is true whenever the drawer is in transition (target != current) 2026-03-16 19:04:01 +01:00
davotoula bf6ee6dc87 Split the logic between onPreScroll and onPostScroll 2026-03-16 19:01:51 +01:00
Crowdin Bot 21b6f9c67e New Crowdin translations by GitHub Action 2026-03-16 17:50:19 +00:00
David Kaspar d9c95de736 Merge pull request #1861 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-03-16 17:48:10 +00:00
Vitor Pamplona 7c22c4e6c5 Migrates to collections 1.6, which deprecates iOS Intel targets. 2026-03-16 13:45:01 -04:00
Crowdin Bot 1af1383428 New Crowdin translations by GitHub Action 2026-03-16 17:09:41 +00:00
Vitor Pamplona ea6116cd5c Merge branch 'main' of https://github.com/vitorpamplona/amethyst
* 'main' of https://github.com/vitorpamplona/amethyst:
  New Crowdin translations by GitHub Action
  Fix swipe-back triggering unwanted draft deletion signing
  fix: revert ReactionsSettingsScreen to upstream version
  fix(nav): preserve screen state across overlay navigation
  feat(search): collapsible section headers + sorting + search improvements
  fix(ui): remove duplicate back button from SinglePaneLayout
  refactor(search): extract thread-safe EventDeduplicator, unify dedup
  fix(search): loading indicator, result delivery, and history race
  fix(search): cleanup review findings — dead code, FQN refs, naming
  refactor(search): extract shared code to commons, remove dead code
  feat(search): add keyboard shortcuts, search history UI, and operator hints
  feat(search): add SearchHistoryStore with recent queries and saved searches
  feat(search): add advanced search UI with panel, results list, and SearchScreen rewrite
  feat(search): add AdvancedSearchBarState with bidirectional sync
  feat(search): add SearchFilterFactory and SearchResultFilter
  feat(search): add query engine — SearchQuery, QueryParser, QuerySerializer, KindRegistry
2026-03-16 13:02:52 -04:00