Commit Graph
1122 Commits
Author SHA1 Message Date
Barry DeenandGitHub 0347c8f0e4 Merge pull request #503 from dmnyc/fix/drawer-item-spacing
fix: reduce drawer menu item spacing
2026-05-03 20:00:55 -04:00
Barry DeenandGitHub f857466455 Merge pull request #504 from dmnyc/fix/switch-unchecked-colors
fix: improve Switch visibility in unchecked state
2026-05-03 20:00:40 -04:00
Barry DeenandGitHub 1a10f6b84f Merge pull request #495 from fiatjaf/debug-build
use a different id and name for the app when doing a debug build
2026-05-03 20:00:13 -04:00
Barry DeenandGitHub 786710efbf Merge pull request #505 from fiatjaf/fix-spacing
add a spacing between "replying to" and the name
2026-05-03 19:59:14 -04:00
Barry DeenandGitHub 30bcaca875 Merge pull request #506 from fiatjaf/thumbhash
Thumbhash
2026-05-03 19:58:54 -04:00
fiatjaf e0c2c7c9e9 use a different id and name for the app when doing a debug build. 2026-04-29 16:18:33 -03:00
fiatjaf 615d4e7236 add "imeta" tags to notes with uploaded images, with thumbhash. 2026-04-28 23:28:39 -03:00
fiatjaf 21f78ee0bb thumbhash rendering support. 2026-04-28 21:28:40 -03:00
fiatjaf 1d04ef5d2b add a spacing between "replying to" and the name. 2026-04-28 21:02:05 -03:00
The Daniel beda5018ef fix: improve Switch visibility in unchecked state
Add wispSwitchColors() helper in Theme.kt that sets unchecked thumb,
track, and border colors so off-state toggles are distinguishable from
the background across all color schemes. Applied to all Switch instances
app-wide (10 files). Consolidates duplicate inline colors from
NotificationsScreen into the shared helper.
2026-04-28 18:56:46 -04:00
The Daniel 600e714216 fix: reduce drawer menu item height to 48dp
NavigationDrawerItem defaults to 56dp which causes excessive scrolling
in the sidebar. Reduced to 48dp for a tighter layout.
2026-04-28 18:51:31 -04:00
Barry DeenandGitHub 413a06915e Merge pull request #500 from barrydeen/feat/qr-scan-drawer
feat: add QR scan tab to drawer QR sheet
2026-04-26 09:27:09 -04:00
Barry Deen fddae10109 chore: bump version to 1.0.2 (76) 2026-04-26 09:26:10 -04:00
Barry Deen c8d6e0d05f feat: add QR scan tab to drawer QR sheet
Adds a Scan tab alongside Nostr/Lightning in the drawer's QR sheet that
opens the camera and decodes Nostr entities (npub, note, nprofile, nevent,
naddr) — with or without the nostr: prefix — and navigates directly to
the matching profile, thread, or article.

Extracts the camera scanner from WalletScreen into a reusable QrScanner
component, and centralizes NostrUriData→route mapping as toRoute() in
Navigation.kt so the deep-link handler and scanner share it.
2026-04-26 09:26:10 -04:00
Barry DeenandGitHub 0b0d30dec2 Merge pull request #493 from barrydeen/fix/16kb-page-size
fix: support 16 KB page size for Android 15+
2026-04-23 11:03:49 -04:00
Barry Deen f68b40f5a7 fix: support 16 KB page size for Android 15+
Disable legacy jniLibs packaging so native libraries are stored
uncompressed and page-aligned in the APK. Bump secp256k1-kmp to 0.19.0
and kmp-tor-resource to 408.16.4 since the prior versions shipped
ELF binaries with 4 KB LOAD alignment. All 13 .so files in the release
APK now report 2**14 alignment.
2026-04-23 11:03:17 -04:00
Barry DeenandGitHub 0d8c856c29 Merge pull request #492 from barrydeen/feat/inline-video-download
feat: add download button to inline video controls
2026-04-23 10:36:06 -04:00
Barry Deen 3ab1041fce feat: add download button to inline video controls 2026-04-23 10:35:38 -04:00
Barry DeenandGitHub b609fc56c0 Merge pull request #491 from barrydeen/fix/notifications-freeze-indexof
perf: avoid O(N^2) indexOf in notifications list
2026-04-23 10:30:19 -04:00
Barry Deen 503c46b256 perf: avoid O(N^2) indexOf in notifications list
Replace items(...) + notifications.indexOf(item) with itemsIndexed(...)
in NotificationsScreen. The indexOf call ran during composition for
every visible item, causing a linear scan per item and quadratic total
work as the list grew. Reported as a UI freeze when tapping the
notifications tab on slower devices (GrapheneOS).
2026-04-23 10:29:43 -04:00
Barry DeenandGitHub f4c716551b Merge pull request #490 from barrydeen/fix/quoted-note-emoji-picker
fix: use user's emoji picker for quoted/referenced notes
2026-04-23 10:18:43 -04:00
Barry Deen 69e49eb648 fix: use user's emoji picker for quoted/referenced notes
Quoted notes nested inside another note were using the default unicode
emoji fallback instead of the user's sorted-by-frequency picker with
their custom emojis. Plumb resolvedEmojis, unicodeEmojis, and the
onOpenEmojiLibrary callback through NoteActions so nested PostCard /
GalleryCard renders in RichContent.QuotedNote pick up the same emoji
state as their parent.
2026-04-23 10:03:41 -04:00
Barry DeenandGitHub 642b68e854 Merge pull request #489 from barrydeen/feat/drawer-avatar-opens-profile-edit
feat: open edit profile when tapping drawer avatar
2026-04-23 09:50:07 -04:00
Barry Deen 0d8e34fe02 feat: open edit profile when tapping drawer avatar 2026-04-23 09:49:44 -04:00
Barry DeenandGitHub 05e14914b4 Merge pull request #488 from barrydeen/fix/media-downloader-oom
fix: stream media downloads to avoid OOM on large files
2026-04-23 09:44:22 -04:00
Barry Deen 7a29f976df fix: stream media downloads to avoid OOM on large files 2026-04-23 09:43:34 -04:00
Barry DeenandGitHub 5853db286b Merge pull request #487 from barrydeen/feat/persistent-audio-player
feat: persistent audio mini-player docked above bottom nav
2026-04-22 22:26:04 -04:00
Barry Deen 06ec5592d3 feat: persistent audio mini-player docked above bottom nav
Replaces the basic inline audio widget with a global mini-player that persists
across feed scrolling and tab navigation. Playback continues with system
notification / lock-screen transport controls via MediaSessionService.

