Commit Graph
1516 Commits
Author SHA1 Message Date
spaced4ndy 3edeb3be02 android, desktop: offer the badge store lane when test products stand in for a store 2026-10-02 15:53:34 +04:00
spaced4ndy 7844706f01 ios, android: title both issuing screens alike, and let the purchase screens be dismissed 2026-10-02 15:22:24 +04:00
spaced4ndy e9fae20118 use dev service 2026-10-02 14:56:09 +04:00
spaced4ndy 5549471f48 ios, android: show the order spinner only after a second, without a backdrop 2026-10-02 14:41:58 +04:00
spaced4ndy 59668a5f44 ios, android: lighten the order summary rows, keeping the values a step bolder 2026-10-02 14:33:35 +04:00
spaced4ndy 8524bcefe5 fix kotlin build 2026-10-02 14:24:41 +04:00
spaced4ndy 62fc897cca ios, android: show the order spinner only while a purchase is issued, and shorten the tier cards 2026-10-02 14:20:26 +04:00
spaced4ndy ba4da8db74 ios, android: lead the badge cards with their price, and set the order card on a grouped background 2026-10-02 14:06:00 +04:00
spaced4ndy e33a06fc32 ios, android: show progress while a badge is bought, and say the payment is complete while it is issued 2026-10-02 13:47:39 +04:00
spaced4ndy a70ab3bac5 ios, android: show the real end date and full price at badge checkout, and disable subscriptions 2026-10-02 13:39:36 +04:00
spaced4ndy bebb8ef094 ios, android: don't promise a purchase that may not exist 2026-10-01 14:24:59 +04:00
spaced4ndy 7473e7a61c android: no badge can be bought where there is no platform store 2026-10-01 14:12:28 +04:00
spaced4ndy 8448bc28b5 ios, android: word purchase errors for a purchase, not a code 2026-10-01 14:12:05 +04:00
spaced4ndy 94675cda8c core, ios, android: rename BadgeStorePurchase to OpenStorePurchase, and drop a dead canBuy clause 2026-10-01 13:57:12 +04:00
spaced4ndy abf775020f core, ios, android: rename BadgeStorePurchase to OpenStorePurchase 2026-10-01 13:56:29 +04:00
spaced4ndy 75e990f120 ios, android: show a pending badge purchase only on the profile that made it, and keep the buyer's alert 2026-10-01 13:46:19 +04:00
spaced4ndy e3e4709381 ui: buy a badge in the app through the App Store or Google Play (#7608)
* ui: buy a badge in the app through the App Store or Google Play

* core, ios, android: create the badge store purchase record before the store charges

* core, ios, android: fixes from the store lane review

* ios, android: show a store purchase's badge only on the profile it was credited to
2026-10-01 08:46:35 +00:00
spaced4ndy 36da024394 ui: buy a badge in the browser, with a deep link back on mobile (#7592) 2026-09-29 10:30:57 +00:00
spaced4ndy c171008229 docs: wireframes and plan for buying a badge in the app; ios, android: align the badge screens (#7572) 2026-09-25 09:59:13 +00:00
EvgenyandEvgeny @ SimpleX Chat 9a9ce70b2f core: fix connecting via prepared connection with contact card (#7575)
* core: fix connecting via prepared connection with contact card

* simplify

* merge transactions

* update query plans

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-24 08:11:29 +01:00
spaced4ndy 0b9ae4d6de ui: open support SimpleX screen from badge and file alerts (#7563) 2026-09-23 09:34:47 +00:00
spaced4ndy fae017d5b3 ui: show close button on badges banner only after it was opened (#7560) 2026-09-22 13:40:56 +00:00
spaced4ndy 150897d637 core, ui: alert the user when badge renewal is failing (#7532) 2026-09-22 12:55:08 +00:00
spaced4ndy a3ac420e91 ui: one banner at a time in chat list (#7554) 2026-09-21 16:51:14 +00:00
spaced4ndy 9a583d394f Merge branch 'stable' 2026-09-21 20:33:31 +04:00
spaced4ndy fd16048598 ui: replace wefunder logo with simplex logo on crowdfunding banner (#7555) 2026-09-21 16:28:58 +00:00
spaced4ndy 45d674c067 Merge branch 'stable' 2026-09-21 18:17:36 +04:00
spaced4ndy 7e24ecb982 ui: add wefunder logo to crowdfunding banner (#7553) 2026-09-21 14:16:38 +00:00
spaced4ndy f68bccecfb Merge branch 'stable' 2026-09-21 17:31:29 +04:00
spaced4ndy c8c05359b5 ui: crowdfunding banner on onboarding and in chat list (#7552) 2026-09-21 12:01:57 +00:00
SimpleX Chat 3326f9db2a 7.1-beta.4: android 379, desktop 162, ios 357 2026-09-19 14:25:57 +00:00
EvgenyandEvgeny @ SimpleX Chat 0183a36058 ui: update text about badges (#7544)
* ui: update text about badges

* update

* update

* update

* update

* update

* update

* update kotlin

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-19 14:16:39 +01:00
Evgeny Poberezkin 25c5b3cdfd Merge branch 'stable' 2026-09-19 12:21:53 +01:00
Narasimha-scandEvgeny Poberezkin ecb9d87157 android, desktop: fix Submit button not visible in passcode view in split screen (#7497)
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-09-19 10:13:52 +01:00
Narasimha-sc 463761cc8e ui: use backward compatible Java api in stripFormattedTextLink (#7464) 2026-09-19 08:31:52 +01:00
Narasimha-sc 6f85f1d4f0 android, desktop: offer key verification when member profile is opened from chat (#7486)
In channels members are usually connected via relays, so they are memberCurrent
but not memberActive, and #7255 widened the condition for requesting the member
security code to cover them. It updated GroupChatInfoView and
MemberSupportChatView, but not the same code in ChatView, so "Verify security
code" is not offered when the profile is opened by tapping member avatar in the
chat, while it is offered for the same member in the members list.
2026-09-19 08:13:05 +01:00
spaced4ndy c7b3e362ec core, ui: badge credential details in developer tools (#7527) 2026-09-17 16:18:04 +00:00
spaced4ndy 746d33ff6d multiplatform: remove unused strings (#7529) 2026-09-17 15:12:14 +00:00
spaced4ndy dd5c47d02d ui: "how it works" link and card styling on badge screen (#7524) 2026-09-16 15:13:01 +00:00
spaced4ndy c52044f3c3 ui: show progress spinner on redeeming code (#7523) 2026-09-16 14:43:28 +00:00
spaced4ndy f38c7e0f2b core, ui: badge redeem errors and fixes (#7515)
- redeem errors are typed (CEBadgeRedeemError) instead of matched by text in the apps
- service timeout (A_SERVICE) decodes in the apps and offers Retry via the existing retry alert
- unexpected redeem errors show the error itself instead of a generic message
- service error codes are a typed enum in the apps (BadgeServiceErrorCode)
- CRBadgeRedeemed returns badge state, so the apps skip a second round-trip after redeem
- setBadgeAlertAcked is scoped to user_id
- badgeChanged updates non-active profiles, so other profiles' badges don't go stale
- pitch banner is not shown to a profile that already has a badge
- one badgeTypeName per platform, used by the badge screen and the badge info alert
- BadgeAlertKind and BadgeAlertPrice decode via standard JSON, no custom decoders
- dead "Support ended" title branch removed from Your Badge view
- kotlin: users from badge responses carry remoteHostId
- kotlin: redeem code field keeps the IME's cursor and composition state
- kotlin: "Get your code" shown in all flavours
- kotlin: "Don't show again" -> "Dismiss", matching iOS
- kotlin: parseBadgeCode moved next to its FFI in platform/Core.kt
- kotlin: BadgesView no longer cross-fades on badge state updates
- kotlin: section title not uppercased
- ios: redeem code field parses once per change
- ios: A_SERVICE rejected reason is not decoded
- CLI: "cannot redeem badge code: ..." with the source of the error
- comments clarified
2026-09-16 14:15:11 +00:00
SimpleX Chat 172c6d9ca3 7.1-beta.3: android 378, desktop 161, ios 356 2026-09-15 16:59:06 +00:00
spaced4ndy b0a7219db2 android: show "Get your code" button in all app flavours (#7514) 2026-09-15 15:32:10 +00:00
spaced4ndy 6a7eae2751 ui: redeem code (#7482) 2026-09-15 14:23:13 +00:00
spaced4ndy bac8d187ba Merge branch 'master' into badges 2026-09-14 17:13:58 +04:00
EvgenyandEvgeny @ SimpleX Chat 5ffbe733a8 core: attach badge proofs to files over size limit (#7455)
* core: attach badge proofs to files over size limit

* types

* more types

* implement file badge proofs

* tests

* move file limits to config, add tests

* more tests, work correctly in "send as group" case

* fix races in tests

* group badge tests

* query plans

* add history support, fixes

* simplify

* refactor

* refactor

* type

* restructure schema for proofs

* rename, refactor

* refactor

* fix, refactor

* refactor

* ui

* comments

* alerts

* update nix, ios library

* updare sharing

* update simplexmq

* update text

* improve messages

* api types

* postgres schema

* fix

* test

* query plans

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-12 14:33:52 +01:00
spaced4ndy db4b73962d Merge branch 'master' into badges 2026-09-10 13:23:28 +04:00
Narasimha-sc 6e3c668fb9 ios, android, desktop: do not add loaded items of another chat to the opened chat (#7450)
* ios, android, desktop: do not add loaded items of another chat to the opened chat

apiLoadMessages could apply a loaded page to a chat it was not loaded for,
mixing messages of two chats in one list:

- the chat id was not checked at all for .last pagination, and the loading
  coroutine is not cancelled when the chat is closed (PreloadItems wraps it
  into NonCancellable, apiFindMessages runs in a scope of its own), so a .last
  page loaded for the previously opened chat was appended to the items of the
  chat opened while it was loading;
- for the other paginations the chat id was checked before the items were
  loaded, but they are applied on the main thread after a dispatch, so the chat
  could be switched in between.

Check the chat id (and the remote host id in kotlin) right before the items are
applied, in every pagination except .initial and opening around item that set
chat id themselves. Empty chatItems remain allowed for .last that is used for
searching.

* android, desktop: test that loaded items of another chat are not added to the opened chat

Reproduces the bug deterministically, without depending on the timing of the
race: processLoadedChat is called with a page loaded for another chat while the
opened chat has its own items.

Without the fix the items of the two chats end up in one list:

    lastPageLoadedForAnotherChatIsNotAddedToOpenedChat
      expected:<[101, 102]> but was:<[101, 102, 201, 202]>
    beforePageLoadedForAnotherChatIsNotAddedToOpenedChat
      expected:<[101, 102]> but was:<[201, 202, 101, 102]>
    aroundPageLoadedForAnotherChatIsNotAddedToOpenedChat
      expected:<[101, 102]> but was:<[101, 102, 201, 202]>
2026-09-05 15:28:00 +01:00
SimpleX Chat 3d5e85b180 7.1-beta.2: android 377, desktop 160, ios 352 2026-09-02 15:18:18 +00:00
SimpleX Chat 4df04bdb3f 7.0.2: android 375, desktop 159, ios 351 2026-09-02 12:22:31 +00:00