Commit Graph
15733 Commits
Author SHA1 Message Date
Vitor PamplonaandGitHub f2cc46641c Merge pull request #3376 from vitorpamplona/claude/keen-franklin-h4kah5
feat: query zapstore's relay in the global Apps feed and keep its filter specific
2026-06-25 21:32:20 -04:00
Vitor PamplonaandGitHub 91df3c53ae Merge pull request #3375 from vitorpamplona/claude/compiler-instruction-limit-0ky2hw
Fix compiler instruction limit in AccountSettings constructor
2026-06-25 21:25:21 -04:00
Claude 890516263f feat: query zapstore's relay in the global Apps feed and keep its filter specific
The global Apps feed (NIP-82 software apps) was sending a kinds-only REQ
filter with limit=200. zapstore's relay scores each REQ filter for
specificity and rejects anything that scores below 3, treating a kinds-only
filter with a limit >= 100 as "too vague" — so the whole subscription was
refused.

- Drop the global Apps filter limit from 200 to 99 so a kinds-only filter
  clears the bar (kinds +1, limit < 100 +2 = 3).
- Always include wss://relay.zapstore.dev in the global Apps feed relays,
  since it indexes the full app catalog, unless the user has added it to
  their blocked relay list (NIP-51 kind 10006).
- Re-evaluate the subscription when the blocked relay list changes so
  blocking/unblocking zapstore takes effect without an app restart.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01US2aK3igzfeo4xtcvg3mKc
2026-06-26 01:17:05 +00:00
Claude 0b06754297 fix: avoid compiler instruction limit in account loading
innerLoadCurrentAccountFromEncryptedStorage awaited ~27 parallel parse
Deferreds directly inside the single 70-argument AccountSettings(...)
constructor expression. Each await is a suspension point, so the coroutine
state machine had to spill and restore the entire partially-evaluated
operand stack (dozens of already-built MutableStateFlow args) at every one
of them. That inflated the generated invokeSuspend method past the JVM
per-method limit:

  Method exceeds compiler instruction limit: 57866 in
  LocalPreferences$innerLoadCurrentAccountFromEncryptedStorage$result$1.invokeSuspend

Resolve every Deferred into a local val first, then build AccountSettings
as a single straight-line, suspension-free expression. Each await now sits
at a statement boundary with a near-empty operand stack, so only a small,
linear set of locals is spilled. Parallel parsing behaviour is unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H6VdHHFRNYXKXFcW7j5sF7
2026-06-26 00:45:46 +00:00
Vitor PamplonaandGitHub f79877adc6 Merge pull request #3371 from vitorpamplona/claude/laughing-volta-umdxsu
Add and update translations across 50+ locales
2026-06-25 20:25:21 -04:00
Claude 908e8bc1ee fix: remove invalid backslash escapes from all locale string files
Android's AAPT2 resource processor only recognizes a small set of valid
escape sequences: \, \', ", \n, \t, \r, \@, \?. All other \X sequences
(backslash-space, \-, \., \(, \), $, etc.) render as a literal backslash
followed by the character in the UI.

These were introduced by the batch AI translation. Remove the backslash
before every character that does not need escaping across 38 locale files.
2026-06-26 00:21:17 +00:00
Claude e5a83a4123 fix: remove duplicate translation entries in hu-rHU and sl-rSI
The appended translation blocks from the previous batch-translation session
overlapped with existing Crowdin translations already present in the files,
causing 31 duplicate keys in values-hu-rHU and 3 in values-sl-rSI.
Keep the first (original Crowdin) occurrence of each key.
2026-06-26 00:13:39 +00:00
Claude f2a7548434 fix: move shared browser/napplet strings to :commons to eliminate cross-module duplicate
AGP 9.2.1 treats resources defined in both an app module and a library module
with the same key (qualifiers="") as an error in non-debug builds.

`browser_address_hint`, `browser_console_title_short`, `browser_console_title`,
`browser_console_clear`, and `napplet_untitled` were defined in both
`:amethyst/values/strings.xml` and `:nappletHost/values/strings.xml`.
Both `:amethyst` and `:nappletHost` depend on `:commons`, so the canonical
home for these shared strings is `commons/src/androidMain/res/values/strings.xml`.

Update callers in both modules to use `com.vitorpamplona.amethyst.commons.R as
CommonsR`. Locale translations in amethyst's `values-*/` directories remain as
Android resource overlays (app module overrides library module at merge time).

