Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
335 commits
Select commit Hold shift + click to select a range
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
5419a99
Merge remote-tracking branch 'origin/dev' into release/1.29.2
SessionHero01 Nov 19, 2025
aa7c0a6
Merge pull request #1702 from session-foundation/release/1.29.2
ThomasSession Nov 20, 2025
e647119
Add ProDetailsRepository (#1704)
SessionHero01 Nov 20, 2025
ef7e136
Updated Pro logic
ThomasSession Nov 20, 2025
8797f52
Wiring the pro data properly
ThomasSession Nov 20, 2025
1cc6efa
Update devnet address (#1705)
SessionHero01 Nov 20, 2025
56ae502
Updated pro polling logic
SessionHero01 Nov 20, 2025
e334f35
Making sure we update the state upon getting to the choose plan, canc…
ThomasSession Nov 20, 2025
dce2418
[Automated] Update translations from Crowdin
ThomasSession Nov 20, 2025
daff1d8
Handling post cancellation - get back to pro home and scroll back to top
ThomasSession Nov 21, 2025
d80fadf
Updated polling logic
SessionHero01 Nov 21, 2025
3c13970
Merge branch 'dev' into pro-polling-logic
SessionHero01 Nov 21, 2025
6f0b119
Clean up
SessionHero01 Nov 21, 2025
7a1f255
Merge remote-tracking branch 'origin/pro-polling-logic' into pro-poll…
SessionHero01 Nov 21, 2025
7edbc97
Merge pull request #1706 from session-foundation/feature/update-crowd…
ThomasSession Nov 21, 2025
043d45f
Merge branch 'dev' into pro-polling-logic
SessionHero01 Nov 21, 2025
db00be0
Merge branch 'dev' into feature/pro-logic-pt2
ThomasSession Nov 21, 2025
c22fba3
Merge pull request #1707 from session-foundation/pro-polling-logic
ThomasSession Nov 21, 2025
435f2ae
Fixed the collapsibleFooter to allow clicking on the whole row and ma…
ThomasSession Nov 21, 2025
384925d
Merge branch 'dev' into feature/pro-logic-pt2
ThomasSession Nov 21, 2025
a390701
Adding logs that can be viewed in the debug logger
ThomasSession Nov 21, 2025
550d58d
Refresh on recover and block further attempts
ThomasSession Nov 21, 2025
0545ec0
Merge pull request #1708 from session-foundation/feature/pro-logic-pt2
ThomasSession Nov 21, 2025
12013d2
Integrate pro related from config (#1709)
SessionHero01 Nov 23, 2025
eb80991
[Automated] Update translations from Crowdin
mpretty-cyro Nov 24, 2025
9eff985
Fixing orientation issues in subsampling logic that was relying on ex…
ThomasSession Nov 24, 2025
7d609c8
Merge pull request #1710 from session-foundation/feature/update-crowd…
ThomasSession Nov 24, 2025
fbb70d6
[Automated] Update translations from Crowdin
ThomasSession Nov 24, 2025
cdb9d50
Merge pull request #1711 from session-foundation/feature/update-crowd…
ThomasSession Nov 24, 2025
69e0eba
Merge branch 'dev' into fix/notification-in-conversation
ThomasSession Nov 24, 2025
03e7674
Donation strings and image
ThomasSession Nov 24, 2025
4cb0695
clean up
ThomasSession Nov 24, 2025
c679142
Merge pull request #1712 from session-foundation/fix/notification-in-…
ThomasSession Nov 24, 2025
110a5d4
Reworking dialogs to take more width and to display a scrim in the bg
ThomasSession Nov 24, 2025
a4a892a
Merge pull request #1713 from session-foundation/fix/ses-4902-dialogs…
ThomasSession Nov 24, 2025
68342d1
More pro config integration (#1717)
SessionHero01 Nov 25, 2025
2aa37c4
Bump com.google.devtools.ksp from 2.3.0 to 2.3.3 (#1715)
dependabot[bot] Nov 25, 2025
adf25b2
Bump com.google.zxing:core from 3.5.3 to 3.5.4 (#1694)
dependabot[bot] Nov 25, 2025
df24c9f
Bump androidx.sqlite:sqlite-ktx from 2.5.2 to 2.6.2 (#1716)
dependabot[bot] Nov 25, 2025
f65804a
Fix community reaction counting (#1718)
SessionHero01 Nov 25, 2025
ac4b28a
Update libsession-util version (#1719)
SessionHero01 Nov 25, 2025
0b678b6
Added a new field to detect if a refund is in progress
ThomasSession Nov 25, 2025
2dfc60d
Merge pull request #1720 from session-foundation/feature/refund-state-ui
ThomasSession Nov 25, 2025
75d88ee
Bump actions/checkout from 5 to 6 (#1714)
dependabot[bot] Nov 25, 2025
82f7adb
Remove empty sub/unsub API requests (#1722)
SessionHero01 Nov 25, 2025
aaf591d
Merge remote-tracking branch 'origin/dev' into release/1.29.3
SessionHero01 Nov 25, 2025
e854432
Merge pull request #1724 from session-foundation/release/1.29.3
SessionHero01 Nov 26, 2025
4fc88fe
Merge pull request #1725 from session-foundation/fix-community-clearing
SessionHero01 Nov 26, 2025
87d729d
Using system scrim by removing some old flag
ThomasSession Nov 26, 2025
d1f8e72
Trigger donate from "It's great"
ThomasSession Nov 26, 2025
44ab07f
Dialog ordering
ThomasSession Nov 26, 2025
dfa32a6
name change
ThomasSession Nov 26, 2025
e040a97
Merge branch 'dev' into fix/dialogs-and-donation
ThomasSession Nov 26, 2025
eccea35
Merge pull request #1726 from session-foundation/fix/dialogs-and-dona…
ThomasSession Nov 26, 2025
882a6ea
SES-4923 - respect window insets in dialogs
ThomasSession Nov 26, 2025
3f712ba
Merge pull request #1727 from session-foundation/fix/ses-4923-dialog-…
ThomasSession Nov 26, 2025
5035c80
Update how pro feature flags are set (#1728)
SessionHero01 Nov 26, 2025
9bc5172
Update protobuf
SessionHero01 Nov 27, 2025
3a27e46
Merge pull request #1729 from session-foundation/update-proto
ThomasSession Nov 27, 2025
89a13f3
Clean up doubled up dialog
ThomasSession Nov 27, 2025
dcadd72
Using formatted value for chars left
ThomasSession Nov 27, 2025
3e6e725
First stage of Pro stats logic
ThomasSession Nov 27, 2025
dd60324
SES-4929 - requested tags for QA
ThomasSession Nov 27, 2025
581cc87
Renamed methods
ThomasSession Nov 27, 2025
4968ab6
Update pro feature handling on message level
SessionHero01 Nov 27, 2025
93dcfdb
Reuse function
SessionHero01 Nov 27, 2025
ff62cc9
Merge pull request #1731 from session-foundation/new-msg-column
ThomasSession Nov 28, 2025
899154a
Merge branch 'dev' into feature/pro-stats
ThomasSession Nov 28, 2025
db689c2
Updated logic to match two feature rows in DB
ThomasSession Nov 28, 2025
f605709
Fixed reaction counting (#1732)
SessionHero01 Nov 28, 2025
ded6ca8
Splitting two column logic
ThomasSession Nov 28, 2025
000522e
Improve community reaction handling (#1733)
SessionHero01 Nov 28, 2025
c0121fd
Merge branch 'dev' into feature/pro-stats
ThomasSession Nov 28, 2025
b45a066
Merge pull request #1730 from session-foundation/feature/pro-stats
ThomasSession Nov 28, 2025
5aef395
Merge remote-tracking branch 'origin/dev' into release/1.30.0
Nov 28, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- variant: 'play'
run_test: true
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
with:
submodules: 'recursive'

Expand Down 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
8 changes: 3 additions & 5 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 = 432
val canonicalVersionName = "1.29.3"
val canonicalVersionCode = 433
val canonicalVersionName = "1.30.0"

val postFixSize = 10
val abiPostFix = mapOf(
Expand Down Expand Up @@ -105,7 +105,6 @@ protobuf {

android {
namespace = "network.loki.messenger"
useLibrary("org.apache.http.legacy")

compileOptions {
sourceCompatibility = JavaVersion.VERSION_21
Expand Down Expand Up @@ -181,13 +180,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 Expand Up @@ -155,6 +146,8 @@ interface StorageProtocol {
fun trimThreadBefore(threadID: Long, timestamp: Long)
fun getMessageCount(threadID: Long): Long
fun getTotalPinned(): Int
suspend fun getTotalSentProBadges(): Int
suspend fun getTotalSentLongMessages(): Int
fun setPinned(address: Address, isPinned: Boolean)
fun isRead(threadId: Long) : Boolean
fun setThreadCreationDate(threadId: Long, newDate: Long)
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 @@ -10,7 +10,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope
import network.loki.messenger.libsession_util.ConfigBase
import network.loki.messenger.libsession_util.PRIORITY_HIDDEN
import org.session.libsession.database.StorageProtocol
import org.session.libsession.messaging.messages.Destination
import org.session.libsession.messaging.messages.Message
Expand Down 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 @@ -141,7 +144,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
message.groupPublicKey == null && // not a group
message.openGroupServerMessageID == null && // not a community
// not marked as hidden
configs.contacts.get(message.senderOrSync)?.priority == ConfigBase.PRIORITY_HIDDEN &&
configs.contacts.get(message.senderOrSync)?.priority == PRIORITY_HIDDEN &&
// the message's sentTimestamp is earlier than the sentTimestamp of the last config
message.sentTimestamp!! < contactConfigTimestamp
}
Expand All @@ -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
Loading