tane/apps/app_seeds/lib/ui
vjrj fed0e8200e feat(sharing): make going online opt-in, and show what it unlocks
Tane dialled its four default relays at launch, before anyone had asked
for anything — an F-Droid reviewer spotted it, and they were right. The
seed book needs no network at all, so the app should not have one until
the person joins the sharing side.

- SocialSettings gains a three-state `sharingEnabled`. `null` means
  "never asked", which is what lets `migrateSharingEnabled` keep an
  existing install exactly as it was: anyone past the intro was on a
  build that connected at launch, so they keep messaging, device sync
  and offer alerts. A fresh install starts fully offline.
- bootstrap only starts the shared connection when sharing is on. The
  inbox/sync/plantaré/alert listeners are untouched: they react to a
  session, and none arrives.
- SharingSwitch is the single place that moves the stored choice, the
  live connection and the flag the UI listens to, so they cannot drift.
- Agreeing to the community rules is the opt-in — one consent surface,
  reached from the market or from the drawer's invitation.
- SocialConnection.start is now idempotent and gains stop(), so turning
  sharing off goes offline immediately instead of at the next launch.
- The social drawer entries stay visible but padlocked while sharing is
  off; tapping one explains what wakes up and offers to join. Hiding
  them would have kept the tool a secret. "Coming soon" is gone for
  good — everything it labelled is built.