Fixes: Found item String/browser_console_clear more than one time (packageFdroidBenchmarkResources)
2026-06-26 00:11:31 +00:00
Claude a1732155b1 fix: restore browser/napplet strings removed from values/strings.xml
The previous commit incorrectly removed browser_address_hint,
browser_console_clear, browser_console_title, browser_console_title_short,
and napplet_untitled from values/strings.xml. These are needed for
amethyst's own browser and napplet screens — both amethyst and nappletHost
use them independently, and Android allows app-level strings to coexist
with same-named library strings (app wins).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hfm5Lf3FfwDgPn5oiMVqUo
2026-06-26 00:10:54 +00:00
Claude f8a9920884 fix(i18n): resolve aapt2 duplicate resource errors in hu and sl-rSI
Remove 2959 strings from values-hu/strings.xml that were fully duplicated
in values-hu-rHU/strings.xml (added by prior commit), causing aapt2 to
error on `browser` and all other keys for the hu-HU build target.

Remove browser_console_clear, browser_address_hint, browser_console_title,
browser_console_title_short, and napplet_untitled from the app's default
values/strings.xml — these are already defined in the :nappletHost library
module, and having them in both causes aapt2 duplicate-key errors when the
library resources are merged into the app. Locale translations in
values-*/strings.xml continue to override the library defaults at runtime.

Fixes CI failures reported in PR #3371.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hfm5Lf3FfwDgPn5oiMVqUo
2026-06-26 00:10:53 +00:00
Claude 223458c3c1 feat: complete translations for 9 community-started locales
All 9 locales now have 0 missing translatable strings:
- Swahili (sw): ~2604 strings added
- Bengali Bangladesh (bn-rBD): ~2530 strings added
- Esperanto (eo, eo-rUY): ~2626 strings added, eo-rUY mirrored from eo
- Tamil (ta, ta-rIN): ~2683 strings added, ta-rIN mirrored from ta
- Latvian (lv-rLV): ~2823 strings added
- Uzbek (uz-rUZ): ~2900 strings added (fixed unescaped apostrophes in loan words)
- Serbian (sr-rSP): ~2931 strings added

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hfm5Lf3FfwDgPn5oiMVqUo
2026-06-26 00:10:53 +00:00
Claude 843d39675d feat: fill translation gaps for fa, in, ru, ru-rUA locales
- Farsi (fa): 19 missing strings now complete
- Indonesian (in): 9 missing strings (push notification UI) now complete
- Russian (ru): 144 missing strings + 1 plural now complete
- Russian Ukraine (ru-rUA): 467 missing strings + 1 plural now complete

All four locales now show 0 missing translatable strings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hfm5Lf3FfwDgPn5oiMVqUo
2026-06-26 00:10:53 +00:00
Claude bd86d6af20 fix(i18n): shorten over-long translated strings across 23 locales
266 string replacements across 41 locale files to reduce UI overflow risk.
Strings shortened to fit labels and menu items; technical terms (relay,
DM, NIP, Tor, pubkey, Cashu) kept as-is per project convention.

Languages updated: ar, cs, de, el, es, fa, fi, fr, hi, hu, in, it, nl,
pl, pt-BR, pt-PT, ru, sl, sv, sw, ta, th, uk, uz + regional siblings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hfm5Lf3FfwDgPn5oiMVqUo
2026-06-26 00:10:53 +00:00
Claude 9d41793a43 fix: correct XML escaping and type mismatches in locale string resources
- Escape unescaped `?` in calendar_rsvp_maybe_prefixed (it, ru, ru-rRU,
  ru-rUA) — Android treats `?` at string start as a theme-attr reference
- Escape unescaped `@` in my_name (fi, tr, tr-rTR) and
  quick_action_copy_user_id (zh) — same issue with `@` references
- Convert <plurals> to <string> for accounts_found, num_selected,
  follow_accounts in ru/ru-rRU/ru-rUA — English source uses <string>,
  so type-mismatched <plurals> were silently removed by AAPT2
- Fix orphaned key in el-rGR: error_parsing_json_from_lightning_
  address_check_the_user_s_lightning_address_with_user renamed to
  correct _setup_with_user suffix matching the English source

All locale files now build without errors or warnings.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hfm5Lf3FfwDgPn5oiMVqUo
2026-06-26 00:10:52 +00:00
Claude a7f6ba0ef0 feat: complete translations for 14 remaining locales
Fill all missing strings in Arabic (ar-rSA), Greek (el-rGR), Persian
(fa, fa-rIR), Finnish (fi-rFI), Indonesian (in, in-rID), Italian
(it-rIT), Japanese (ja, ja-rJP), Korean (ko-rKR), Russian (ru, ru-rRU,
ru-rUA), Thai (th, th-rTH), Turkish (tr, tr-rTR), Ukrainian (uk,
uk-rUA), Vietnamese (vi-rVN), and Traditional Chinese Taiwan (zh-rTW).

