Commit graph

8515 commits

Author SHA1 Message Date
wcjord
ff80981ef6
fix(subscription): remove redundant pangea_user_id from payment_link request (#5856)
The server derives user identity from the Matrix Bearer token already
sent in the Authorization header. The pangea_user_id query param is
ignored server-side and unnecessary.

Co-authored-by: ggurdin <ggurdin@gmail.com>
Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>
2026-03-03 16:50:56 -05:00
ggurdin
0332f4a98d
feat: pull push gateway URL from environment (#5878) 2026-03-03 16:44:18 -05:00
ggurdin
a37bd658fc
feat: join invite-from-knock rooms on launch app via notification, add custom invite reason for invite-on-knock to trigger custom content in background notifications (#5877) 2026-03-03 16:27:19 -05:00
ggurdin
65052de733
add event type localizations (#5873) 2026-03-03 11:21:33 -05:00
ggurdin
c8d6807499
fix: hide example messages with inaccurate tokens data (#5864) 2026-03-02 14:35:31 -05:00
wcjord
38e908c33c
docs: add User Feedback section to toolbar reading assistance instructions (#5839)
* docs: add User Feedback section to toolbar reading assistance instructions

Describes the shared feedback pattern for word cards (existing) and
translations (planned). References #5838.

* feat: allow users to flag translations

* make flag button smaller

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-03-02 13:01:03 -05:00
wcjord
f6d7bfa981
fix(analytics): emit granular IGC/IT use types instead of collapsed ga/ta (#5858)
* fix: emit granular IGC/IT use types instead of collapsed ga/ta

* formatting

* fix linter issues with deprecated use types

* fix: don't add match viewing update to choreo record, don't flatten token IGC uses into a single type

* break vocabAndMorphUses down into smaller functions

* filter viewed choreo steps when getting uses from choreo

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-03-02 12:07:49 -05:00
ggurdin
a370386016
fix: end practice session when complete, even if backup activities still remain in queue (#5860) 2026-03-02 11:54:01 -05:00
ggurdin
93867e1faa
fix: disable activity flag button once activity complete (#5846) 2026-02-27 15:08:22 -05:00
ggurdin
4eca61d216
chore: center hint text in span card (#5845) 2026-02-27 14:53:56 -05:00
ggurdin
72249b4766
fix: don't mark blocked constructs as unused (#5844) 2026-02-27 14:50:17 -05:00
wcjord
6f32aab48b
fix: show "knock accepted" push notification body instead of "You have been invited" (#5823) (#5835)
* fix: show knock-accepted notification body when invite follows a knock (#5823)

When Synapse accepts a knock it sends an m.room.member invite event. The client
was displaying the generic 'You have been invited by X' push notification body
because the invite event alone doesn't carry prev_content on the push path.

Use KnockTracker (already used for auto-join) to detect knock-accepted invites
and show a dedicated 'Your join request was accepted!' notification body instead.

- Add knockAccepted string to intl_en.arb
- Extract condition into isKnockAcceptedInvite() pure util for testability
- Expose KnockTracker.getKnockedRoomIds() publicly (was _getKnockedRoomIds)
- Override notification body in push_helper.dart (background) and
  local_notifications_extension.dart (foreground/web)
- Unit tests for all isKnockAcceptedInvite() branches (9 tests)

* formatting

* fix up pangea comments

* fix: avoid race condition with knocked room account data updates and local push notification content

* translations

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-27 12:29:50 -05:00
ggurdin
9aee84f42c
5832 disable start activity button if user hasnt selected a role (#5833)
* fix: disable activity session start button if not selected role

* chore: always show text 'confirm' on activity session confirm role button
2026-02-26 16:05:36 -05:00
ggurdin
33e54d3457
feat: lazy load activities (#5828)
* feat: lazy load activities

* updates
2026-02-26 15:35:34 -05:00
ggurdin
aa2496dfee
feat: add feedback flag to analytics activities (#5829) 2026-02-26 15:27:23 -05:00
ggurdin
774432ef49
5825 remove unreferenced writing assistance code (#5826)
* chore: delete span details

* remove IT

* fix null check error

* more cleanup
2026-02-26 14:09:45 -05:00
ggurdin
43628427c1
fix: auto-accept invite resulting from knocks on app launch (#5824) 2026-02-26 13:24:34 -05:00
ggurdin
8cb5ab6e8c
chore: give chat event list loading button icons sized dimensions (#5822) 2026-02-26 12:28:05 -05:00
ggurdin
097a8f06c3
fix: add back spacing between activity preview page CTA buttons (#5821) 2026-02-26 12:20:42 -05:00
ggurdin
107cc42294
fix: only assing token composite keys in practice mode (#5818) 2026-02-26 10:54:52 -05:00
ggurdin
1caa74c668
5759 if session filled redirect from choose role (#5815)
* move activity session page bottom section into its own widget

* activity session full mode

* fix loading of activity session preview on open app via course ping
2026-02-26 10:35:24 -05:00
ggurdin
e1b9a21e1c
fix: don't make looping errored requests to chat history (#5814) 2026-02-25 13:29:49 -05:00
ggurdin
d983f26dd5
fix: consider construct ID invalid if lemma is empty (#5813) 2026-02-25 13:18:14 -05:00
wcjord
473ffbaf24
docs: writing assistance redesign design spec (#5655) (#5696)
* "docs: writing assistance redesign design spec (#5655)

Add comprehensive design doc for the WA redesign:
- AssistanceRing replaces StartIGCButton (segmented ring around Pangea icon)
- Background highlights with category colors (not red/orange error tones)
- Simplified match lifecycle: open → viewed → accepted (no ignore)
- Persistent span card with smooth transitions between matches
- Send always available, no gate on unresolved matches

Remove superseded design docs (SPAN_CARD_REDESIGN_FINALIZED.md,
SPAN_CARD_REDESIGN_Q_AND_A.md, choreographer.instructions.md)."

* feat: replace ignored status with viewed status, initial updates to span card

* resolve merge conflicts

* rebuild input bar on active match update to fix span hightlighting

* cleanup

* allow opening span cards for closed matches

* no gate on sending, update underline colors

* animate span card transitions

* initial updates to add segmented IGC progress ring

* update segment colors / opacities based on match statuses

* use same widget for igc loading and fetched

* more segment animation changes

* fix scrolling and wrap in span card

* better disabled color

* close span card on assistance state change

* remove print statements

* update design doc

* cleanup

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-25 13:07:53 -05:00
ggurdin
77559b9838
fix: in public course preview, filter non-joined members from participant count (#5812) 2026-02-25 12:19:19 -05:00
ggurdin
2a17b401ee
chore: pause activity timer while loading activities (#5809) 2026-02-24 16:57:24 -05:00
ggurdin
c4d9a2d2b3
fix: don't hide emoji match for constructs with assigned emojis (#5807) 2026-02-24 16:46:50 -05:00
ggurdin
bd2530ce43
chore: remove text shadow in wallpaper mode (#5805) 2026-02-24 16:26:08 -05:00
ggurdin
6608876ec6
chore: show banned users list in invite page (#5804) 2026-02-24 16:20:04 -05:00
ggurdin
cd596a6b4f
chore: localize error display in device settings view (#5803) 2026-02-24 16:02:42 -05:00
ggurdin
81dbffd031
chore: hide previos error snackbar in settings notifications before showing another one (#5802) 2026-02-24 15:58:27 -05:00
ggurdin
d9eaf58f05
fix: give default text style to error indicator rich text (#5801) 2026-02-24 15:52:48 -05:00
ggurdin
e4bcda57f6
chore: always show error message on course load error (#5800) 2026-02-24 15:34:59 -05:00
ggurdin
fd319aa105
fix: throw exception if no activities can be loaded in analytics practice session (#5799) 2026-02-24 15:28:17 -05:00
Copilot
a754d16fc3
Use consistent share icon across course share button and invite menu (#5797)
* Initial plan

* Use share_outlined icon instead of upload in ShareRoomButton

Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>
2026-02-24 15:03:43 -05:00
ggurdin
caf6c53a0c
chore: replace default synapse error message on knock banned room (#5798) 2026-02-24 15:01:19 -05:00
wcjord
7f1e8f5ea0
feat: client-side knock auto-accept via KnockTracker (#5794)
* feat: client-side knock auto-accept via KnockTracker

Replace server-side AutoAcceptInviteIfKnocked (removed in
synapse-pangea-chat PR #21) with client-side KnockTracker.

- Record knocked room IDs in Matrix account data (org.pangea.knocked_rooms)
- Auto-join when invite arrives for a previously knocked room
- Migrate storage from GetStorage to Matrix account data for
  cross-device sync and reinstall persistence
- Add joining-courses.instructions.md design doc

* formatting

* centralizes calls to knock-storage related functions

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-24 14:44:36 -05:00
Copilot
54a9a9a500
Fix language dropdown appearing above button on Find A Course page (#5788)
* Initial plan

* Fix Find A Course language dropdown search bar going to top of screen

Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>

* Fix dropdown positioning by adding maxHeight to DropdownStyleData

Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>

* chore: replace autofocus

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>
Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-24 14:16:15 -05:00
ggurdin
ecebba63b3
chore: update copy for kicking knocking users (#5795) 2026-02-24 14:09:44 -05:00
ggurdin
8c5b52eb45
chore: hide emoji tab text, make whole search bar clickable (#5790) 2026-02-24 13:39:55 -05:00
ggurdin
91e03f7212
fix: save correct form for emoji uses, match example message tokens by lemma as fallback (#5787) 2026-02-24 13:24:08 -05:00
Kelrap
22c69df097
Use pulsing animation for activity end button (#5770) 2026-02-23 14:08:11 -05:00
ggurdin
acc8283269
chore: only exclude activity chats from bot options update function if showActivityChatUI (#5773) 2026-02-23 14:04:18 -05:00
ggurdin
c1b88c6dbd
fix: centralize activity constructs type in ActivityTypeEnum, skip over invalid morph uses (#5767) 2026-02-23 11:05:07 -05:00
wcjord
859cb78339
feat: fetch languages directly from CMS (#5764)
* feat: fetch languages directly from CMS

- Switch language_repo.dart to fetch from CMS REST API (public, no auth)
- Parse CMS paginated response format (docs[] envelope)
- Rename getLanguages URL to cmsLanguages in urls.dart
- Add 15 unit tests for CMS response parsing
- Add design docs: course-plans, layout instructions

* formatting

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-23 10:21:10 -05:00
ggurdin
117a03089e
5720 vocab practice should have feedback flag (#5761)
* chore: split up analytics activity page widgets into separate files

* started analytics practice refactor

* refactor how UI updates are triggered in analytics practice page

* some fixes
2026-02-20 13:25:21 -05:00
Kelrap
d4884e6215
Make emoji search view look like other emoji picker tabs (#5756) 2026-02-19 10:53:53 -05:00
ggurdin
e933df7e36
chore: update icon color for error indicator (#5757) 2026-02-19 10:51:22 -05:00
ggurdin
c9d70ab5d8
5719 level up issues (#5750)
* fix: ensure accuracy of XP before level to fix offset issue

* chore: remove level-up summaries
2026-02-18 15:45:32 -05:00
ggurdin
13700d9a9a
chore: skip short audio in audio practice (#5749) 2026-02-18 15:10:56 -05:00