* Initial commit * Initial attempt at modernising PhassphrasePromptActivity and BiometricSecretProvider * Commit before refactoring to cache shared content Uri * External sharing with fingerprint-locked device now working * Adjust PassphrasePromptActivity to not allow multiple instances if you have one then external share via session * Cleanup and documentation * End of day push * Yeah, now external sharing ONLY works on a Pixel 7a and not most other things - will need to rework this in 2025 =/ * Added forced READ_URI permission to intent - works for external share of links now, but not images at present * WIP * Working, now to clean up * Broke then fixed * End of day push * Now working on Pixel 7a also * Commit before refactor * Refactor WIP * Refactored PassphraseRequiredActionBarActivity to ScreenLockActionBarActivity, amongst other things * Cleanup * Tiny fix * Further cleanup * WIP filename fix * Fixed GIF saving amongst other things * Cleanup for PR * Fixed overlooked drawable ID change * Cleanup * PR feedback * PR feedback * PR feedback * PR feedback * PR feedback * Fix startup crash & successful unlock drawable * Adjusted fileprovider back to previous name to keep inline with avatar and share logs file providers * Cleaned up ShareActivity null-checks via lateinits * Fixed up ScreenLockActivity so we don't get stuck & inform user of system-level biometric lockouts * Fixed ShareActivity.onCreate to match OG behaviour * Added filename handling for video files * All working - commit before cleanup * Cleaned up * Addressed PR feedback regarding biometric unlock * Re-fixed external share filenames following Media class adjustment today * Cleanup * Fixed Giphy GIF filenames * PR cleanup * PR feedback * Added comment * Reverted onBackPressedDispatcher change * Added voice message filename generation method to FilenameUtils * Push before refactor * WIP * Streamline filename creation * Cleanup * Enforce non-null status on extracted filename * Adjusted Attachments to force filenames & removed reliance on Uri filename extraction * End of day push * Added synthesized filename creation for pre-existing voice messages that lack a filename * Cleanup and refactor mechanism for legacy voice message filename synthesis * Remove unnecessary call to getFilenameFromUri if we can extract the filename from the attachment * Added filename synthesis on input from legacy Session Android clients that provide null filenames * Added some additional mime-types to our incoming 'fromProto' filename generation - should be very comprehensive now * Leaving logic on the app side Removed logic from libsession Sanitising file names before saving them to storage Made sure we don't displa a date when getting filename from Slide otherwise it'll keep changing * Cleaned up * Using the URI's timestamp when possible * WIP * Working - commiting before cleanup * Cleaned up for PR --------- Co-authored-by: alansley <aclansley@gmail.com> Co-authored-by: ThomasSession <thomas.r@getsession.org> |
3 months ago | |
---|---|---|
.github | 6 months ago | |
.run | 1 year ago | |
app | 3 months ago | |
buildSrc | 2 years ago | |
common | 7 months ago | |
content-descriptions | 4 months ago | |
gradle/wrapper | 5 months ago | |
liblazysodium | 2 years ago | |
libsession | 3 months ago | |
libsession-util | 3 months ago | |
libsignal | 3 months ago | |
scripts | 4 months ago | |
third_party_licenses | 4 months ago | |
.drone.jsonnet | 4 months ago | |
.drone.yml | 5 months ago | |
.gitattributes | 11 years ago | |
.gitignore | 5 months ago | |
.gitmodules | 6 months ago | |
BUILDING.md | 6 months ago | |
CODE_OF_CONDUCT.md | 4 years ago | |
LICENSE | 14 years ago | |
README.md | 4 months ago | |
build.gradle | 5 months ago | |
gradle.properties | 5 months ago | |
gradlew | 6 years ago | |
gradlew.bat | 6 years ago | |
settings.gradle | 5 months ago |
README.md
Session Android
Download on the Google Play Store
Add the F-Droid repo
Summary
Session integrates directly with Oxen Service Nodes, which are a set of distributed, decentralized and Sybil resistant nodes. Service Nodes act as servers which store messages offline, and a set of nodes which allow for onion routing functionality obfuscating users' IP addresses. For a full understanding of how Session works, read the Session Whitepaper.

Want to contribute? Found a bug or have a feature request?
Please search for any existing issues that describe your bugs in order to avoid duplicate submissions. Submissions can be made by making a pull request to our dev
branch. If you don't know where to start contributing, try reading the Github issues page for ideas.
Build instructions
Build instructions can be found in BUILDING.md.
Translations
Want to help us translate Session into your language? You can do so here!
Verifying signatures
Step 1:
wget https://github.com/jagerman.gpg
gpg --import jagerman.gpg
Step 2:
Get the signed hash for this release. SESSION_VERSION
needs to be updated for the release you want to verify.
export SESSION_VERSION=1.10.4
wget https://github.com/session-foundation/session-android/releases/download/$SESSION_VERSION/signatures.asc
Step 3:
Verify the signature of the hashes of the files.
gpg --verify signatures.asc 2>&1 |grep "Good signature from"
The command above should print "Good signature from "Kee Jefferys...
". If it does, the hashes are valid but we still have to make the sure the signed hashes matches the downloaded files.
Step 4:
Make sure the two commands below returns the same hash. If they do, files are valid.
sha256sum session-$SESSION_VERSION-universal.apk
grep universal.apk signatures.asc
License
Copyright 2011 Whisper Systems
Copyright 2013-2017 Open Whisper Systems
Copyright 2019-2021 The Oxen Project
Licensed under the GPLv3: http://www.gnu.org/licenses/gpl-3.0.html
Attributions
This project uses Lucide Icon Font, which is licensed under the ISC License.