Most locale files now have all 2961 strings matching the English source.
Missing strings fall back to English per Android resource resolution.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hfm5Lf3FfwDgPn5oiMVqUo
2026-06-26 00:10:51 +00:00
Claude bff80daa94 feat: complete translations for 26 locale files
Fill all missing strings in cs, cs-rCZ, de, de-rDE, es, es-rES, es-rMX,
es-rUS, fr, fr-rCA, fr-rFR, hi-rIN, hu, hu-rHU, nl, nl-rBE, nl-rNL,
pl-rPL, pt-rBR, pt-rPT, sl-rSI, sv-rSE, zh, zh-rCN, zh-rHK, zh-rSG.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hfm5Lf3FfwDgPn5oiMVqUo
2026-06-26 00:10:51 +00:00
Vitor PamplonaandGitHub 74446e39cd Merge pull request #3373 from vitorpamplona/claude/adoring-shannon-h3pkfe
Render zap receipts as full notes in MultiSetCompose
2026-06-25 20:07:03 -04:00
Claude 1614e01f0e feat: render a lone zap notification as a full note, not a bare card
The single-zap/single-nutzap branch of MultiSetCompose dropped the bare
RenderLnZap/RenderNutzap activity card straight into the feed, with no
author column on the left, so it didn't read like the surrounding notes.

Reuse NoteCompose on the zap-receipt note instead: it wraps the same zap
card as the note body and gives it the standard note chrome — author
picture on the left, username header, reactions row. Padding is handed to
NoteCompose for this branch so it isn't doubled against the card column.

NoteCompose's author column previously resolved baseNote.author, which for
a kind-9735 zap receipt is the recipient's lightning provider (the signer),
not the zapper. Resolve the sender from the embedded zap request the same
way the thread's master note already does, so the picture on the left is
the actual zapper.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cg8mHZDCfGmGAVDaeJxPFz
2026-06-26 00:02:37 +00:00
Vitor PamplonaandGitHub 97efa23548 Merge pull request #3372 from vitorpamplona/claude/elegant-ride-orwxko
Scale outline gem icon to match filled gem size
2026-06-25 20:02:32 -04:00
Claude 0ae1cb03c4 fix: enlarge always-on notification gem icon to match other icons
The outlined service gem was authored at ~half the 512x512 viewport size,
so it rendered noticeably smaller (both width and height) than every other
notification small icon, which fill the viewport. Wrap the path in a group
that scales it ~1.8x about its centre, leaving a margin so the stroke stays
within bounds.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SVA2C5FyYWSmU7EzdFaAD2
2026-06-25 23:55:19 +00:00
Vitor PamplonaandGitHub 82e1b99036 Merge pull request #3370 from vitorpamplona/claude/laughing-bardeen-amkvlr
Render single zaps/nutzaps as large cards in MultiSetCompose
2026-06-25 18:35:31 -04:00
Claude 91883da4ab fix: stop nutzaps from rendering twice in the notification feed
NutzapEvent was missing from the textNoteCards exclusion filter in
convertToCard, so every nutzap was both grouped into the MultiSetCard /
NutzapUserSetCard path AND fell through to a standalone NoteCard, which
renders kind 9321 as a big RenderNutzap card. The result was a duplicate:
the same nutzap appeared once in the grouped card and once as an
individual note — the way a reply would.

LnZapEvent is already excluded for exactly this reason; nutzaps were
simply overlooked when the nutzap grouping was added. Exclude NutzapEvent
too so it only renders through the grouped path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X8ZruubvykNhfmrJXJA8s7
2026-06-25 22:29:58 +00:00
Claude a83db4c18f feat: render a lone zap/nutzap notification as a large activity card
A MultiSetCard bundles many notifications on a post into one compact stream
of icons, which is great when there are several. But a freshly-arrived zap
is usually alone in its own card (the additive feed path builds a
single-item MultiSetCard, and only a full rebuild groups same-post
notifications together), so it rendered as one tiny gallery icon.

