8 Commits
Author SHA1 Message Date
Mubarak AuwalandGitHub 9fca13f0eb Register the Android signer plugin on the UI engine so Login with Amber shows again (#699) 2026-06-09 07:17:23 +01:00
Mubarak AuwalandGitHub 1ce17a275d feat(blocked-users): complete block/unblock UX (#676)
* feat(blocked-users): complete block/unblock UX

* docs(changelog): link block/unblock UX entry to PR #676

* fix(l10n): reuse profile key instead of duplicate blockedUserProfileTitle

* fix(blocked-user): disable unblock button while action is in flight

* fix(blocked-users): address pepina review

* refactor(blocked-users): morph in place on unblock and polish notice card

* fix(blocked-users): restore bottom padding only when unblocked panel is shown

* style(blocked-users): apply dart format

* Cover unblocked action panel buttons in BlockedUserScreen tests

* Consolidate blocked-user and start-chat screens into UserProfileScreen

* Cover topAligned mode, blocked notice transitions, and UserProfileScreen.show in tests

* Cover topAligned invite share tap and failure paths

* Fall back to bech32 npub for the blocked user tile display name and drop stale start-chat route stub

* Drop the WnSystemNotice elevatedCard variant and use fillSecondary on the blocked user notice

* Address pepi's review on the blocked notice and open user profiles top-aligned from start-chat entries
2026-05-21 18:42:38 +02:00
Mubarak AuwalandGitHub bc32a14ed9 fix: reset Whitenoise lifecycle after deleting data (#662)
* fix: reset Whitenoise lifecycle after deleting data

* fix: preserve global instance on failed delete

* docs: clarify delete reset recovery

* fix: await delete all data completion

* fix: ignore stale dm group ids

* fix: repair delete data test assertion

* fix: serialize whitenoise initialization

* fix: reset Whitenoise lifecycle after deleting data

* fix: satisfy delete reset CI checks

* test(reset_marker): cover default FlutterSecureStorage.deleteAll fallback

* fix: keep start dm errors visible
2026-05-19 17:29:15 +01:00
Mubarak AuwalandGitHub 2cd588272d feat: add block/unblock user Flutter bridge (#554)
* feat: add UserBlockChanged to ChatListUpdateTrigger bridge

* feat: add block/unblock user bridge functions

* chore: regenerate flutter_rust_bridge bindings for mute_list API

* test: enforce exact order in userBlockChanged chat list assertions

* chore: bump whitenoise-rs rev and regenerate bridge bindings

* chore: format generated dart bridge files

* chore: rustfmt generated bridge file

* chore: rebase with master and regenerate bridge bindings

* fix: remove duplicate test function in chat_list
2026-04-14 11:32:43 +01:00
Mubarak AuwalandGitHub f654badd5f feat: expose mute/unmute chat through Flutter bridge (#541)
* feat: expose mute/unmute chat through Flutter bridge

Bridge whitenoise-rs mute_chat, unmute_chat, and mute_forever_timestamp
to Dart via flutter_rust_bridge. Add muted_until to ChatSummary and
ChatMuteChanged trigger for real-time UI updates.

Also fixes pre-existing subscribe_to_group_messages API mismatch
(new limit parameter added upstream).

* test: cover chatMuteChanged trigger in use_chat_list

* make ccoderabbit happy

* feat: expose ChatMuteDuration enum through Flutter bridge

* chore: regenerate freezed code for ChatMuteDuration

* remove MUTE_FOREVER reference from doc comment
2026-03-30 22:14:38 +01:00
Mubarak AuwalandGitHub f1e94ecb23 feat: expose removed_at and RemovedFromGroup trigger in Rust bridge (#536)
Bumps whitenoise-rs to b5c9e8b and regenerates flutter_rust_bridge bindings.

- Add removed_at: Option<DateTime<Utc>> to ChatSummary so the Flutter
  layer can tell when a group membership was revoked by an admin
- Add RemovedFromGroup variant to ChatListUpdateTrigger so real-time
  removal events can be handled distinctly from archive/unarchive
- Regenerate frb_generated.rs, frb_generated.dart, and
  api/chat_list.dart from the updated bridge definition
2026-03-25 18:03:59 +01:00
Mubarak AuwalandGitHub 296e2cc40e feat: wire delivery status from Rust bridge to Flutter UI (#425)
* feat: wire delivery status from Rust bridge to Flutter UI

* chore: regenerate flutter_rust_bridge codegen

* Fix cargo fmt lint and handle messageRetried edge case

Fix import ordering in frb_generated.rs and line break in messages.rs
to pass cargo fmt check. Handle messageRetried when message ID is not
yet in the display list by appending it instead of silently ignoring.

* Run dart format on generated bridge files

* Update whitenoise-rs rev to aa56ba6 to fix mdk version conflict

* Add tests for deliveryStatusChanged and messageRetried handlers

* Add tests for DeliveryStatus mapping in ChatMessageBubble

* Sync with Rust retry redesign: add Retried status, remove messageRetried

Update whitenoise-rs rev to 74a3071 and re-run codegen to sync with
the retry-as-new-message design. DeliveryStatus now includes Retried,
UpdateTrigger no longer has MessageRetried.

- Update whitenoise-rs rev to 74a3071
- Add DeliveryStatus.retried variant and From impl in bridge
- Remove MessageRetried from UpdateTrigger enum and From impl
- Remove messageRetried handler from useChatMessages hook
- Add Retried case to DeliveryStatus mapping in ChatMessageBubble
- Remove messageRetried tests, add retried conversion test

* cargo fmt on generated code, add Retried delivery status test

* Run dart format on generated bridge files
2026-03-05 00:05:04 +01:00
Mubarak AuwalandGitHub bab7a76c9e feat: expose KeyPackageStatus enum in bridge (#308)
* feat: update bridge to expose KeyPackageStatus enum (#308)

Update whitenoise-rs to bd18293 and mdk-core to v0.6.0. Change
user_has_key_package return type from bool to KeyPackageStatus
(Valid/NotFound/Incompatible) and regenerate FRB bindings.

* fix: migrate Flutter code from bool to KeyPackageStatus

Update hook, screens, mocks, and tests to use the new
KeyPackageStatus enum instead of bool for key package checks.
2026-02-19 19:18:46 +01:00