The dock has two states: a collapsed row showing the author's avatar and name
with rewind-15 / play-pause / forward-15; swipe up to expand for a scrub slider,
speed cycling, and close. Single ExoPlayer is owned by AudioPlayerController
and shared with the inline tap-to-play widget, which now reflects global
playback state.
2026-04-22 22:21:41 -04:00
Barry DeenandGitHub ebeebccbe9 Merge pull request #486 from barrydeen/fix/persist-settings-across-account-switch
fix: preserve local relay and emoji frequency across account switches
2026-04-22 21:56:22 -04:00
Barry Deen e245b2fbde fix: preserve local relay and emoji frequency across account switches
Two repos called clear() during resetForAccountSwitch() were doing
`prefs.edit().clear().apply()` on their SharedPreferences files while
those files were still pointing at the outgoing account:

- CustomEmojiRepository wipes its own per-pubkey file, erasing the
  "most used" emoji frequency map. No relay mirror, so the data was
  lost for good.
- BlossomRepository shares `wisp_prefs_{pubkey}` with KeyRepository, so
  its full-file wipe also took out local_relay, relays, dm_relays, etc.
  Most of those keys came back via replaceable-event refetches, but
  local_relay has no network source and stayed null.

Drop the disk wipe from both clear() methods. The subsequent
reload(newPubkey) already repoints prefs to the incoming account's file.
2026-04-22 21:54:40 -04:00
Barry DeenandGitHub b0455b1ea6 Merge pull request #485 from barrydeen/fix/compose-mention-ux
fix: stop mention insert from breaking compose cursor and keyboard
2026-04-22 21:04:50 -04:00
Barry Deen ad8c1c4d11 fix: stop mention insert from breaking compose cursor and keyboard
Mentions used to be stored in the text field as raw nostr:nprofile URIs
rendered as @Name via an OutputTransformation. The visual/underlying
offset mismatch made the cursor jump, the IME desync on rapid typing,
forced a trailing space after every mention (so '@name's' was impossible),
and turned a single backspace into a silent delete of the whole mention.

Store '@Name' directly in the text field and track mention ranges
out-of-band in the ViewModel; splice nostr:nprofile URIs back in at
publish time. Editing is now plain text — identity offset mapping, no
forced space, and breaking a mention drops only that mention, not the
surrounding text.
2026-04-22 21:04:13 -04:00
Barry DeenandGitHub f0f728d2fc Merge pull request #484 from barrydeen/fix/trending-reconnect-race
fix: trending feed not reconnecting after app resume
2026-04-22 20:51:24 -04:00
Barry Deen 6582c16d88 fix: trending feed not reconnecting after app resume
Remove the preConnectEphemeral optimization from the reconnect path. It
created a race where the ephemeral was mid-connect when subscribeTrendingFeed
fired its REQ, leaving the subscription stuck on Connecting. The direct
metric-switch path (no preConnect) worked fine, so match it.
2026-04-22 20:50:52 -04:00
Barry DeenandGitHub f9cc586804 Merge pull request #483 from barrydeen/fix/pull-self-deletions-on-startup
fix: pull own NIP-09 deletions on startup so deleted sets stay gone
2026-04-22 20:14:00 -04:00
Barry Deen 359e64385b fix: fetch and apply own deletion events on startup
Relays sometimes keep serving hashtag sets (and other addressable
events) after the user publishes a NIP-09 kind 5 deletion, so sets
reappeared on app reload — especially after a fresh install or on a
second device where the local DeletedEventsRepository was empty.

Self-data subscription now also requests our own kind 5 events, and
EventRouter routes them through EventRepository (marking deletion
coords/ids) and sweeps any matching interest sets out of
InterestRepository so a late-arriving deletion still wins.
2026-04-22 20:12:12 -04:00
Barry DeenandGitHub fbc18d385b Merge pull request #482 from barrydeen/feat/delete-note-confirmation
feat: confirm before deleting a note
2026-04-22 20:01:36 -04:00
Barry Deen 984ef213e0 feat: confirm before deleting a note from the 3-dot menu 2026-04-22 20:01:10 -04:00
Barry DeenandGitHub 499af910f4 Merge pull request #481 from barrydeen/feat/broadcast-mentions-to-inbox
feat: broadcast notes to inbox relays of mentioned pubkeys
2026-04-21 09:18:53 -04:00
Barry Deen ea80c46d2c feat: broadcast notes to inbox relays of all mentioned pubkeys
When publishing a kind-1 note (root or reply) that mentions pubkeys via
nostr: references, also deliver the event to each mentioned pubkey's
read (inbox) relays per NIP-65. Inbox URLs are deduplicated across
targets and against our own write relays, so shared inboxes only
receive the event once.
2026-04-21 09:18:19 -04:00
Barry DeenandGitHub 38c8323eca Merge pull request #480 from barrydeen/docs/readme-rewrite-v1
docs: rewrite README for v1.0.0 feature set
2026-04-19 14:26:29 -04:00
Barry Deen 6b7515804b docs: rewrite README for v1.0.0 feature set 2026-04-19 14:26:05 -04:00
Barry DeenandGitHub 58e4b5c14e Merge pull request #479 from barrydeen/chore/bump-version-1.0.0
chore: bump version to 1.0.0
2026-04-19 14:21:14 -04:00
Barry Deen b0851706a2 chore: bump version to 1.0.0 2026-04-19 14:20:54 -04:00
Barry DeenandGitHub 8740154b01 Merge pull request #478 from barrydeen/fix/group-join-auth-race
fix: wait for NIP-42 AUTH before group 9021/9007/9009 and surface admin failures
2026-04-19 14:18:48 -04:00
Barry Deen c20a2c6d20 fix: wait for NIP-42 AUTH before group 9021/9007/9009 and surface admin failures
Group joins and admin actions (create group / invite / edit metadata / put user /
remove user / leave / delete) previously fired their events as soon as the signer
returned, racing the relay's NIP-42 AUTH challenge. On an auth-gated relay the
unauthenticated event hits first and the relay either responds "auth-required:"
or silently downgrades the request — a 9021 with a valid invite code returns
"restricted: group is closed, you need an invite code", a 9007 can fail silently,
a 9009 then fires against a ghost group and gets "blocked: group doesn't exist",
and the admin never sees any of it because the publishes were fire-and-forget.

attemptJoin now waits up to 5s for authCompleted before sending the 9021, and
still retries once on an auth-required rejection as a safety net. A new
publishAdminEvent helper wraps the admin kinds with the same auth-wait, awaits
the relay's OK, and emits an AdminError on rejection or timeout. createGroup
additionally rolls back its local placeholder if the relay rejects 9007 so we
don't keep trying to issue invites for a group the relay doesn't know about.

A new adminErrors SharedFlow on GroupListViewModel is collected by DmListScreen
and rendered as an AlertDialog showing the step (e.g. "createGroup/9007") and
the relay's message, so silent admin failures become visible.
2026-04-19 14:15:58 -04:00
Barry DeenandGitHub 242b809916 Merge pull request #477 from barrydeen/fix/account-switch-social-graph-notifications
fix: preserve social graph and notifications across account switches
2026-04-19 12:43:35 -04:00
Barry Deen 7d5b988005 fix: preserve social graph and notifications across account switches
The social graph (ExtendedNetworkRepository + SocialGraphDb) was wiped
on every account switch because clear() deleted both the SharedPreferences
cache and SQLite tables, and SocialGraphDb used a single shared DB file.
Now SocialGraphDb uses per-account files with a one-time legacy migration,
and clear() no longer touches persistent state (only in-memory). Notification
events from account A were leaking into account B because the ObjectBox
seeding coroutine fired after the switch and NotificationRepository had no
reload(). Adds reload() to NotificationRepository/SafetyPreferences
with a stale-pubkey rejection guard and proper job cancellation.
2026-04-19 12:42:29 -04:00
Barry DeenandGitHub 3e27713078 Merge pull request #476 from barrydeen/fix/group-metadata-preserve-permissions
fix: preserve group permission flags on metadata edit
2026-04-19 11:57:26 -04:00
Barry Deen 2e0c193f04 fix: preserve group permission flags on metadata edit 2026-04-19 11:36:29 -04:00