When a MultiSetCard carries a single lightning zap or nutzap and nothing
else, render the existing large activity card (RenderLnZap / RenderNutzap)
— the same big, gradient "appreciation" display already used for onchain
zaps and the thread view — instead of the one-icon gallery. As soon as a
rebuild groups several notifications onto the same post (size > 1), it
falls back to the compact gallery as before.

This is purely a rendering decision in MultiSetCompose; the card-building
and grouping logic is unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X8ZruubvykNhfmrJXJA8s7
2026-06-25 22:05:49 +00:00
Vitor PamplonaandGitHub df21563b11 Merge pull request #3367 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-06-25 17:31:32 -04:00
vitorpamplonaandgithub-actions[bot] d841277978 chore: sync Crowdin translations and seed translator npub placeholders 2026-06-25 21:25:00 +00:00
Vitor PamplonaandGitHub c7e859a9a2 Merge pull request #3369 from vitorpamplona/claude/serene-clarke-19cbbz
Shift Cashu icon left and tint orange in nutzap displays
2026-06-25 17:23:28 -04:00
Claude f4ee8aac44 feat(ui): tint nutzap cashu icon orange in notification and reaction galleries
The cashu outline icon next to author avatars in the nutzap galleries
rendered in the default content color, while the lightning equivalent
(ZappedIcon) uses BitcoinOrange. Tint the cashu mark BitcoinOrange in the
reaction-row gallery (NutzapGallery), the notification multi-set gallery
(MultiSetCompose), and the notification user-set card (NutzapUserSetCompose)
so nutzaps read as value transfers consistent with lightning zaps.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QEFq9cUPECuB8F56sTtWXu
2026-06-25 21:22:10 +00:00
Claude c3a57f94a6 fix(icons): nudge Cashu icon another 0.3 left
Shift the mark a further 0.3 units left (net -1.6 from the original).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QEFq9cUPECuB8F56sTtWXu
2026-06-25 21:16:56 +00:00
Claude 1ea1b369ea fix(icons): nudge Cashu icon another 0.1 left
Shift the mark a further 0.1 units left (net -1.3 from the original).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QEFq9cUPECuB8F56sTtWXu
2026-06-25 21:13:35 +00:00
Claude 7b3c5325ff fix(icons): ease Cashu icon shift back to 5% left
10% felt over-shifted; move the mark right by 1.2 units so the net offset
from the original is -1.2 (5% of the 24x24 viewport) instead of -2.4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QEFq9cUPECuB8F56sTtWXu
2026-06-25 21:09:30 +00:00
Claude 782935320e fix(icons): recenter Cashu outline icon by shifting it 10% left
The cashew + pixel-shades mark was visually weighted to the right of the
24x24 viewport. Shift every x-coordinate in both paths (the stroked cashew
body outline and the filled pixel sunglasses) by -2.4 units so the drawing
sits balanced within the icon bounds. Shape is unchanged; only position.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QEFq9cUPECuB8F56sTtWXu
2026-06-25 21:07:04 +00:00
Vitor PamplonaandGitHub d6e2d45eca Merge pull request #3368 from vitorpamplona/claude/eager-albattani-p3sxmq
Add Onion-Location support for transparent Tor routing
2026-06-25 16:57:48 -04:00
Claude e59babe085 fix: three bugs in onion-location routing
- OnionLocationCache: add 24-hour TTL so stale .onion mappings expire
  instead of permanently breaking Tor connectivity when a server rotates
  its onion address

- OnionLocationInterceptor: demote from network to application interceptor
  so chain.request().url.host is always the original clearnet hostname.
  As a network interceptor it ran after OnionUrlRewriteInterceptor had
  already rewritten the host to .onion, causing cache refreshes from
  onion-routed responses to be stored under the wrong key and never used

- OnionUrlRewriteInterceptor: make http/https scheme mapping explicit and
  symmetric with the ws/wss arm; document that http:// onion for an
  https:// clearnet host is intentional (Tor circuit provides E2E security)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkQwqqjjDJmeAChYRK4tuV
2026-06-25 20:16:01 +00:00
Claude 5e831cadb4 test: verify OkHttp accepts .onion pseudo-TLD in toHttpUrl()
Documents that OnionUrlRewriteInterceptor's runCatching { toHttpUrl() }
call succeeds for Tor v2/v3 .onion hosts so a future OkHttp upgrade that
breaks .onion parsing is caught before the feature silently regresses.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkQwqqjjDJmeAChYRK4tuV
2026-06-25 19:45:40 +00:00
Vitor PamplonaandGitHub f5e6a251f7 Merge pull request #3365 from vitorpamplona/claude/happy-brown-tlu9nq
Extract AddRecommendationSection and WalletTypeCardContent composables
2026-06-25 15:23:15 -04:00
Claude 9b3e51f978 feat: passive Onion-Location discovery and .onion URL rewriting via OkHttp
Adds three components wired into both OkHttp factory chains (relays and
media/NIP-11):

