24 Commits
Author SHA1 Message Date
Jeff Gardner f77d85db44 chore: prepare v2026.5.7+24 release 2026-05-07 13:46:17 +02:00
JeffGandGitHub b100fc1ec5 Add Fastlane release scaffolding (#601)
* Add Fastlane release scaffolding

* chore: document release flow and tag guard

* fix: address release automation review comments

* fix: harden release version parsing

* fix: resolve release review follow-ups

* fix: restore Android staging application id
2026-04-29 22:34:19 +02:00
PepiandGitHub c798b9972a Chat with support (#486)
* feat: add support chat translations

* feat: add hook to get support group

* feat: add new screen to start support chat

* feat: show chat with support option in user search screen

* style: add empty line to .fvmrc

* chore: change min coverage locally to be 99%

* chore: update lockfiles

* docs: update changelog
2026-03-17 09:39:20 -03:00
PepiandGitHub 03696d57e9 Debug and relay screens improvements (#502)
* feat: remove app flavor condition for debug view

* chore: remove APP_FLAVOR unused variable

* fix: add and fix some translations

* fix: loading issues on key packages actions

* refactor: move logs provider into a hook

* refactor: use base mock, remove unused relay status logic

* feat: add copy all logs to app logs screen

* docs: update changelog
2026-03-12 10:19:59 -03:00
72b68941b3 chore: fix production build flags and remove redundant just recipes (#467)
* chore: fix production build flags and remove redundant just recipes

- Add --dart-define=APP_FLAVOR=production to Android build in
  build_release.sh (was missing, causing debug features to be enabled
  in production Android builds due to defaultValue: 'staging')
- Remove fat APK recipes (build-android-apk, build-production-apk,
  build-staging-apk, when-apk) — project always uses split APKs
- Remove build-release-apk and build-release-aab aliases — use
  build-split-apk and build-aab directly

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

* chore: restore when-apk recipe pointing to split APK staging build

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-03-07 18:02:56 +01:00
Jeff Gardner ad7dc1d751 Bump build number and remove debug from production iOS build 2026-03-05 17:12:51 -03:00
JeffGandGitHub ffe3e87d16 chore: bump whitenoise-rs to 0.2.1 and prep 2026.3.5 release (#450)
* chore: bump whitenoise-rs to 0.2.1 for 2026.3.5 release

* chore: sync widgetbook lockfile with app version

* fix: export iOS deployment target for Rust iOS build

* chore: align changelog release key with app version

* chore: drop build suffix from changelog release key
2026-03-05 19:38:34 +01:00
Danny MandGitHub 6401a1f05f Optimize Android APK CI: fix staging flag, add caching, faster runner (#429) 2026-03-02 18:23:35 -03:00
Danny MandGitHub d7dfbc1239 Shard CI tests 4-way, fix coverage crash, add Rust tests (#419) 2026-03-02 14:48:19 -03:00
Danny MandGitHub 0c62723df9 fix tests that I broke in the debug PR (#420) 2026-03-02 12:14:44 -03:00
Danny MandGitHub 81dd5815f9 make apk for all prs (#401) 2026-02-28 11:07:25 -03:00
JeffGandGitHub 07a9060e9a Add release builder (#378) 2026-02-23 14:40:17 +01:00
JeffGandGitHub ae203e9d65 Update iOS icons and app name for staging (#330)
* Update iOS icons and app name for staging

* fix(ios): harden build script and correct Release display name

- Add cargo check to environment validation in build_ios.sh
- Add existence check before cd rust to give informative errors
- Replace fragile cd/pod install/cd with pushd/popd and error handling
- Add POSIX-compliant trailing newline to build_ios.sh
- Fix project-level Release APP_DISPLAY_NAME ("White Noise staging" → "White Noise") to match target-level value

* feat(android): add staging flavor launcher icons

Add ic_launcher_foreground, ic_launcher_background, ic_launcher_monochrome,
and legacy ic_launcher PNGs for all densities (mdpi through xxxhdpi) plus
the mipmap-anydpi-v26 adaptive icon XML in the staging source set.

* fix(ios): add CocoaPods availability check to build script

* chore: replace LICENSE copies with symlinks to root

Fixes missing license warnings during iOS builds by ensuring
rust/ and rust_builder/ both symlink to the root LICENSE file.
2026-02-20 19:50:04 +01:00
JeffGandGitHub c3b4a19098 fix: handle app upgrade crashes from incompatible data and foreground service receivers (#312)
* fix: handle app upgrade crashes from incompatible data and foreground service

When upgrading from an older version, multiple issues caused crashes:

1. The Rust whitenoise crate's secrets store format changed, causing
   "Secrets store error: Key not found" during initialization. Since
   the Rust singleton (tokio::sync::OnceCell) can't be reinitialized
   after partial failure, a version marker file now detects stale data
   and wipes the data directory before Rust init runs.

2. The flutter_foreground_task plugin stored foregroundServiceType
   0x201 (dataSync|shortService) in native SharedPreferences, but the
   manifest only declares dataSync (0x01). Android rejected
   startForeground() with IllegalArgumentException. A one-time cleanup
   in MainActivity.onCreate() clears these native prefs.

3. FlutterSecureStorage's internal migration from EncryptedSharedPreferences
   re-introduced the old active_account_pubkey after deleteAll(). Fixed by
   calling readAll() first to trigger the migration, then deleteAll().

4. The plugin's RebootReceiver and RestartReceiver caused cascade crashes
   on package update. Both are now disabled via manifest merge overrides.

* chore: remove stale url_launcher from generated plugin files and add build improvements

Remove url_launcher references from Linux/Windows plugin registrants
(dependency was already removed from pubspec.yaml). Add split APK,
AAB build targets and quiet spinner to OpenSSL build script.
2026-02-19 14:47:51 +01:00
Danny MandGitHub bfa403e21a answer the age old question, when apk (#294) 2026-02-17 22:41:40 +01:00
JeffGandGitHub 415eb0c0cc fix(android): build static OpenSSL for Android and initialize keyring-core (#245)
* fix(android): build static OpenSSL for Android and initialize keyring-core

Android doesn't ship a system libcrypto.so, which SQLCipher (via
libsqlite3-sys) requires. This adds a build script that cross-compiles
OpenSSL as a static library for each Android target (aarch64, armv7,
x86_64) and points the Rust build at those per-target installations.

Also adds the Keyring Kotlin class and initializes the NDK context
in MainActivity so keyring-core can access Android's secure storage.

* fix(android): verify OpenSSL tarball SHA-256 integrity after download

The SHA-256 hash was defined but never checked, and the value itself
was truncated (40 chars, not 64). Replace with the correct hash from
the official release and add verification before extracting.

* fix(android): add pipefail and remove tail pipes in OpenSSL build script

set -e alone does not catch failures in pipeline commands. Adding pipefail
ensures configure/make errors propagate instead of being masked by | tail -3.

* fix(android): detect Apple Silicon NDK path and portable SHA-256 check

The Darwin case now inspects uname -m to set HOST_TAG to darwin-arm64 on
Apple Silicon instead of always using darwin-x86_64.

SHA-256 verification falls back from shasum to sha256sum so the script
works on Linux systems that only ship sha256sum. Both tools use the same
output format (hash followed by filename) so awk '{print $1}' works for
either.
2026-02-12 18:14:58 +01:00
JeffGandGitHub bb33016aff feat(user-search): search by name with improved UX and metadata handling (#234)
* feat(user-search): search by name with improved UX and metadata handling

- Redesign user list tile to match profile switcher pattern (medium avatar,
  middle-ellipsis npub, consistent padding)
- Sort follows: users with metadata alphabetically first, then without
- Periodically refresh follows to pick up background metadata updates
- Batch name search stream updates (300ms) to reduce list jerkiness
- Add loading spinner in search field during active name search
- Sanitize malformed UTF-16 in metadata (surrogate pairs + UTF-8 round-trip)
- Pass metadata to start chat screen for instant display
- Truncate long about text to 10 lines in user profile card

* docs: update changelog with PR #234

* fix: screenutil height unit, improve test specificity and coverage

- Fix SizedBox height in search loading indicator to use .h instead of .w
- Target specific about Text widget in truncation test via content match
- Add tests for stream onDone, onError, and whitespace query edge cases
- Coverage improved from 99.31% to 99.41%

* refactor: remove unreachable else branch in useUserSearch

The isNameQuery check always evaluates true at that point since
_isNameSearch returns true for any non-empty query that isn't a hex
pubkey or partial npub — exactly the cases remaining after the
preceding branches.

* fix: log errors in useUserSearch onError instead of swallowing them
2026-02-12 15:51:51 +01:00
emir yorulmazandGitHub ca65ca7b2f Add OpenSSL vars to build android script (#228) 2026-02-12 00:33:25 +03:00
PepiandGitHub 322207a4a3 Feat/replies (#179)
* feat: add replying to state to chat input hook

* feat: add reply preview type

* feat: get reply preview in user chat messages hook

* feat: add reply preview widget

* feat: add optional reply preview to message bubble

* feat: add on reply callback to message actions screen

* feat: add reply tags support to message service

* feat: add reply support in chat screen

* chore: ignore coverage of reply preview typedef file cause lcov considers 0% because it has no executabel code, but it does have tests

* fix: author metadata fetch and rebuild
2026-02-10 13:27:37 -03:00
JeffGandGitHub d01e480dfa feat(widgets): add WnProfileSwitcherItem component (#188)
* feat(widgets): add WnProfileSwitcherItem component

- Create reusable profile switcher item for switch profile screen
- Use WnAvatarSize.medium (56px) per Figma specs
- Use WnMiddleEllipsisText for npub display with middle truncation
- Add widgetbook showcase with real npub examples
- Refactor SwitchProfileScreen to use new component

Closes #141

* fix: rename sloth package imports to whitenoise and fix l10n validation

- Update wn_profile_switcher_item imports from sloth to whitenoise
- Update test and widgetbook imports from sloth to whitenoise
- Fix validate-locales-keys.sh to use LC_ALL=C for consistent sorting
- Include auto-generated plugin registrant updates

* refactor: compute formatted pubkey once in WnProfileSwitcherItem build

Extract formatPublicKey(npubFromHex(pubkey) ?? pubkey) into a local
final variable to avoid duplicate computation in the build method.
2026-02-06 11:54:47 +01:00
923fadbc4d Add internationalization support with 8 languages (#83)
* Add internationalization support with 8 languages

- Add locale provider with system/manual language selection
- Add ARB translation files for EN, ES, FR, DE, IT, PT, RU, TR
- Localize all 19 screens and 23 widgets
- Add locale-aware date/number/currency formatters
- Add comprehensive locale provider tests (40+ tests)
- Add language selector in app settings
- Include proper ICU plural forms for all languages

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Formatting

* Regenerate flutter_rust_bridge bindings after rebase

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Formatting

* Improve locale persistence and add profile error strings

- Refactor LocaleNotifier to use secure storage for locale preference
- Add profileLoadError and profileSaveError localization strings
- Update tests for new locale provider implementation
- Fix various test issues and remove unused imports

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Improve test coverage and fix CI l10n validation

- Fix CI workflow to use jq for reliable ARB key extraction instead of grep
- Add error handling tests for LocaleProvider storage failures
- Add failure simulation flags to MockWnApi and MockSecureStorage
- Add tests for LocaleFormatters, LocalePersistenceException, and edge cases
- Add UI error handling tests for language update and npub conversion failures

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Improve dropdown scroll UX and fix test reliability

- Add scroll fade indicators to dropdown when options exceed visible items
- Refactor dropdown list into _ScrollableDropdownList widget
- Improve CI l10n validation with better jq error handling
- Remove unused _resolveSystemLanguageCode method
- Fix async test expectations in locale provider tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add atomic locale storage rollback and CI orphaned key detection

- Locale provider now captures previous preference before changes and
  restores it atomically if the rust API call fails
- CI l10n validation now detects extra/orphaned keys in locale files
  (not just missing keys), with improved error messaging
- Added tests for storage rollback behavior on API failure

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Remove unused import

* refactor: move l10n keys validation to scrip folder

* Update spanish localizations

* fix(l10n): improve Spanish key terminology (clave → llave)

Use 'llave' instead of 'clave' for cryptographic keys in Spanish
translations, which is more commonly used in technical contexts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* ci: add pub cache to l10n-validation and locale validation to precommit

- Add Flutter pub cache step to l10n-validation CI job for faster runs
- Add validate-locales-keys to precommit and precommit-check recipes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(ci): use correct github.workspace context in l10n cache

Replace runner.workspace with github.workspace for the pub-cache
path in l10n-validation job. runner.workspace is not a valid
GitHub Actions context.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: josefinalliende <mariajosefinaalliende@gmail.com>
2026-01-27 09:38:01 +01:00
PepiandGitHub 072686e038 Fix/coverage check (#57)
* fix: include files with no tests in coverage calculation

* test: add tests for main.dart
2026-01-20 17:45:01 -03:00
PepiandGitHub 754842417f Feat/auth-and-navigation (#6)
* feat: add auth providers, hooks and services

* feat: add more base components

* feat: add routing and main screens

* chore: add coverage-report just command

* docs: improve readme

* chore: add android buidl scrips from whitenoise repo
2025-12-18 12:36:03 -03:00
josefinalliende 8e3af8099d chore: check coverage 2025-12-09 14:33:38 -03:00