spaced4ndy
c53f560e2d
presentUnfinished comment
2026-10-02 18:42:00 +04:00
spaced4ndy
db8755ec8d
ios: let the purchase state screen scroll, so Dismiss stays reachable at large text sizes
2026-10-02 18:32:51 +04:00
spaced4ndy
e80e885aac
ios, android: catch a failed purchase presentation, word store purchase errors, and sweep abandoned purchases on a profile switch
2026-10-02 18:28:12 +04:00
spaced4ndy
c74e313d02
android: close the badge purchase screens in one step; ios, android: drop the order screen spinner
2026-10-02 17:22:52 +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
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
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
Evgeny and Evgeny @ 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
Evgeny and Evgeny @ 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
spaced4ndy
c7b3e362ec
core, ui: badge credential details in developer tools ( #7527 )
2026-09-17 16:18:04 +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
56ced9bfea
Merge branch 'master' into badges
2026-09-15 18:26:13 +04:00
spaced4ndy
6a7eae2751
ui: redeem code ( #7482 )
2026-09-15 14:23:13 +00:00
SimpleX Chat
cd4225869d
ios 355
2026-09-15 12:06:36 +00:00
spaced4ndy
bac8d187ba
Merge branch 'master' into badges
2026-09-14 17:13:58 +04:00
Evgeny and Evgeny @ 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
spaced4ndy
c623f4284c
Merge branch 'master' into badges
2026-09-02 13:53:35 +04:00
+6
dacbcb00e5
ui: translations ( #7446 )
...
* Translated using Weblate (Italian)
Currently translated at 100.0% (2904 of 2904 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/
* Translated using Weblate (Italian)
Currently translated at 100.0% (2501 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.9% (2903 of 2904 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (2904 of 2904 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt_BR/
* Translated using Weblate (Slovak)
Currently translated at 29.6% (862 of 2904 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/sk/
* Translated using Weblate (German)
Currently translated at 100.0% (2904 of 2904 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2501 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (French)
Currently translated at 93.5% (2717 of 2904 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2501 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (Arabic)
Currently translated at 100.0% (2904 of 2904 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2904 of 2904 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2501 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/
* Translated using Weblate (Slovak)
Currently translated at 31.6% (918 of 2904 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/sk/
* Translated using Weblate (German)
Currently translated at 100.0% (2905 of 2905 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/
* Translated using Weblate (Italian)
Currently translated at 100.0% (2905 of 2905 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.9% (2904 of 2905 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/
* Translated using Weblate (Slovak)
Currently translated at 31.7% (921 of 2905 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/sk/
* Update translation files
Updated by "Remove blank strings" hook in Weblate.
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2905 of 2905 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2501 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Slovak)
Currently translated at 33.0% (960 of 2905 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/sk/
* Update translation files
Updated by "Remove blank strings" hook in Weblate.
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2905 of 2905 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/
* Translated using Weblate (French)
Currently translated at 97.0% (2827 of 2912 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2501 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (Arabic)
Currently translated at 100.0% (2912 of 2912 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/
* Translated using Weblate (Slovak)
Currently translated at 34.4% (1003 of 2912 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/sk/
* Translated using Weblate (French)
Currently translated at 100.0% (2912 of 2912 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2501 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (Czech)
Currently translated at 93.4% (2722 of 2912 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2912 of 2912 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2501 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/
* Translated using Weblate (Slovak)
Currently translated at 36.1% (1053 of 2912 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/sk/
* Update translation files
Updated by "Remove blank strings" hook in Weblate.
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/
* Translated using Weblate (Italian)
Currently translated at 100.0% (2917 of 2917 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.9% (2916 of 2917 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/
* Translated using Weblate (Slovak)
Currently translated at 36.6% (1068 of 2917 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/sk/
* Update translation files
Updated by "Remove blank strings" hook in Weblate.
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/
* Added translation using Weblate (Azerbaijani)
* Added translation using Weblate (Azerbaijani)
* Translated using Weblate (German)
Currently translated at 100.0% (2917 of 2917 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/
* Translated using Weblate (French)
Currently translated at 100.0% (2917 of 2917 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2917 of 2917 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2917 of 2917 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2501 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/
* Translated using Weblate (Slovak)
Currently translated at 37.4% (1091 of 2917 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/sk/
* Translated using Weblate (Azerbaijani)
Currently translated at 31.5% (789 of 2501 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/az/
* Translated using Weblate (Slovak)
Currently translated at 37.5% (1094 of 2917 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/sk/
* ui: process translations
* ui: fix translation errors found in review (de, es, fr, hu)
de: "you removed %1$s" was translated as an agentless passive
("%1$s wurde aus der Gruppe entfernt"), so your own removal of a member
rendered identically to a removal by someone else. The UI prepends the
member name only for rcv group events, so snd events must name the actor
themselves, as every other snd_group_event_* string does
("Sie haben %s blockiert", "Sie haben dieses Mitglied angenommen").
fr: "Unblock members for all?" was translated as "Débloquer tous les
membres ?" ("unblock ALL members"), dropping the for-all moderation scope
and mis-stating the target set. Aligned with its sibling
block_members_for_all_question ("Bloquer ces membres pour tous ?").
fr: member_info_status was left untranslated as "Status"; the file uses
"Statut" for the other InfoRow status labels.
fr: restore_passphrase_can_not_be_read_desc called the Keystore
"coffre-fort" while its near-identical sibling
restore_passphrase_can_not_be_read_enter_manually_desc called it
"Keystore".
es: "registar" -> "registrar".
hu: "[kapcsolattal] (https://...)" had a space between ] and (, so the
transport-isolation link did not render as a markdown link on iOS.
---------
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org >
Co-authored-by: Hosted Weblate user 54392 <hamburger2048@users.noreply.hosted.weblate.org >
Co-authored-by: SanctumSaturn <oraculogithub@gmail.com >
Co-authored-by: Martin Kozempel <rado2012mir@gmail.com >
Co-authored-by: mlanp <github@lang.xyz >
Co-authored-by: Ranakan <ranakan.dev@protonmail.ch >
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org >
Co-authored-by: summoner001 <summoner@disroot.org >
Co-authored-by: Hosted Weblate <hosted@weblate.org >
Co-authored-by: No name <usir.alerts@onionmail.org >
Co-authored-by: Pablo <pyg@duck.com >
Co-authored-by: Evgeny Poberezkin <e.poberezkin@me.com >
Co-authored-by: Weblate <noreply@weblate.org >
Co-authored-by: Mireli5656 <miraliseyidli5656@gmail.com >
Co-authored-by: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com >
2026-09-02 10:26:52 +01:00
Evgeny and Evgeny @ SimpleX Chat
735662902f
core, ui: make badge expiration non-optional ( #7445 )
...
* core, ui: make badge expiration non-optional
* update
* update bot types
* fix to use non-optional badge expiry
---------
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com >
2026-09-02 08:14:09 +01:00