- OnionLocationCache: ConcurrentHashMap<host, onionUrl> shared across
  all OkHttp clients. No Nostr-specific protocol changes needed.

- OnionLocationInterceptor (network interceptor, always active): reads
  the Onion-Location HTTP header from every response — WebSocket 101
  handshakes, NIP-11 documents, image servers, anything — and populates
  the cache. Discovery is a zero-cost by-product of traffic that already
  happens.

- OnionUrlRewriteInterceptor (application interceptor, Tor clients only):
  on outbound requests, checks the cache for the target host and rewrites
  to the .onion address when available. Derives the correct ws/wss scheme
  from the cached Onion-Location URL scheme so TLS expectations match.

First connection goes clearnet (or Tor-to-clearnet), populating the
cache. The next reconnect transparently uses the .onion address so Tor
connections avoid exit nodes entirely. Network transition reconnects
(already handled by RelayProxyClientConnector) retry with the cached
.onion on the fresh circuit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BkQwqqjjDJmeAChYRK4tuV
2026-06-25 19:06:59 +00:00
Claude 4540b1d6de fix: extract HeaderRowTitle to reduce Compose lambda MAXLOCALS in OnchainSection
HeaderRow's Row content lambda was generating MAXLOCALS=74, causing
GC overhead OOM in the Kotlin daemon during parallel compilation.
Extracting the Column block into a named HeaderRowTitle composable
reduces the Row lambda to two direct calls, cutting its bytecode size.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 18:42:51 +00:00
Vitor PamplonaandGitHub 48b9671fd5 Merge pull request #3366 from vitorpamplona/claude/favorite-web-apps-review-cn82yb
Rename web/napplet screens and controllers; introduce HostProfile
2026-06-25 14:28:59 -04:00
Claude 7d163b89c9 refactor: replace napplet host websiteMode boolean with a HostProfile type
The "locked nApplet vs open nSite" distinction was a `websiteMode: Boolean`
threaded through an Intent extra and re-branched at eight independent sites
across the launcher, the content server, both host surfaces, and the chrome.
That is one coupled security posture (capabilities, CSP, NIP-07 injection,
off-origin policy, network UI) expressed as scattered, drift-prone flags — and
boolean-blind, since the "website" is actually the *more* capable mode.

Introduce `HostProfile` (NAPPLET | WEBSITE), resolved once in the trusted main
process and carried over the Intent/Messenger boundary as its name. Every
coupled consequence now reads from one place:
- `declaredCapabilities(requires)` — THE broker grant, minted into the token
- `appCsp` / `injectsNip07` / `allowsOffOrigin` / `exposesNetwork`

Pure mechanical mapping (every branch 1:1, no behavior change). The wire extra
`EXTRA_WEBSITE_MODE` boolean becomes `EXTRA_HOST_PROFILE` string — safe, as it
is in-app process-to-process IPC, never persisted.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HrxLCMcQADUPnm8Sj9ZJ63
2026-06-25 18:19:16 +00:00
Claude 6437391df8 fix: extract large Compose lambdas to reduce OOM in Kotlin compiler
WalletTypeCard$lambda$0 (AddWalletScreen.kt) was generating a bytecode
method with MAXLOCALS=66, causing the JVM bytecode optimizer to exhaust
memory when three compile tasks ran in parallel on CI.

Extract the Card content into WalletTypeCardContent and extract the
add-recommendation item block in CashuMintRecommendationsScreen into
AddRecommendationSection (moving newRecommendationInput state there).
Both changes split large generated methods into smaller ones, reducing
per-task memory pressure in the Kotlin daemon.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MiKQ1CzErYcUBEbPrRudZQ
2026-06-25 17:53:19 +00:00
Vitor PamplonaandGitHub 418ea3fc46 Merge pull request #3362 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-06-25 12:04:51 -04:00
Claude 9a064984a5 refactor: rename web-app surfaces to distinguish them from the native App Store
The in-app "app" surfaces had colliding, sometimes inaccurate names. NIP-89
native apps showed as "Apps" while the in-app favorites showed as "Favorite
apps", and the single-app host screens were named `FavoriteWebAppScreen` /
`FavoriteNappletScreen` even though they open any url/coordinate (favorited or
not) and the "Napplet" one also renders nSites.