Covered by tests for the migration in both directions, start/stop
lifecycle, the gate turning sharing on, the invitation, and the drawer
in all three states (no social layer / off / on).
2026-07-25 16:47:56 +02:00
..
about_screen.dart feat(links): surface source repo + Weblate links on site and in app 2026-07-15 19:12:16 +02:00
app_drawer.dart feat(sharing): make going online opt-in, and show what it unlocks 2026-07-25 16:47:56 +02:00
auto_backup_gate.dart feat(backup): add automatic weekly encrypted backups 2026-07-10 10:17:36 +02:00
avatar.dart feat(profile): drop seed-glyph illustrations from the avatar picker 2026-07-12 23:22:20 +02:00
avatar_edit.dart feat(profile): Material default avatar + square photo crop 2026-07-12 23:39:56 +02:00
backup_section.dart feat: cover seedlings (plantón) in copy + legal, backup cadence, server picker 2026-07-15 15:57:23 +02:00
blocked_people.dart feat(social): local blocklist — hide blocked authors' offers, chats and incoming messages, with unblock management 2026-07-13 08:25:49 +02:00
calendar_screen.dart perf(android): R8, bitmap downscaling, edge-to-edge; recover device compat; publish to production 2026-07-20 22:53:48 +02:00
category_palette.dart polish(ux): AA-contrast chip inks, 14-tone palette, calendar month auto-scroll 2026-07-11 06:49:00 +02:00
chat_list_screen.dart feat(social): local blocklist — hide blocked authors' offers, chats and incoming messages, with unblock management 2026-07-13 08:25:49 +02:00
chat_screen.dart feat(plantare): tie the propose form to a real seed 2026-07-15 01:24:50 +02:00
currency_quick_picks.dart feat(offers): asking price on lots, published with sale offers (schema v11) 2026-07-11 08:00:08 +02:00
draft_triage.dart perf(android): R8, bitmap downscaling, edge-to-edge; recover device compat; publish to production 2026-07-20 22:53:48 +02:00
edge_fade.dart fix(ux): make the scroll cue visible — edge scrim + chevron 2026-07-11 07:25:36 +02:00
favorites_screen.dart fix(market): red favorite heart so it pops on the green theme 2026-07-13 17:11:31 +02:00
filter_chips.dart polish(ux): drop the checkmark on selected filter chips 2026-07-11 08:05:57 +02:00
handover_sheet.dart feat(handover): one hand-over sheet replaces the separate sale/plantare doors 2026-07-11 08:00:45 +02:00
harvest_date_picker.dart feat(inventory): photo-first drafts + on-device OCR (digitization R2+R4) 2026-07-09 21:23:46 +02:00
home_screen.dart feat(sharing): make going online opt-in, and show what it unlocks 2026-07-25 16:47:56 +02:00
intro_screen.dart refactor(branding): rename app Tanemaki → Tane 2026-07-12 13:04:16 +02:00
inventory_list_screen.dart perf(inventory): lazy list, photo thumbnails, indexes, debounced reload 2026-07-20 22:53:48 +02:00
label_print_sheet.dart refactor(branding): rename app Tanemaki → Tane 2026-07-12 13:04:16 +02:00
legal_screen.dart feat(legal): in-app Privacy & rules screen with plain-words summaries and links to the full documents 2026-07-13 08:24:59 +02:00
lot_history_sheet.dart feat(app): hint isolation distance when sowing a cross-pollinating crop 2026-07-18 12:31:42 +02:00
market_gate.dart feat(sharing): make going online opt-in, and show what it unlocks 2026-07-25 16:47:56 +02:00
market_offer_detail_screen.dart fix(market): red favorite heart so it pops on the green theme 2026-07-13 17:11:31 +02:00
market_screen.dart feat(sharing): make going online opt-in, and show what it unlocks 2026-07-25 16:47:56 +02:00
market_widgets.dart perf(android): R8, bitmap downscaling, edge-to-edge; recover device compat; publish to production 2026-07-20 22:53:48 +02:00
offline_banner.dart feat(block2): global 'you're offline' banner (network state) 2026-07-10 15:18:16 +02:00
peer_avatar.dart perf(android): R8, bitmap downscaling, edge-to-edge; recover device compat; publish to production 2026-07-20 22:53:48 +02:00
photo_crop.dart feat(profile): Material default avatar + square photo crop 2026-07-12 23:39:56 +02:00
photo_pick.dart perf(android): R8, bitmap downscaling, edge-to-edge; recover device compat; publish to production 2026-07-20 22:53:48 +02:00
plantare_propose_sheet.dart feat(plantare): tie the propose form to a real seed 2026-07-15 01:24:50 +02:00
plantare_sheet.dart feat(plantare): surface product link + dates; spec the bilateral record 2026-07-13 18:06:33 +02:00
plantares_screen.dart feat(plantare): UI — propose from chat, review & sign on the ledger 2026-07-14 11:23:09 +02:00
profile_screen.dart fix(ux): filter clear pinned, no-match text, instant avatar save, market avatar, favourites, WoT drawer 2026-07-12 02:56:08 +02:00
qr_scan.dart perf(android): R8, bitmap downscaling, edge-to-edge; recover device compat; publish to production 2026-07-20 22:53:48 +02:00
qr_view.dart feat(block2): QR of your npub in the profile (scan to share at a fair) 2026-07-10 13:00:47 +02:00
quantity_kind_l10n.dart feat(ui): Material 3 redesign, cover-photo viewer, About screen 2026-07-09 11:51:59 +02:00
quantity_picker.dart feat(ux): usable amounts, colour-coded category/form chips, currency quick-picks 2026-07-11 06:06:04 +02:00
quick_add_sheet.dart perf(android): R8, bitmap downscaling, edge-to-edge; recover device compat; publish to production 2026-07-20 22:53:48 +02:00
rating_sheet.dart feat(ratings): Wallapop-style ratings in chat and offer detail 2026-07-11 13:13:43 +02:00
report_sheet.dart feat(social): standard NIP-56 reporting — ReportTransport in commons_core, report sheet on offers and chats, local hide + optional block 2026-07-13 08:26:38 +02:00
restart_widget.dart feat(identity): switch social identity, all from the one backup 2026-07-10 20:22:24 +02:00
sale_sheet.dart feat(offers): asking price on lots, published with sale offers (schema v11) 2026-07-11 08:00:08 +02:00
sales_screen.dart feat(sales): local sales/purchase ledger (any currency) 2026-07-11 02:33:42 +02:00
saved_searches_screen.dart feat(market): saved searches with in-app alerts (Wallapop-style) 2026-07-17 13:18:29 +02:00
seed_glyph.dart feat(inventory): photo-first drafts + on-device OCR (digitization R2+R4) 2026-07-09 21:23:46 +02:00
settings_screen.dart feat(i18n): complete Portuguese, add Brazilian Portuguese (pt_BR) 2026-07-20 23:11:01 +02:00
sharing_invite_sheet.dart feat(sharing): make going online opt-in, and show what it unlocks 2026-07-25 16:47:56 +02:00
theme.dart feat(i18n): full RTL/CJK support — fonts, Japanese locale, directional fixes 2026-07-14 11:11:19 +02:00
unread_badge.dart fix(web): use red (error color) for unread badge instead of green 2026-07-15 12:45:39 +02:00
variety_detail_screen.dart perf(android): R8, bitmap downscaling, edge-to-edge; recover device compat; publish to production 2026-07-20 22:53:48 +02:00
your_people_screen.dart feat(profile): show other people's avatars in chat, chat list, your people 2026-07-11 22:50:10 +02:00