Skip to content
Closed

Dev #1703

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
260 commits
Select commit Hold shift + click to select a range
e36adc8
UI and logic updates
ThomasSession Oct 1, 2025
8e50b6e
Bump daggerHiltVersion from 2.57.1 to 2.57.2 (#1564)
dependabot[bot] Oct 1, 2025
3b72306
[Automated] Update translations from Crowdin
ThomasSession Oct 2, 2025
e5b127e
Merge pull request #1569 from session-foundation/feature/update-crowd…
ThomasSession Oct 2, 2025
07270d0
Merge branch 'dev' into feature/pro-settings-pt3
ThomasSession Oct 2, 2025
524623a
Cancel screen
ThomasSession Oct 2, 2025
f771b62
Model restructure
ThomasSession Oct 2, 2025
f82d5cc
Better model to cater for nono valid subscription on originating plat…
ThomasSession Oct 2, 2025
774ed3c
SES-4649 : Continue button is not visible with increased font size wh…
jbsession Oct 2, 2025
96dd508
[Automated] Update translations from Crowdin
ThomasSession Oct 3, 2025
b503765
Merge pull request #1572 from session-foundation/feature/update-crowd…
ThomasSession Oct 3, 2025
dfa7232
Merge branch 'dev' into feature/pro-settings-pt3
ThomasSession Oct 3, 2025
3132f10
More states handling
ThomasSession Oct 3, 2025
4c1c34f
[Automated] Update translations from Crowdin
ThomasSession Oct 3, 2025
541c6bb
Reworked state
ThomasSession Oct 3, 2025
04ea746
Removed loader and error in settings screen
ThomasSession Oct 3, 2025
c4ca5e0
Merge pull request #1575 from session-foundation/feature/update-crowd…
ThomasSession Oct 3, 2025
b24e080
Merge branch 'dev' into feature/pro-settings-pt3
ThomasSession Oct 3, 2025
9471ad3
[Automated] Update translations from Crowdin
ThomasSession Oct 3, 2025
10b2666
Merge pull request #1576 from session-foundation/feature/update-crowd…
ThomasSession Oct 5, 2025
2e8623b
Merge branch 'dev' into feature/pro-settings-pt3
ThomasSession Oct 5, 2025
37270ea
Updated string key
ThomasSession Oct 5, 2025
1ece254
SES-4622 : Opening a Notification can scroll conversation to top [Cr…
jbsession Oct 5, 2025
12e6a69
Loading and error state for renew
ThomasSession Oct 5, 2025
e49aaf3
Pro Stats loading state
ThomasSession Oct 6, 2025
9b40a76
SES-4643
ThomasSession Oct 6, 2025
bfee1f4
Merge remote-tracking branch 'origin/dev' into merge-1.28.1
SessionHero01 Oct 6, 2025
b7de585
Merge pull request #1578 from session-foundation/merge-1.28.1
SessionHero01 Oct 6, 2025
a9258f4
UI and logic updates from the PRD
ThomasSession Oct 6, 2025
8a4076b
Clean up
ThomasSession Oct 6, 2025
56bed39
Specific text for expired loading and error states
ThomasSession Oct 6, 2025
a988ec7
Simplified Pro CTA logic
ThomasSession Oct 7, 2025
9de8f2f
[Automated] Update translations from Crowdin
mpretty-cyro Oct 7, 2025
2ca5a34
Pro Settings CTA
ThomasSession Oct 7, 2025
d183c48
Logic for the Pro Seettings CTA - no display logic yet
ThomasSession Oct 7, 2025
ba7d69d
Merge pull request #1582 from session-foundation/feature/update-crowd…
ThomasSession Oct 7, 2025
38795f3
Merge branch 'dev' into feature/pro-settings-pt3
ThomasSession Oct 7, 2025
a5b347f
Display rules for PRO CTA
ThomasSession Oct 7, 2025
f98674b
PR feedback
ThomasSession Oct 7, 2025
ea8710d
Bump org.assertj:assertj-core from 3.27.4 to 3.27.6 (#1579)
dependabot[bot] Oct 7, 2025
a4390de
Merge branch 'dev' into feature/pro-settings-pt3
ThomasSession Oct 7, 2025
94cdd95
[Automated] Update translations from Crowdin
mpretty-cyro Oct 8, 2025
9f61ef3
Merge pull request #1583 from session-foundation/feature/pro-settings…
ThomasSession Oct 8, 2025
2561a85
Merge branch 'dev' into feature/update-crowdin-translations
ThomasSession Oct 8, 2025
0662f25
Merge pull request #1586 from session-foundation/feature/update-crowd…
ThomasSession Oct 8, 2025
17404c4
Bump androidx.navigation:navigation-compose from 2.9.4 to 2.9.5 (#1561)
dependabot[bot] Oct 8, 2025
ad51be0
Bump com.google.protobuf:protoc from 4.31.1 to 4.32.1 (#1581)
dependabot[bot] Oct 8, 2025
c1140f4
Bump com.google.devtools.ksp from 2.2.10-2.0.2 to 2.2.20-2.0.3 (#1563)
dependabot[bot] Oct 8, 2025
b97760f
Merge branch 'dev' into release/1.28.1
SessionHero01 Oct 9, 2025
79bb80d
Merge pull request #1584 from session-foundation/release/1.28.1
SessionHero01 Oct 9, 2025
20bacce
[Automated] Update translations from Crowdin
mpretty-cyro Oct 13, 2025
b18675d
Merge pull request #1593 from session-foundation/feature/update-crowd…
ThomasSession Oct 13, 2025
7b49aae
Bump androidx.test:orchestrator from 1.5.1 to 1.6.1 (#1603)
dependabot[bot] Oct 13, 2025
479a281
Bump com.autonomousapps.dependency-analysis from 2.17.0 to 3.1.0 (#1601)
dependabot[bot] Oct 13, 2025
83fadf0
SES-4665 : Remove screenshot notification (#1599)
jbsession Oct 14, 2025
6a68927
SES-4672 : Changes to Mute/Camera buttons icon during calls (#1600)
jbsession Oct 14, 2025
259f8a7
[Automated] Update translations from Crowdin
ThomasSession Oct 15, 2025
0de2f3a
[Automated] Update translations from Crowdin
ThomasSession Oct 15, 2025
80aa5cc
Changed strings keys
ThomasSession Oct 15, 2025
d7e929f
Merge branch 'release/1.28.2' into merge/1.28.2
ThomasSession Oct 15, 2025
3042258
Merge branch 'feature/update-crowdin-translations' into fix/string-keys
ThomasSession Oct 15, 2025
36c46c1
Merge pull request #1609 from session-foundation/merge/1.28.2
ThomasSession Oct 15, 2025
bb0b81c
Merge branch 'dev' into fix/string-keys
ThomasSession Oct 15, 2025
ae7d1f6
Fixing up new string keys
ThomasSession Oct 15, 2025
8d219d9
Fixing strings with new keys
ThomasSession Oct 15, 2025
abcaafb
New debug drop down to force the pro status (normal, always loading, …
ThomasSession Oct 15, 2025
d228ec8
Merge pull request #1610 from session-foundation/fix/string-keys
ThomasSession Oct 16, 2025
33df2da
Merge branch 'release/1.28.2' into merge/1.28.2-pt2
ThomasSession Oct 20, 2025
ec10b61
Merge branch 'release/1.28.2' into merge/1.28.2-pt2
ThomasSession Oct 20, 2025
85a150c
Merge pull request #1615 from session-foundation/merge/1.28.2-pt2
ThomasSession Oct 20, 2025
ed6299e
[Automated] Update translations from Crowdin
ThomasSession Oct 20, 2025
37bce37
Merge pull request #1614 from session-foundation/feature/update-crowd…
ThomasSession Oct 20, 2025
80e8cc0
Non pro user screens: no billing choose plan
ThomasSession Oct 20, 2025
e29b6fe
[Automated] Update translations from Crowdin
ThomasSession Oct 20, 2025
2a51089
Merge pull request #1617 from session-foundation/feature/update-crowd…
ThomasSession Oct 20, 2025
6a73d53
Merge branch 'dev' into feature/ses-4734-non-pro-settings
ThomasSession Oct 20, 2025
ee13de1
Sorting out the Non-Pro screens for the Pro Settings screen
ThomasSession Oct 20, 2025
c729392
"No Billing" debug switch
ThomasSession Oct 20, 2025
7764f58
Merge pull request #1621 from session-foundation/feature/ses-4734-non…
ThomasSession Oct 20, 2025
f0a3bb4
[Automated] Update translations from Crowdin
Aerilym Oct 21, 2025
bee1a1b
Fixing string keys
ThomasSession Oct 21, 2025
a627f94
Merge pull request #1622 from session-foundation/feature/update-crowd…
ThomasSession Oct 21, 2025
ae03291
Merge branch 'dev' into fix/string-keys-pt2
ThomasSession Oct 21, 2025
1a89b6c
Bump uiTestJunit4Version from 1.9.2 to 1.9.3 (#1618)
dependabot[bot] Oct 21, 2025
8262f77
Merge branch 'dev' into fix/string-keys-pt2
ThomasSession Oct 21, 2025
43f9b4c
Merge pull request #1624 from session-foundation/fix/string-keys-pt2
ThomasSession Oct 21, 2025
1bd5715
Fixed up DisappearingMessages screen
ThomasSession Oct 22, 2025
8afec55
Fixing the navhost back handling
ThomasSession Oct 22, 2025
f66cf27
Proper UI display in sheet mode for pro settings
ThomasSession Oct 22, 2025
284f0d8
QA feedback from Pro Settings UI
ThomasSession Oct 22, 2025
bb71937
Forced Pro Expired is not Pro
ThomasSession Oct 22, 2025
0f219c5
Non-Pro loading and error states
ThomasSession Oct 22, 2025
1c87205
Added more cases to help QA + proper delay from the UI
ThomasSession Oct 22, 2025
19c6267
Making sure the content is clickable
ThomasSession Oct 22, 2025
d2513b8
Merge pull request #1626 from session-foundation/feature/pro-settings…
ThomasSession Oct 22, 2025
eaf6f98
Updated to the latest BOM
ThomasSession Oct 23, 2025
7284f8c
SES-4767 - zoom handling in QR code scanning
ThomasSession Oct 23, 2025
b318c9f
SES-4768 - moderators can "delete for everyone" in a community
ThomasSession Oct 23, 2025
657928c
SES-2740 - Do not show indicators from others when the toggle is off
ThomasSession Oct 23, 2025
5df0d79
Added a typing indicatorin the preference setting
ThomasSession Oct 23, 2025
2da5c43
bumping code for dev
ThomasSession Oct 23, 2025
f733aef
Making the pro setting app bar react to scroll by making its bg opaque
ThomasSession Oct 23, 2025
b93c312
Fixing up the activity observer
ThomasSession Oct 23, 2025
9c79853
SES - 4683 : UI Artifact When Opening New Conversation (#1628)
jbsession Oct 23, 2025
ab2d7b2
Only listen to the state within the lifecycle
ThomasSession Oct 23, 2025
2d2862b
Mark CTA as seen on dismiss
ThomasSession Oct 23, 2025
5329d43
Merge branch 'dev' into feature/bom-2025-10-01
ThomasSession Oct 24, 2025
0b62a36
Merge pull request #1630 from session-foundation/feature/bom-2025-10-01
ThomasSession Oct 24, 2025
08dcc04
Loading state in choose plan + store data handling
ThomasSession Oct 27, 2025
fd22a95
Adding a canceled state which is neither an error nor a success in te…
ThomasSession Oct 27, 2025
894cefa
Fixing loading and error diaogs for never-subscribed
ThomasSession Oct 27, 2025
fa28482
Adding missing states in the confirmation screen
ThomasSession Oct 27, 2025
57bf456
Clean up
ThomasSession Oct 27, 2025
39ed27c
Proper calculation of the quick refund window
ThomasSession Oct 27, 2025
bffd6cc
Adding back temp suffix removal
ThomasSession Oct 27, 2025
c161e12
Clean up
ThomasSession Oct 27, 2025
05b0294
Merge branch 'dev' into feature/play-billing
ThomasSession Oct 27, 2025
f95ef22
Update app/src/main/java/org/thoughtcrime/securesms/preferences/prose…
ThomasSession Oct 27, 2025
4095faf
Change the loading style to a nicer UI
ThomasSession Oct 27, 2025
96627a1
Merge branch 'feature/play-billing' of https://github.com/session-fou…
ThomasSession Oct 27, 2025
139c1db
Merge pull request #1641 from session-foundation/feature/play-billing
ThomasSession Oct 27, 2025
ec660d1
Making sure we do not show the loader if the purchase fails right away
ThomasSession Oct 27, 2025
32b457f
UI Update to match designs
ThomasSession Oct 28, 2025
551429c
Merge remote-tracking branch 'origin/dev' into release/1.28.2
SessionHero01 Oct 28, 2025
7874ffa
Merge pull request #1645 from session-foundation/release/1.28.2
SessionHero01 Oct 28, 2025
58e6f0c
Bump com.google.devtools.ksp from 2.2.20-2.0.4 to 2.3.0 (#1644)
dependabot[bot] Oct 28, 2025
959d9bf
Merge remote-tracking branch 'origin/release/1.29.0' into merge-1.29.0
SessionHero01 Oct 28, 2025
d021311
Merge remote-tracking branch 'origin/dev' into merge-1.29.0
SessionHero01 Oct 28, 2025
13e3453
Bump com.google.gms.google-services from 4.4.3 to 4.4.4 (#1620)
dependabot[bot] Oct 28, 2025
adeddde
Bump cameraCamera2Version from 1.5.0 to 1.5.1 (#1619)
dependabot[bot] Oct 28, 2025
79bd64e
Merge branch 'dev' into merge-1.29.0
SessionHero01 Oct 28, 2025
939f331
Merge pull request #1647 from session-foundation/merge-1.29.0
SessionHero01 Oct 28, 2025
e7a2c1b
More state and UI handling to match designs
ThomasSession Oct 28, 2025
0f5a606
Merge branch 'dev' into feature/more-pro-states
ThomasSession Oct 28, 2025
3d8fb83
Bump actions/upload-artifact from 4 to 5 (#1642)
dependabot[bot] Oct 28, 2025
d07e44f
[Automated] Update translations from Crowdin (#1638)
stfsession Oct 28, 2025
9fc05e7
Merge branch 'dev' into feature/more-pro-states
ThomasSession Oct 29, 2025
be0d710
giving subscription state to CTA to display dynamic content
ThomasSession Oct 29, 2025
7cbfb56
SES-4753 : [Collapsible Footer Action] Manage Members and admins (#…
jbsession Oct 29, 2025
9a594d6
Merge branch 'dev' into feature/more-pro-states
ThomasSession Oct 30, 2025
054e01e
Rely on subscription state instead of simple boolean for Pro status
ThomasSession Oct 30, 2025
fa92657
Renaming subscription methods in preparation for price calculation
ThomasSession Oct 30, 2025
150ca71
Added State management to the choose plan and cancel data
ThomasSession Oct 30, 2025
760a693
New debug toggle for quick refunds
ThomasSession Oct 30, 2025
63c3d0c
Making sure refund also handle its data within a State
ThomasSession Oct 31, 2025
e6134d7
Adding price calculation and formatting
ThomasSession Oct 31, 2025
556cbd1
Formatting total to match
ThomasSession Oct 31, 2025
8d9e34f
Do not apply debug setting if we are not forcing the user as pro
ThomasSession Oct 31, 2025
85ada7d
Fixing old component to use crossfade for better transition
ThomasSession Oct 31, 2025
bb5fc1d
SES-4753 - New message sheet string changes (#1652)
jbsession Nov 2, 2025
0e3a987
Removing suffix for QA + PR feedback
ThomasSession Nov 3, 2025
2e77128
PR feedback
ThomasSession Nov 3, 2025
61c05e5
Merge branch 'dev' into feature/more-pro-states
ThomasSession Nov 3, 2025
486f0ed
[Automated] Update translations from Crowdin
mpretty-cyro Nov 3, 2025
12515ad
Merge pull request #1651 from session-foundation/feature/more-pro-states
ThomasSession Nov 3, 2025
fcf2f11
Merge remote-tracking branch 'origin/release/1.29.0' into merge-1.29.0
SessionHero01 Nov 3, 2025
8b1fde8
Bring 1.29.0 to dev (#1657)
SessionHero01 Nov 3, 2025
44902c7
Merge branch 'dev' into feature/update-crowdin-translations
ThomasSession Nov 3, 2025
b874898
Merge branch 'feature/update-crowdin-translations' of https://github.…
ThomasSession Nov 3, 2025
bc2d64d
Merge pull request #1656 from session-foundation/feature/update-crowd…
ThomasSession Nov 3, 2025
996eb1c
Bump org.mockito.kotlin:mockito-kotlin from 6.0.0 to 6.1.0 (#1658)
dependabot[bot] Nov 4, 2025
5059de9
Bump uiTestJunit4Version from 1.9.3 to 1.9.4 (#1660)
dependabot[bot] Nov 4, 2025
21e4969
Fixed button sizing issue due to crossfade
ThomasSession Nov 5, 2025
cb5d151
Merge branch 'dev' into fix/crossfade-button
ThomasSession Nov 5, 2025
0f3c475
Merge pull request #1662 from session-foundation/fix/crossfade-button
ThomasSession Nov 5, 2025
f23df6d
Merge remote-tracking branch 'origin/dev' into merge-1.29.0
SessionHero01 Nov 5, 2025
aebdf19
Bump com.squareup.okhttp3:okhttp from 5.1.0 to 5.3.0 (#1659)
dependabot[bot] Nov 5, 2025
b5c2136
Merge branch 'dev' into merge-1.29.0
SessionHero01 Nov 5, 2025
57d4db1
Making the base subscriptionManager an abstract class to share core l…
ThomasSession Nov 6, 2025
58bcc58
Bring 1.29.0 to dev (#1664)
SessionHero01 Nov 6, 2025
6fdb9ad
Initial draft of the debug logger
ThomasSession Nov 6, 2025
17655c8
Added extra features: clear, copy all, long press copy row
ThomasSession Nov 6, 2025
b0fb60f
Fixing up toasts
ThomasSession Nov 6, 2025
2a815aa
PR Feedback: Limiting log creation - only on subscribe now
ThomasSession Nov 7, 2025
dbb7ef1
Making use of our existing Logging structure
ThomasSession Nov 7, 2025
442e4aa
PR feedback
ThomasSession Nov 7, 2025
e121174
Added logging
ThomasSession Nov 7, 2025
cc108e9
Undoing gradle change
ThomasSession Nov 7, 2025
d883ede
Local time formatting in compose - fine for debug screen
ThomasSession Nov 7, 2025
96dfc58
Merge branch 'dev' into feature/debug-logger
ThomasSession Nov 7, 2025
f1eba16
Merge pull request #1667 from session-foundation/feature/debug-logger
ThomasSession Nov 7, 2025
addd693
Merge branch 'dev' into feature/pro-logic
ThomasSession Nov 7, 2025
2f9cc9c
[Automated] Update translations from Crowdin
mpretty-cyro Nov 10, 2025
e051110
Merge pull request #1669 from session-foundation/feature/update-crowd…
ThomasSession Nov 10, 2025
f963a88
Merge branch 'dev' into feature/pro-logic
ThomasSession Nov 10, 2025
4187742
New strings
ThomasSession Nov 10, 2025
09050b4
Merge pull request #1668 from session-foundation/integrate-session-pro
SessionHero01 Nov 10, 2025
361d7ff
Fix contacts being created incorrectly on group threads
SessionHero01 Nov 10, 2025
a872dad
Fix contacts being created incorrectly on group threads (for legacy r…
SessionHero01 Nov 10, 2025
e390d11
Merge pull request #1670 from session-foundation/fix-contact-created-…
SessionHero01 Nov 10, 2025
bbf47a2
Properly handling back and "forward" actions in the Pro confirmation …
ThomasSession Nov 10, 2025
25bad28
Removed temp code
ThomasSession Nov 10, 2025
019f6be
Blinded request message parsing and processing
SessionHero01 Nov 10, 2025
e820144
Merge branch 'dev' into add-blinded-message-decoding
SessionHero01 Nov 10, 2025
0d67f18
Merge pull request #1671 from session-foundation/add-blinded-message-…
SessionHero01 Nov 10, 2025
e131b1d
Clean up
ThomasSession Nov 10, 2025
5e0cc7e
Updated CTAs
ThomasSession Nov 10, 2025
7146cb2
SES-4835 - no mirroring for play icon
ThomasSession Nov 10, 2025
5968daa
SES-4836 - string fix
ThomasSession Nov 10, 2025
382d474
SES-4838 - Recover button in Non Pro settings screen
ThomasSession Nov 10, 2025
0c69cd4
SES-4834 - inset padding
ThomasSession Nov 10, 2025
bdf6468
SES-4833 - Tweaked CTAs with scroll and maxed height image
ThomasSession Nov 11, 2025
a97246b
SES-4832 - fixing store logic and avoiding store related calls when u…
ThomasSession Nov 11, 2025
12a6149
Merge branch 'dev' into feature/pro-logic
ThomasSession Nov 11, 2025
6391667
Added LoginStateRepository to manage login state centrally (#1677)
SessionHero01 Nov 11, 2025
301a10b
Merge branch 'dev' into feature/pro-logic
ThomasSession Nov 11, 2025
ce9ffb8
Merge pull request #1676 from session-foundation/feature/pro-logic
ThomasSession Nov 11, 2025
a2ffade
Bump com.google.protobuf:protobuf-java from 4.32.1 to 4.33.0 (#1672)
dependabot[bot] Nov 11, 2025
0df1f0f
Bump gradlePluginVersion from 8.13.0 to 8.13.1 (#1673)
dependabot[bot] Nov 11, 2025
38cb895
[Automated] Update translations from Crowdin
Aerilym Nov 12, 2025
bc03850
Merge pull request #1675 from session-foundation/feature/update-crowd…
ThomasSession Nov 12, 2025
d0f8e4f
New T&Cs - still need real crowdin strings
ThomasSession Nov 12, 2025
7ed87b1
[Automated] Update translations from Crowdin
ThomasSession Nov 12, 2025
32c46e4
Merge pull request #1678 from session-foundation/feature/update-crowd…
ThomasSession Nov 12, 2025
9862582
Merge branch 'dev' into feature/pro-billing-payment
ThomasSession Nov 12, 2025
449b5d9
New Error handling in payment - Server side error with custom dialog
ThomasSession Nov 12, 2025
dab3993
SES-4838 - Fixing Expired footer
ThomasSession Nov 12, 2025
50711d5
Fixed string key
ThomasSession Nov 12, 2025
b5e3998
Fix up logic
ThomasSession Nov 12, 2025
2cafc80
Comments
ThomasSession Nov 12, 2025
2ea466b
Incorporating PRD logic for timeout and retries
ThomasSession Nov 12, 2025
4f43d3b
Updated comment based on error logic
ThomasSession Nov 12, 2025
9b3ffc3
Merge pull request #1680 from session-foundation/feature/pro-billing-…
ThomasSession Nov 12, 2025
cf18cbd
Merge remote-tracking branch 'origin/dev' into release/1.29.1
SessionHero01 Nov 13, 2025
26622a2
Merge pull request #1684 from session-foundation/release/1.29.1
SessionHero01 Nov 13, 2025
ad82bf7
Merge pull request #1685 from session-foundation/pro-in-message
SessionHero01 Nov 16, 2025
20f8b4e
Fix merge issue
SessionHero01 Nov 17, 2025
804fca9
Fix merge issue (#1689)
SessionHero01 Nov 17, 2025
246bb44
Version bump and new debug button to copy pro master key
ThomasSession Nov 17, 2025
48889d8
Wrong behaviour for retrying server error - need to change logic
ThomasSession Nov 17, 2025
45f44e5
Hooking up our payment with the server api
ThomasSession Nov 17, 2025
17eb77e
Merge pull request #1691 from session-foundation/pro-message-integration
SessionHero01 Nov 17, 2025
37cd39c
More logs and proper status mapping
ThomasSession Nov 17, 2025
a2d2fdc
Mapping server data to presentation models
ThomasSession Nov 18, 2025
defcd30
Clean up redundant Mms/Sms queries (#1695)
SessionHero01 Nov 18, 2025
1612e9b
Using the back end data. Unifying compose previews
ThomasSession Nov 18, 2025
574462b
Add pro_features into the message pipeline (#1696)
SessionHero01 Nov 18, 2025
ac739dc
Merge branch 'dev' into feature/add-pro-payment
ThomasSession Nov 18, 2025
1b25b56
Bump kotlinVersion from 2.2.20 to 2.2.21 (#1693)
dependabot[bot] Nov 18, 2025
074b9af
PR feedback: Renamed property
ThomasSession Nov 18, 2025
d1c76e1
Merge branch 'dev' into feature/add-pro-payment
ThomasSession Nov 18, 2025
d994bea
Merge pull request #1697 from session-foundation/feature/add-pro-payment
ThomasSession Nov 19, 2025
12d0b69
New donation logic
ThomasSession Nov 19, 2025
7e97f08
Integrate ProFeatures into messages Part III (#1700)
SessionHero01 Nov 19, 2025
3d22d4d
Debug menu section
ThomasSession Nov 19, 2025
a2fca35
Wiring up debug flags
ThomasSession Nov 19, 2025
407f074
Merge branch 'dev' into feature/ses-4879-donation-CTA
ThomasSession Nov 19, 2025
c965897
Attaching debug values
ThomasSession Nov 19, 2025
2c04451
Updated tests
ThomasSession Nov 19, 2025
2f44b45
Merge pull request #1701 from session-foundation/feature/ses-4879-don…
ThomasSession Nov 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,14 @@ jobs:

- name: Upload build reports regardless
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: build-reports-${{ matrix.variant }}-${{ matrix.build_type }}
path: app/build/reports
if-no-files-found: ignore

- name: Upload artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: session-${{ matrix.variant }}-${{ matrix.build_type }}
path: app/build/outputs/apk/${{ matrix.variant }}/${{ matrix.build_type }}/*-universal*apk
Expand Down
7 changes: 3 additions & 4 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ configurations.configureEach {
exclude(module = "commons-logging")
}

val canonicalVersionCode = 430
val canonicalVersionName = "1.29.1"
val canonicalVersionCode = 432
val canonicalVersionName = "1.30.0"

val postFixSize = 10
val abiPostFix = mapOf(
Expand Down Expand Up @@ -181,13 +181,12 @@ android {
matchingFallbacks += "release"

signingConfig = signingConfigs.getByName("debug")
applicationIdSuffix = ".$name"

devNetDefaultOn(false)
enablePermissiveNetworkSecurityConfig(true)

setAlternativeAppName("Session QA")
setAuthorityPostfix(".qa")
setAuthorityPostfix("")
}

create("automaticQa") {
Expand Down
3 changes: 0 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -190,9 +190,6 @@
android:screenOrientation="portrait" />
<activity android:name="org.thoughtcrime.securesms.preferences.appearance.AppearanceSettingsActivity"
android:screenOrientation="portrait"/>
<activity android:name="org.thoughtcrime.securesms.conversation.disappearingmessages.DisappearingMessagesActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.Session.DayNight.NoActionBar" />
<activity android:name="org.thoughtcrime.securesms.groups.GroupMembersActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.Session.DayNight.NoActionBar" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.session.libsession.database

import android.content.Context
import android.net.Uri
import network.loki.messenger.libsession_util.util.ExpiryMode
import network.loki.messenger.libsession_util.util.KeyPair
Expand All @@ -11,7 +10,6 @@ import org.session.libsession.messaging.jobs.MessageSendJob
import org.session.libsession.messaging.messages.Message
import org.session.libsession.messaging.messages.control.GroupUpdated
import org.session.libsession.messaging.messages.visible.Attachment
import org.session.libsession.messaging.messages.visible.Profile
import org.session.libsession.messaging.messages.visible.Reaction
import org.session.libsession.messaging.messages.visible.VisibleMessage
import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId
Expand All @@ -26,7 +24,6 @@ import org.session.libsession.utilities.GroupRecord
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsignal.crypto.ecc.ECKeyPair
import org.session.libsignal.messages.SignalServiceAttachmentPointer
import org.session.libsignal.messages.SignalServiceGroup
import org.session.libsignal.utilities.AccountId
import org.thoughtcrime.securesms.database.model.MessageId
import org.thoughtcrime.securesms.database.model.MessageRecord
Expand All @@ -38,12 +35,8 @@ interface StorageProtocol {
// General
fun getUserPublicKey(): String?
fun getUserED25519KeyPair(): KeyPair?
fun getUserX25519KeyPair(): ECKeyPair
fun getUserX25519KeyPair(): KeyPair
fun getUserBlindedAccountId(serverPublicKey: String): AccountId?
fun getUserProfile(): Profile

// Signal
fun getOrGenerateRegistrationID(): Int

// Jobs
fun persistJob(job: Job)
Expand Down Expand Up @@ -120,8 +113,6 @@ interface StorageProtocol {
fun addClosedGroupEncryptionKeyPair(encryptionKeyPair: ECKeyPair, groupPublicKey: String, timestamp: Long)
fun removeAllClosedGroupEncryptionKeyPairs(groupPublicKey: String)

fun insertOutgoingInfoMessage(context: Context, groupID: String, type: SignalServiceGroup.Type, name: String,
members: Collection<String>, admins: Collection<String>, threadID: Long, sentTimestamp: Long): Long?
fun isLegacyClosedGroup(publicKey: String): Boolean
fun getClosedGroupEncryptionKeyPairs(groupPublicKey: String): MutableList<ECKeyPair>
fun getLatestClosedGroupEncryptionKeyPair(groupPublicKey: String): ECKeyPair?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ package org.session.libsession.messaging.file_server
import kotlinx.serialization.Serializable
import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrl
import org.session.libsession.utilities.serializable.HttpSerializer
import org.session.libsession.utilities.serializable.HttpUrlSerializer

@Serializable
data class FileServer(
@Serializable(with = HttpSerializer::class)
@Serializable(with = HttpUrlSerializer::class)
val url: HttpUrl,
val ed25519PublicKeyHex: String
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package org.session.libsession.messaging.jobs

import android.content.Context
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import dagger.hilt.android.qualifiers.ApplicationContext
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import org.session.libsession.database.MessageDataProvider
Expand All @@ -16,7 +14,6 @@ import org.session.libsession.messaging.sending_receiving.attachments.Attachment
import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment
import org.session.libsession.messaging.utilities.Data
import org.session.libsession.snode.OnionRequestAPI
import org.session.libsession.snode.utilities.await
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.DecodedAudio
import org.session.libsession.utilities.InputStreamMediaDataSource
Expand Down Expand Up @@ -252,21 +249,18 @@ class AttachmentDownloadJob @AssistedInject constructor(
return KEY
}

class DeserializeFactory(private val factory: Factory) : Job.DeserializeFactory<AttachmentDownloadJob> {
@AssistedFactory
abstract class Factory : Job.DeserializeFactory<AttachmentDownloadJob> {
abstract fun create(
@Assisted("attachmentID") attachmentID: Long,
mmsMessageId: Long
): AttachmentDownloadJob

override fun create(data: Data): AttachmentDownloadJob {
return factory.create(
return create(
attachmentID = data.getLong(ATTACHMENT_ID_KEY),
mmsMessageId = data.getLong(TS_INCOMING_MESSAGE_ID_KEY)
)
}
}

@AssistedFactory
interface Factory {
fun create(
@Assisted("attachmentID") attachmentID: Long,
mmsMessageId: Long
): AttachmentDownloadJob
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import org.session.libsession.messaging.messages.Message
import org.session.libsession.messaging.open_groups.OpenGroupApi
import org.session.libsession.messaging.sending_receiving.MessageSender
import org.session.libsession.messaging.utilities.Data
import org.session.libsession.snode.utilities.await
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.DecodedAudio
import org.session.libsession.utilities.InputStreamMediaDataSource
Expand All @@ -38,6 +37,7 @@ class AttachmentUploadJob @AssistedInject constructor(
private val attachmentProcessor: AttachmentProcessor,
private val preferences: TextSecurePreferences,
private val fileServerApi: FileServerApi,
private val messageSender: MessageSender,
) : Job {
override var delegate: JobDelegate? = null
override var id: String? = null
Expand Down Expand Up @@ -219,7 +219,7 @@ class AttachmentUploadJob @AssistedInject constructor(

private fun failAssociatedMessageSendJob(e: Exception) {
val messageSendJob = storage.getMessageSendJob(messageSendJobID)
MessageSender.handleFailedMessageSend(this.message, e)
messageSender.handleFailedMessageSend(this.message, e)
if (messageSendJob != null) {
storage.markJobAsFailedPermanently(messageSendJobID)
}
Expand All @@ -244,7 +244,14 @@ class AttachmentUploadJob @AssistedInject constructor(
return KEY
}

class DeserializeFactory(private val factory: Factory): Job.DeserializeFactory<AttachmentUploadJob> {
@AssistedFactory
abstract class Factory : Job.DeserializeFactory<AttachmentUploadJob> {
abstract fun create(
attachmentID: Long,
@Assisted("threadID") threadID: String,
message: Message,
messageSendJobID: String
): AttachmentUploadJob

override fun create(data: Data): AttachmentUploadJob? {
val serializedMessage = data.getByteArray(MESSAGE_KEY)
Expand All @@ -259,22 +266,12 @@ class AttachmentUploadJob @AssistedInject constructor(
return null
}
input.close()
return factory.create(
return create(
attachmentID = data.getLong(ATTACHMENT_ID_KEY),
threadID = data.getString(THREAD_ID_KEY)!!,
message = message,
messageSendJobID = data.getString(MESSAGE_SEND_JOB_ID_KEY)!!
)
}
}

@AssistedFactory
interface Factory {
fun create(
attachmentID: Long,
@Assisted("threadID") threadID: String,
message: Message,
messageSendJobID: String
): AttachmentUploadJob
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ data class MessageReceiveParameters(
val closedGroup: Destination.ClosedGroup? = null
)

@Deprecated("BatchMessageReceiveJob is now only here so that existing persisted jobs can be processed.")
class BatchMessageReceiveJob @AssistedInject constructor(
@Assisted private val messages: List<MessageReceiveParameters>,
@Assisted val fromCommunity: Address.Community?, // The community the messages are received in, if any
Expand All @@ -62,6 +63,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
private val messageNotifier: MessageNotifier,
private val threadDatabase: ThreadDatabase,
private val recipientRepository: RecipientRepository,
private val messageReceiver: MessageReceiver,
) : Job {

override var delegate: JobDelegate? = null
Expand Down Expand Up @@ -105,6 +107,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
fromCommunity = fromCommunity,
threadDatabase = threadDatabase,
recipientRepository = recipientRepository,
messageReceiver = messageReceiver,
)
}

Expand Down Expand Up @@ -157,7 +160,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
messages.forEach { messageParameters ->
val (data, serverHash, openGroupMessageServerID) = messageParameters
try {
val (message, proto) = MessageReceiver.parse(
val (message, proto) = messageReceiver.parse(
data,
openGroupMessageServerID,
openGroupPublicKey = serverPublicKey,
Expand Down Expand Up @@ -358,7 +361,8 @@ class BatchMessageReceiveJob @AssistedInject constructor(

@AssistedFactory
abstract class Factory : Job.DeserializeFactory<BatchMessageReceiveJob> {
abstract fun create(
@Deprecated("New code should try to handle message directly instead of creating this job")
protected abstract fun create(
messages: List<MessageReceiveParameters>,
fromCommunity: Address.Community?,
): BatchMessageReceiveJob
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ package org.session.libsession.messaging.jobs

import android.widget.Toast
import com.google.protobuf.ByteString
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
Expand All @@ -16,13 +19,19 @@ import org.session.libsession.messaging.sending_receiving.MessageSender
import org.session.libsession.messaging.utilities.Data
import org.session.libsession.messaging.utilities.MessageAuthentication.buildGroupInviteSignature
import org.session.libsession.snode.SnodeAPI
import org.session.libsession.utilities.ConfigFactoryProtocol
import org.session.libsession.utilities.getGroup
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateInviteMessage
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateMessage
import org.session.libsignal.utilities.AccountId
import org.session.libsignal.utilities.Log

class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<String>) : Job {
class InviteContactsJob @AssistedInject constructor(
@Assisted val groupSessionId: String,
@Assisted val memberSessionIds: Array<String>,
private val configFactory: ConfigFactoryProtocol,
private val messageSender: MessageSender,
) : Job {

companion object {
const val KEY = "InviteContactJob"
Expand All @@ -37,8 +46,7 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
override val maxFailureCount: Int = 1

override suspend fun execute(dispatcherName: String) {
val configs = MessagingModuleConfiguration.shared.configFactory
val group = requireNotNull(configs.getGroup(AccountId(groupSessionId))) {
val group = requireNotNull(configFactory.getGroup(AccountId(groupSessionId))) {
"Group must exist to invite"
}

Expand All @@ -54,7 +62,7 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
runCatching {
// Make the request for this member
val memberId = AccountId(memberSessionId)
val (groupName, subAccount) = configs.withMutableGroupConfigs(sessionId) { configs ->
val (groupName, subAccount) = configFactory.withMutableGroupConfigs(sessionId) { configs ->
configs.groupInfo.getName() to configs.groupKeys.makeSubAccount(memberSessionId)
}

Expand All @@ -76,14 +84,14 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
sentTimestamp = timestamp
}

MessageSender.sendNonDurably(update, Destination.Contact(memberSessionId), false)
messageSender.sendNonDurably(update, Destination.Contact(memberSessionId), false)
}
}
}

val results = memberSessionIds.zip(requests.awaitAll())

configs.withMutableGroupConfigs(sessionId) { configs ->
configFactory.withMutableGroupConfigs(sessionId) { configs ->
results.forEach { (memberSessionId, result) ->
configs.groupMembers.get(memberSessionId)?.let { member ->
if (result.isFailure) {
Expand All @@ -96,8 +104,8 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
}
}

val groupName = configs.withGroupConfigs(sessionId) { it.groupInfo.getName() }
?: configs.getGroup(sessionId)?.name
val groupName = configFactory.withGroupConfigs(sessionId) { it.groupInfo.getName() }
?: configFactory.getGroup(sessionId)?.name

// Gather all the exceptions, while keeping track of the invitee account IDs
val failures = results.mapNotNull { (id, result) ->
Expand Down Expand Up @@ -140,4 +148,20 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<

override fun getFactoryKey(): String = KEY

@AssistedFactory
abstract class Factory : Job.DeserializeFactory<InviteContactsJob> {
abstract fun create(
groupSessionId: String,
memberSessionIds: Array<String>,
): InviteContactsJob

override fun create(data: Data): InviteContactsJob? {
val groupSessionId = data.getString(GROUP) ?: return null
val memberSessionIds = data.getStringArray(MEMBER) ?: return null
return create(
groupSessionId = groupSessionId,
memberSessionIds = memberSessionIds,
)
}
}
}
Loading