Establish one taxonomy:
- Native app store -> "App Store" (NIP-89), in-app Nostr web client -> "Web app",
  plus the existing nApplet / nSite. "Favorite" is now only the star toggle and
  the pinned grid, not a screen.
- Code axis: `WebApp` (url-based) and `NostrApp` (coordinate-based nSite/nApplet).
  The cross-process sandbox infra (`napplet/`, `nappletHost/`) keeps "Napplet".

Renames:
- Routes `FavoriteWebApp`/`FavoriteNostrApp` -> `WebApp`/`NostrApp`
- Screens `FavoriteWebAppScreen`/`FavoriteNappletScreen` -> `WebAppScreen`/`NostrAppScreen`
- Controllers `EmbeddedBrowserController`/`EmbeddedNappletController`
  -> `EmbeddedWebAppController`/`EmbeddedNostrAppController`
- Factory `acquireBrowser`/`acquireNapplet` -> `acquireWebApp`/`acquireNostrApp`
- Model `FavoriteApp.WebUrl` -> `FavoriteApp.WebApp`; `WebUrlNetworkRegistry`
  -> `WebAppNetworkRegistry`
- Strings: `software_apps`/`route_software_apps` "Apps" -> "App Store";
  `favorite_apps_empty` reworded to name web app / nApplet / nSite

Persistence is untouched: favorite id prefixes ("url:"/"nostr:"), DataStore
names ("favorite_apps"/"weburl_network"), and serialized type tags ("url"/
"nostr") are all kept stable. Taxonomy documented in
amethyst/plans/2026-06-25-web-app-naming.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HrxLCMcQADUPnm8Sj9ZJ63
2026-06-25 16:01:44 +00:00
vitorpamplonaandgithub-actions[bot] 49e56da1aa chore: sync Crowdin translations and seed translator npub placeholders 2026-06-25 16:01:36 +00:00
Vitor PamplonaandGitHub 204a8e00ee Merge pull request #3364 from vitorpamplona/claude/modest-lovelace-35fe6k
Fix bottom sheet grabber positioning and add console toggle state
2026-06-25 11:59:24 -04:00
Claude 3836cf4b88 fix: console UI — switch in top sheet, grabber at panel top when open
- TopControlSheet: replace SheetItem with SheetSwitchItem for the
  console row, adding a Switch that reflects the current
  consoleShowing state; add consoleShowing param and wire it from
  EmbeddedTabLayer
- BottomConsoleSheet: move the grabber Column before AnimatedVisibility
  so it sits at the top of the expanded panel (standard bottom-sheet
  handle behaviour) and animates upward as the console opens

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GxQdArv6h6SezciUWeoR38
2026-06-25 15:24:23 +00:00
Vitor PamplonaandGitHub bdd8041776 Merge pull request #3363 from vitorpamplona/claude/great-babbage-d0hgki
Reorganize navigation drawer and settings menu items
2026-06-25 10:23:06 -04:00
Claude 8978e0d023 feat: reorder settings sections and drop API-30 gate on drawer Browser
Reorder Account Settings: group network (relays/sync/follows, media/nests),
interactions (reactions/zaps), media playback, identity (DVMs/badges/payments),
then safety/i18n.

Reorder App Settings: group UI (privacy/prefs), composition, personalization
(home/reactions/bottom-bar/profile), then advanced (calendar/OTS/namecoin).

Also drop the now-redundant Build.VERSION_CODES.R gate on BROWSER in
DrawerNavigateItems, matching the fix landed in main (PR #3361).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AdbTQuhuk2g5XGWEqmKLRz
2026-06-25 14:09:53 +00:00
Vitor PamplonaandGitHub 156f205801 Merge pull request #3359 from vitorpamplona/claude/quirky-fermat-cwxjy6
Add theme preference support to napplet/browser WebViews
2026-06-25 10:07:53 -04:00
Claude dfe74b983e style: apply spotless formatting to NavBarItem.kt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AdbTQuhuk2g5XGWEqmKLRz
2026-06-25 13:54:59 +00:00
Claude b4a68f4b78 feat: reorder drawer menu items
Move BROWSER to the Navigate section (between VIDEO and DISCOVER).
Reorganise Feeds into logical clusters: content types first, then
live/social, communities/chats, calendar, apps/tools, packs, misc.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AdbTQuhuk2g5XGWEqmKLRz
2026-06-25 13:54:59 +00:00