Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .editorconfig +24 -0
- .gitattributes +8 -35
- .github/ISSUE_TEMPLATE/bug_report.md +34 -0
- .github/ISSUE_TEMPLATE/config.yml +8 -0
- .github/mergeable.yml +22 -0
- .github/workflows/artifacts.yml +20 -0
- .github/workflows/preview-apk.yml +55 -0
- .gitignore +49 -0
- .gitmodules +3 -0
- .tx/config +10 -0
- BUILDING.md +245 -0
- CHANGELOG.md +0 -0
- CONTRIBUTING.md +153 -0
- Dockerfile +44 -0
- LICENSE +621 -0
- README.md +40 -0
- RELEASE.md +148 -0
- build.gradle +249 -0
- docs/f-droid.md +79 -0
- docs/images/2019-12-material-icon-dev-template.png +0 -0
- docs/images/2019-12-material-icon-template.png +0 -0
- docs/playstore.md +14 -0
- fastlane/metadata/android/ar/short_description.txt +1 -0
- fastlane/metadata/android/cs/short_description.txt +1 -0
- fastlane/metadata/android/de/changelogs/6544.txt +4 -0
- fastlane/metadata/android/de/changelogs/6584.txt +6 -0
- fastlane/metadata/android/de/changelogs/6594.txt +5 -0
- fastlane/metadata/android/de/changelogs/6744.txt +6 -0
- fastlane/metadata/android/de/changelogs/6754.txt +6 -0
- fastlane/metadata/android/de/changelogs/6774.txt +6 -0
- fastlane/metadata/android/de/changelogs/6804.txt +8 -0
- fastlane/metadata/android/de/full_description.txt +17 -0
- fastlane/metadata/android/de/short_description.txt +1 -0
- fastlane/metadata/android/de/title.txt +1 -0
- fastlane/metadata/android/en-US/full_description.txt +17 -0
- fastlane/metadata/android/en-US/images/icon.png +0 -0
- fastlane/metadata/android/en-US/images/phoneScreenshots/1.png +3 -0
- fastlane/metadata/android/en-US/images/phoneScreenshots/2.png +3 -0
- fastlane/metadata/android/en-US/images/phoneScreenshots/3.png +3 -0
- fastlane/metadata/android/en-US/images/phoneScreenshots/4.png +3 -0
- fastlane/metadata/android/en-US/images/phoneScreenshots/5.png +3 -0
- fastlane/metadata/android/en-US/short_description.txt +1 -0
- fastlane/metadata/android/en-US/title.txt +1 -0
- fastlane/metadata/android/eo/short_description.txt +1 -0
- fastlane/metadata/android/es/full_description.txt +19 -0
- fastlane/metadata/android/es/short_description.txt +1 -0
- fastlane/metadata/android/es/title.txt +1 -0
- fastlane/metadata/android/et/full_description.txt +19 -0
- fastlane/metadata/android/et/short_description.txt +1 -0
- fastlane/metadata/android/et/title.txt +1 -0
.editorconfig
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# EditorConfig (https://editorconfig.org/)
|
| 2 |
+
|
| 3 |
+
root = true
|
| 4 |
+
|
| 5 |
+
[*]
|
| 6 |
+
end_of_line = lf
|
| 7 |
+
charset = utf-8
|
| 8 |
+
insert_final_newline = true
|
| 9 |
+
|
| 10 |
+
[*.java]
|
| 11 |
+
indent_style = space
|
| 12 |
+
indent_size = 2
|
| 13 |
+
|
| 14 |
+
[*.c]
|
| 15 |
+
indent_style = space
|
| 16 |
+
indent_size = 4
|
| 17 |
+
|
| 18 |
+
[*.gradle]
|
| 19 |
+
indent_style = space
|
| 20 |
+
indent_size = 4
|
| 21 |
+
|
| 22 |
+
[*.sh]
|
| 23 |
+
indent_style = space
|
| 24 |
+
indent_size = 4
|
.gitattributes
CHANGED
|
@@ -1,35 +1,8 @@
|
|
| 1 |
-
*.
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
-
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
| 1 |
+
*.ai binary
|
| 2 |
+
fastlane/metadata/android/en-US/images/phoneScreenshots/1.png filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
fastlane/metadata/android/en-US/images/phoneScreenshots/2.png filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
fastlane/metadata/android/en-US/images/phoneScreenshots/3.png filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
fastlane/metadata/android/en-US/images/phoneScreenshots/4.png filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
fastlane/metadata/android/en-US/images/phoneScreenshots/5.png filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
src/main/assets/fonts/Roboto-Light.ttf filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
src/main/res/drawable/background_hd.jpg filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.github/ISSUE_TEMPLATE/bug_report.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
name: Bug report
|
| 3 |
+
about: Report something that isn't working.
|
| 4 |
+
title: ''
|
| 5 |
+
assignees: ''
|
| 6 |
+
labels: bug
|
| 7 |
+
---
|
| 8 |
+
|
| 9 |
+
<!--
|
| 10 |
+
This is a bug report tracker. New features are discussed in the forum: https://support.delta.chat
|
| 11 |
+
|
| 12 |
+
Please fill out as much of this form as you can (leaving out stuff that is not applicable is ok).
|
| 13 |
+
-->
|
| 14 |
+
|
| 15 |
+
- Android version:
|
| 16 |
+
- Device:
|
| 17 |
+
- Delta Chat version:
|
| 18 |
+
- Expected behavior:
|
| 19 |
+
- Actual behavior:
|
| 20 |
+
- Steps to reproduce the problem:
|
| 21 |
+
- Screenshots:
|
| 22 |
+
- Logs:
|
| 23 |
+
|
| 24 |
+
<!--
|
| 25 |
+
Debug logs can be copied from within the Delta Chat app with
|
| 26 |
+
Settings menu -> Advanced -> View log
|
| 27 |
+
|
| 28 |
+
Alternatively from the Android system log:
|
| 29 |
+
`adb logcat -v time -s DeltaChat`
|
| 30 |
+
|
| 31 |
+
Logs may contain private data
|
| 32 |
+
which shall be removed or anonymised prior to posting.
|
| 33 |
+
-->
|
| 34 |
+
|
.github/ISSUE_TEMPLATE/config.yml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
blank_issues_enabled: false
|
| 2 |
+
contact_links:
|
| 3 |
+
- name: Feature requests
|
| 4 |
+
url: https://support.delta.chat/c/features/6
|
| 5 |
+
about: Please discuss feature requests on our Community forum.
|
| 6 |
+
- name: General Questions
|
| 7 |
+
url: https://support.delta.chat/c/help/5
|
| 8 |
+
about: Please ask general Questions on our Community forum.
|
.github/mergeable.yml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version: 2
|
| 2 |
+
mergeable:
|
| 3 |
+
- when: pull_request.*
|
| 4 |
+
name: "Changelog check"
|
| 5 |
+
validate:
|
| 6 |
+
- do: or
|
| 7 |
+
validate:
|
| 8 |
+
- do: description
|
| 9 |
+
must_include:
|
| 10 |
+
regex: '#skip-changelog'
|
| 11 |
+
- do: and
|
| 12 |
+
validate:
|
| 13 |
+
- do: dependent
|
| 14 |
+
changed:
|
| 15 |
+
file: '**/*.java'
|
| 16 |
+
required: ['CHANGELOG.md']
|
| 17 |
+
fail:
|
| 18 |
+
- do: checks
|
| 19 |
+
status: 'action_required'
|
| 20 |
+
payload:
|
| 21 |
+
title: CHANGELOG.md might need an update
|
| 22 |
+
summary: "Please update CHANGELOG.md or add #skip-changelog to the description"
|
.github/workflows/artifacts.yml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
name: add artifact links to pull request
|
| 2 |
+
on:
|
| 3 |
+
workflow_run:
|
| 4 |
+
workflows: ["Upload Preview APK"]
|
| 5 |
+
types: [completed]
|
| 6 |
+
|
| 7 |
+
jobs:
|
| 8 |
+
artifacts-url-comments:
|
| 9 |
+
name: add artifact links to pull request
|
| 10 |
+
runs-on: ubuntu-latest
|
| 11 |
+
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
| 12 |
+
steps:
|
| 13 |
+
- name: add artifact links to pull request
|
| 14 |
+
uses: tonyhallett/artifacts-url-comments@v1.1.0
|
| 15 |
+
env:
|
| 16 |
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
| 17 |
+
with:
|
| 18 |
+
prefix: "**To test the changes in this pull request, install this apk:**"
|
| 19 |
+
format: "[📦 {name}]({url})"
|
| 20 |
+
addTo: pull
|
.github/workflows/preview-apk.yml
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
name: Upload Preview APK
|
| 2 |
+
|
| 3 |
+
on: pull_request
|
| 4 |
+
|
| 5 |
+
concurrency:
|
| 6 |
+
group: ${{ github.workflow }}-${{ github.ref }}
|
| 7 |
+
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
| 8 |
+
|
| 9 |
+
jobs:
|
| 10 |
+
build:
|
| 11 |
+
name: Upload Preview APK
|
| 12 |
+
runs-on: ubuntu-latest
|
| 13 |
+
steps:
|
| 14 |
+
- uses: actions/checkout@v5
|
| 15 |
+
with:
|
| 16 |
+
submodules: recursive
|
| 17 |
+
- uses: Swatinem/rust-cache@v2
|
| 18 |
+
with:
|
| 19 |
+
working-directory: jni/deltachat-core-rust
|
| 20 |
+
- uses: actions/setup-java@v5
|
| 21 |
+
with:
|
| 22 |
+
java-version: 17
|
| 23 |
+
distribution: 'temurin'
|
| 24 |
+
- uses: android-actions/setup-android@v3
|
| 25 |
+
- uses: actions/cache@v4
|
| 26 |
+
with:
|
| 27 |
+
path: |
|
| 28 |
+
~/.gradle/caches
|
| 29 |
+
~/.gradle/wrapper
|
| 30 |
+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
| 31 |
+
restore-keys: |
|
| 32 |
+
${{ runner.os }}-gradle-
|
| 33 |
+
- uses: nttld/setup-ndk@v1
|
| 34 |
+
id: setup-ndk
|
| 35 |
+
with:
|
| 36 |
+
ndk-version: r27
|
| 37 |
+
|
| 38 |
+
- name: Validate Gradle Wrapper
|
| 39 |
+
uses: gradle/actions/wrapper-validation@v4
|
| 40 |
+
|
| 41 |
+
- name: Compile core
|
| 42 |
+
env:
|
| 43 |
+
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
|
| 44 |
+
run: |
|
| 45 |
+
export PATH="${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/"
|
| 46 |
+
scripts/install-toolchains.sh && scripts/ndk-make.sh armeabi-v7a
|
| 47 |
+
|
| 48 |
+
- name: Build APK
|
| 49 |
+
run: ./gradlew --no-daemon -PABI_FILTER=armeabi-v7a assembleGplayDebug
|
| 50 |
+
|
| 51 |
+
- name: Upload APK
|
| 52 |
+
uses: actions/upload-artifact@v4
|
| 53 |
+
with:
|
| 54 |
+
name: app-preview.apk
|
| 55 |
+
path: 'build/outputs/apk/gplay/debug/*.apk'
|
.gitignore
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.keystore
|
| 2 |
+
.classpath
|
| 3 |
+
project.properties
|
| 4 |
+
.project
|
| 5 |
+
.settings
|
| 6 |
+
bin/
|
| 7 |
+
gen/
|
| 8 |
+
/gplay/
|
| 9 |
+
.idea/
|
| 10 |
+
*.iml
|
| 11 |
+
*.so
|
| 12 |
+
out
|
| 13 |
+
tests
|
| 14 |
+
lint.xml
|
| 15 |
+
local.properties
|
| 16 |
+
ant.properties
|
| 17 |
+
.DS_Store
|
| 18 |
+
build.log
|
| 19 |
+
build-log.xml
|
| 20 |
+
.gradle
|
| 21 |
+
build
|
| 22 |
+
signing.properties
|
| 23 |
+
library/lib/
|
| 24 |
+
library/obj/
|
| 25 |
+
ffpr
|
| 26 |
+
test/androidTestEspresso/res/values/arrays.xml
|
| 27 |
+
obj/
|
| 28 |
+
jni/libspeex/.deps/
|
| 29 |
+
ndkArch
|
| 30 |
+
|
| 31 |
+
# ignore debug symbols created by ./tools/upload-release.sh
|
| 32 |
+
*-symbols.zip
|
| 33 |
+
|
| 34 |
+
# ignore private scripts and directories, eg. local2github.prv.sh
|
| 35 |
+
*.prv*
|
| 36 |
+
|
| 37 |
+
# contains files for ndk-build when done from gradle.
|
| 38 |
+
.externalNativeBuild
|
| 39 |
+
|
| 40 |
+
# no vi tmp files
|
| 41 |
+
*.swp
|
| 42 |
+
|
| 43 |
+
jni/x86
|
| 44 |
+
jni/x86_64
|
| 45 |
+
jni/armeabi
|
| 46 |
+
jni/armeabi-v7a
|
| 47 |
+
jni/arm64-v8a
|
| 48 |
+
|
| 49 |
+
*~
|
.gitmodules
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[submodule "jni/deltachat-core-rust"]
|
| 2 |
+
path = jni/deltachat-core-rust
|
| 3 |
+
url = https://github.com/chatmail/core
|
.tx/config
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[main]
|
| 2 |
+
host = https://www.transifex.com
|
| 3 |
+
lang_map = id: in, ja_JP: ja, nl_NL: nl, pt_BR: pt-rBR, zh_CN: zh-rCN, zh_TW: zh-rTW
|
| 4 |
+
|
| 5 |
+
[o:delta-chat:p:delta-chat-app:r:stringsxml]
|
| 6 |
+
file_filter = src/main/res/values-<lang>/strings.xml
|
| 7 |
+
source_file = src/main/res/values/strings.xml
|
| 8 |
+
source_lang = en
|
| 9 |
+
type = ANDROID
|
| 10 |
+
|
BUILDING.md
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Building and Testing
|
| 2 |
+
|
| 3 |
+
This document describes how to set up the build environment,
|
| 4 |
+
build and test the app. Before diving into developing, please
|
| 5 |
+
first read [CONTRIBUTING.md](./CONTRIBUTING.md) for general
|
| 6 |
+
contribution hints and conventions.
|
| 7 |
+
|
| 8 |
+
Please follow all steps precisely.
|
| 9 |
+
If you run into troubles,
|
| 10 |
+
ask on one of the [communication channels](https://delta.chat/contribute) for help
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
## Check Out Repository
|
| 14 |
+
|
| 15 |
+
When checking out _deltachat-android_, make sure also to check out the
|
| 16 |
+
subproject _deltachat-core-rust_:
|
| 17 |
+
|
| 18 |
+
- When using Git, you can do this initially by
|
| 19 |
+
`$ git clone --recursive https://github.com/deltachat/deltachat-android`
|
| 20 |
+
or later by `git submodule update --init --recursive`. If you do this in your
|
| 21 |
+
home directory, this results in the folder `~/deltachat-android` which is just fine.
|
| 22 |
+
|
| 23 |
+
## Generate JSON-RPC bindings
|
| 24 |
+
|
| 25 |
+
To generate/update the JSON-RPC bindings (ex. `chat.delta.rpc.*` package)
|
| 26 |
+
install Rust tooling (read sections below) and the [dcrpcgen tool](https://github.com/chatmail/dcrpcgen)
|
| 27 |
+
then generate the code running the script:
|
| 28 |
+
|
| 29 |
+
```
|
| 30 |
+
./scripts/generate-rpc-bindings.sh
|
| 31 |
+
```
|
| 32 |
+
|
| 33 |
+
## Build Using Nix
|
| 34 |
+
|
| 35 |
+
The repository contains [Nix](https://nixos.org/) development environment
|
| 36 |
+
described in `flake.nix` file.
|
| 37 |
+
If you don't have Nix installed,
|
| 38 |
+
the easiest way is to follow the [Lix installation instructions](https://lix.systems/install/)
|
| 39 |
+
as this results in a setup with [Flakes](https://nixos.wiki/wiki/Flakes) feature enabled out of the box
|
| 40 |
+
and can be cleanly uninstalled with `/nix/nix-installer uninstall` once you don't need it anymore.
|
| 41 |
+
|
| 42 |
+
Once you have Nix with Flakes feature set up start the development environment shell:
|
| 43 |
+
```
|
| 44 |
+
nix develop
|
| 45 |
+
```
|
| 46 |
+
Nix development environment contains Rust with cross-compilation toolchains and Android SDK.
|
| 47 |
+
|
| 48 |
+
To [build an APK](https://developer.android.com/studio/build/building-cmdline) run the following 2 steps.
|
| 49 |
+
Note that the first step may take some time to build for all architectures. You can optionally read
|
| 50 |
+
[the first comment block in the `ndk-make.sh` script](https://github.com/deltachat/deltachat-android/blob/master/scripts/ndk-make.sh)
|
| 51 |
+
for pointers on how to build for a specific architecture.
|
| 52 |
+
```
|
| 53 |
+
$ scripts/ndk-make.sh
|
| 54 |
+
$ ./gradlew assembleDebug
|
| 55 |
+
```
|
| 56 |
+
|
| 57 |
+
Resulting APK files can be found in
|
| 58 |
+
`build/outputs/apk/gplay/debug/` and
|
| 59 |
+
`build/outputs/apk/fat/debug/`.
|
| 60 |
+
|
| 61 |
+
## Build Using Dockerfile
|
| 62 |
+
|
| 63 |
+
Another way to build APK is to use provided `Dockerfile`
|
| 64 |
+
with [Docker](https://www.docker.com/) or [Podman](https://podman.io/).
|
| 65 |
+
Podman is a drop-in replacement for Docker that does not require root privileges.
|
| 66 |
+
|
| 67 |
+
If you don't have Docker or Podman setup yet, read [how to setup Podman](#setup-podman)
|
| 68 |
+
below. If you don't want to use Docker or Podman, read [how to manually install the
|
| 69 |
+
build environment](#install-build-environment).
|
| 70 |
+
|
| 71 |
+
First, build the image `deltachat-android` by running
|
| 72 |
+
```
|
| 73 |
+
podman build --build-arg UID=$(id -u) --build-arg GID=$(id -g) . -t deltachat-android
|
| 74 |
+
```
|
| 75 |
+
or
|
| 76 |
+
```
|
| 77 |
+
docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) . -t deltachat-android
|
| 78 |
+
```
|
| 79 |
+
|
| 80 |
+
Then, run the image:
|
| 81 |
+
```
|
| 82 |
+
podman run --userns=keep-id -it --name deltachat -v $(pwd):/home/app:z -w /home/app localhost/deltachat-android
|
| 83 |
+
```
|
| 84 |
+
or
|
| 85 |
+
```
|
| 86 |
+
docker run -it --name deltachat -v $(pwd):/home/app:z -w /home/app localhost/deltachat-android
|
| 87 |
+
```
|
| 88 |
+
|
| 89 |
+
You can leave the container with Ctrl+D or by typing `exit` and re-enter it with
|
| 90 |
+
`docker start -ia deltachat` or `podman start -ia deltachat`.
|
| 91 |
+
|
| 92 |
+
Within the container, install toolchains and build the native library:
|
| 93 |
+
```
|
| 94 |
+
deltachat@6012dcb974fe:/home/app$ scripts/install-toolchains.sh
|
| 95 |
+
deltachat@6012dcb974fe:/home/app$ scripts/ndk-make.sh
|
| 96 |
+
```
|
| 97 |
+
|
| 98 |
+
Then, [build an APK](https://developer.android.com/studio/build/building-cmdline):
|
| 99 |
+
```
|
| 100 |
+
deltachat@6012dcb974fe:/home/app$ ./gradlew assembleDebug
|
| 101 |
+
```
|
| 102 |
+
|
| 103 |
+
### Troubleshooting
|
| 104 |
+
|
| 105 |
+
- Executing `./gradlew assembleDebug` inside the container fails with `The SDK directory '/home/user/Android/Sdk' does not exist.`:
|
| 106 |
+
|
| 107 |
+
The problem is that Android Studio (outside the container) automatically creates a file `local.properties` with a content like `sdk.dir=/home/username/Android/Sdk`,
|
| 108 |
+
so, Gradle-inside-the-container looks for the Sdk at `/home/username/Android/Sdk`, where it can't find it.
|
| 109 |
+
You could:
|
| 110 |
+
- either: remove the file or just the line starting with `sdk.dir`
|
| 111 |
+
- or: run `./gradlew assembleDebug` from outside the container (however, there may be incompatibility issues if different versions are installed inside and outside the container)
|
| 112 |
+
|
| 113 |
+
- Running the image fails with `ERRO[0000] The storage 'driver' option must be set in /etc/containers/storage.conf, guarantee proper operation.`:
|
| 114 |
+
|
| 115 |
+
In /etc/containers/storage.conf, replace the line: `driver = ""` with: `driver = "overlay"`.
|
| 116 |
+
You can also set the `driver` option to something else, you just need to set it to _something_.
|
| 117 |
+
[Read about possible options here](https://github.com/containers/storage/blob/master/docs/containers-storage.conf.5.md#storage-table).
|
| 118 |
+
|
| 119 |
+
## <a name="setup-podman"></a>Setup Podman
|
| 120 |
+
|
| 121 |
+
These instructions were only tested on a Manjaro machine so far. If anything doesn't work, please open an issue.
|
| 122 |
+
|
| 123 |
+
First, [Install Podman](https://podman.io/getting-started/installation).
|
| 124 |
+
|
| 125 |
+
Then, if you want to run Podman without root, run:
|
| 126 |
+
```
|
| 127 |
+
sudo touch /etc/subgid
|
| 128 |
+
sudo touch /etc/subuid
|
| 129 |
+
sudo usermod --add-subuids 165536-231072 --add-subgids 165536-231072 yourusername
|
| 130 |
+
```
|
| 131 |
+
(replace `yourusername` with your username).
|
| 132 |
+
See https://wiki.archlinux.org/index.php/Podman#Rootless_Podman for more information.
|
| 133 |
+
|
| 134 |
+
## <a name="install-build-environment"></a>Install Build Environment (without Docker or Podman)
|
| 135 |
+
|
| 136 |
+
To setup build environment manually:
|
| 137 |
+
- _Either_, in Android Studio, go to "Tools / SDK Manager / SDK Tools", enable "Show Package Details",
|
| 138 |
+
select "CMake" and the desired NDK (install the same NDK version as the [Dockerfile](https://github.com/deltachat/deltachat-android/blob/master/Dockerfile)), hit "Apply".
|
| 139 |
+
- _Or_ read [Dockerfile](https://github.com/deltachat/deltachat-android/blob/master/Dockerfile) and mimic what it does.
|
| 140 |
+
|
| 141 |
+
Then, in both cases, install Rust using [rustup](https://rustup.rs/)
|
| 142 |
+
and Rust toolchains for cross-compilation by executing `scripts/install-toolchains.sh`.
|
| 143 |
+
|
| 144 |
+
Then, configure `ANDROID_NDK_ROOT` environment variable to point to the Android NDK
|
| 145 |
+
installation directory e.g. by adding this to your `.bashrc`:
|
| 146 |
+
|
| 147 |
+
```bash
|
| 148 |
+
export ANDROID_NDK_ROOT=${HOME}/Android/Sdk/ndk/[version] # (or wherever your NDK is) Note that there is no `/` at the end!
|
| 149 |
+
export PATH=${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/:${ANDROID_NDK_ROOT}
|
| 150 |
+
```
|
| 151 |
+
|
| 152 |
+
After that, call `scripts/ndk-make.sh` in the root directory to build core-rust.
|
| 153 |
+
Afterwards run the project in Android Studio. The project requires API 25.
|
| 154 |
+
|
| 155 |
+
With chance, that's it :) - if not, read on how to set up a proper development
|
| 156 |
+
environment.
|
| 157 |
+
|
| 158 |
+
|
| 159 |
+
## Install Development Environment
|
| 160 |
+
|
| 161 |
+
1. Some libs required by Android Studio may be missing on 64 bit Linux machines
|
| 162 |
+
[Source](https://developer.android.com/studio/install.html)], so for Ubuntu execute
|
| 163 |
+
`$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386`
|
| 164 |
+
and for Fedora execute
|
| 165 |
+
`$ sudo yum install zlib.i686 ncurses-libs.i686 bzip2-libs.i686`.
|
| 166 |
+
|
| 167 |
+
2. Download Android Studio from <https://developer.android.com> (android-studio-ide-...-linux.zip)
|
| 168 |
+
and unpack the archive which contains a single folder called `android-studio`;
|
| 169 |
+
move this folder e.g. to `~/android-studio`.
|
| 170 |
+
|
| 171 |
+
3. To launch Android Studio for the first time, open a terminal, navigate to
|
| 172 |
+
`~/android-studio/bin`, execute `./studio.sh` and use all the standard values
|
| 173 |
+
from the wizard.
|
| 174 |
+
|
| 175 |
+
4. Android Studio now asks you if you want to open an existing project;
|
| 176 |
+
choose `~/deltachat-android` as created in the "Build" chapter (Android Studio starts to
|
| 177 |
+
build the project, however, there are some steps missing before this will
|
| 178 |
+
succeed).
|
| 179 |
+
|
| 180 |
+
5. If components are missing, click on the corresponding error
|
| 181 |
+
message and install eg. required SDKs and the "Build-Tools" (you should
|
| 182 |
+
also find the option at "Tools / Android / SDK Manager / SDK Platforms").
|
| 183 |
+
Now the build should succeed - but the app still misses the native part.
|
| 184 |
+
|
| 185 |
+
6. Download Android NDK from
|
| 186 |
+
[NDK Archives](https://developer.android.com/ndk/downloads)
|
| 187 |
+
and extract the archive containing a single folder
|
| 188 |
+
called something like `android-ndk-r23b-linux`; move this folder e.g. to `~/android-ndk`.
|
| 189 |
+
|
| 190 |
+
7. Export the folder path to your environment as `ANDROID_NDK_ROOT` and add it to `PATH`.
|
| 191 |
+
You can achieve this e.g. by adding this to your `.bashrc`
|
| 192 |
+
```bash
|
| 193 |
+
export ANDROID_NDK_ROOT=${HOME}/android-ndk
|
| 194 |
+
export PATH=${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/:${ANDROID_NDK_ROOT}
|
| 195 |
+
```
|
| 196 |
+
|
| 197 |
+
## Run UI Tests and Benchmarks
|
| 198 |
+
|
| 199 |
+
- You don't necessarily need a dedicated testing device.
|
| 200 |
+
Backup your current account first, maybe there are some bugs in switching accounts.
|
| 201 |
+
|
| 202 |
+
- You can run benchmarks on either an emulated device or a real device.
|
| 203 |
+
You need at least Android 9. For better benchmark results,
|
| 204 |
+
you should run the benchmark on a real device and make sure that the core is compiled in release mode.
|
| 205 |
+
|
| 206 |
+
- Disable animations on your device, otherwise the test may fail:
|
| 207 |
+
at "Developer options"
|
| 208 |
+
set all of "Window animation scale", "Transition animation scale" and "Animator duration scale" to 0x
|
| 209 |
+
|
| 210 |
+
- In Android Studio: "File" / "Sync project with gradle files"
|
| 211 |
+
|
| 212 |
+
- In Android Studio: "Run" / "Edit configurations" / "+" / "Android Instrumented test":
|
| 213 |
+
Either select a specific class or select "All in Module" / "OK" /
|
| 214 |
+
Select your configuration in the toolbar / Click on the green "run" button in the toolbar to run the tests
|
| 215 |
+
|
| 216 |
+
### Get the benchmark results
|
| 217 |
+
|
| 218 |
+
When the benchmark is done, you will get a result like
|
| 219 |
+
`MEASURED RESULTS (Benchmark) - Going thorough all 10 chats: 11635,11207,11363,11352,11279,11183,11137,11145,11032,11057`.
|
| 220 |
+
You can paste `11635,11207,11363,11352,11279,11183,11137,11145,11032,11057`
|
| 221 |
+
into a cell in a LibreOffice spreadsheet, do "Data" / "Text to columns",
|
| 222 |
+
choose `,` as a separator, hit "OK", and create a diagram.
|
| 223 |
+
|
| 224 |
+
### Run online tests
|
| 225 |
+
|
| 226 |
+
For some tests, you need to provide the credentials to an actual email account.
|
| 227 |
+
You have 2 ways to do this:
|
| 228 |
+
|
| 229 |
+
1. (Recommended): Put them into the file ~/.gradle/gradle.properties (create it if it doesn't exist):
|
| 230 |
+
```
|
| 231 |
+
TEST_ADDR=youraccount@yourdomain.org
|
| 232 |
+
TEST_MAIL_PW=youpassword
|
| 233 |
+
```
|
| 234 |
+
|
| 235 |
+
2. Or set them via environment variables.
|
| 236 |
+
|
| 237 |
+
## Decoding Symbols in Crash Reports
|
| 238 |
+
|
| 239 |
+
```
|
| 240 |
+
$ANDROID_NDK_ROOT/ndk-stack --sym obj/local/armeabi-v7a --dump crash.txt > decoded.txt
|
| 241 |
+
```
|
| 242 |
+
|
| 243 |
+
`obj/local/armeabi-v7a` is the extracted path from `deltachat-gplay-release-X.X.X.apk-symbols.zip` file from https://download.delta.chat/android/symbols/
|
| 244 |
+
|
| 245 |
+
Replace `armeabi-v7a` by the correct architecture the logs come from (can be guessed by trial and error)
|
CHANGELOG.md
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Contributing Guidelines
|
| 2 |
+
|
| 3 |
+
Thank you for looking for ways to help on Delta Chat Android!
|
| 4 |
+
|
| 5 |
+
This document tries to outline some conventions that may not be obvious
|
| 6 |
+
and aims to give a good starting point to new contributors.
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
## Reporting Bugs
|
| 10 |
+
|
| 11 |
+
If you found a bug, [report it on Github](https://github.com/deltachat/deltachat-android/issues).
|
| 12 |
+
|
| 13 |
+
Project maintainers may transfer bugs that are not UI specific
|
| 14 |
+
(eg. network, database or encryption related)
|
| 15 |
+
to [Delta Chat Core](https://github.com/deltachat/deltachat-core-rust/issues).
|
| 16 |
+
If you assume beforehand, that the bug you've found belongs to Core,
|
| 17 |
+
you can report there directly.
|
| 18 |
+
|
| 19 |
+
Please search both open and closed issues to make sure your bug report is not a duplicate.
|
| 20 |
+
|
| 21 |
+
For community interactions around Delta Chat
|
| 22 |
+
please read our [Community Standards](https://delta.chat/community-standards).
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
## Proposing Features
|
| 26 |
+
|
| 27 |
+
If you have a feature request,
|
| 28 |
+
create a new topic on the [Forum](https://support.delta.chat/c/features/6).
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
## Rough UX Philosophy
|
| 32 |
+
|
| 33 |
+
Some rough ideas, that may be helpful when thinking about how to enhance things:
|
| 34 |
+
|
| 35 |
+
- Work hard to avoid options and up-front choices.
|
| 36 |
+
Thinking about concrete user stories may help on that.
|
| 37 |
+
- Avoid to speak about keys and other hard to understand things in the primary UI.
|
| 38 |
+
- The app shall work offline as well as with bad network.
|
| 39 |
+
- Users do not read (much).
|
| 40 |
+
- Consistency matters.
|
| 41 |
+
- Offer only things that are highly useful to many people in primary UI.
|
| 42 |
+
If really needed, bury other things eg. in some menus.
|
| 43 |
+
- The app should be for the many, not for the few.
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
## Contributing Code
|
| 47 |
+
|
| 48 |
+
The [BUILDING.md](./BUILDING.md) file explains in detail how to set up the build environment.
|
| 49 |
+
Please follow all steps precisely.
|
| 50 |
+
If you run into troubles,
|
| 51 |
+
ask on one of the [communication channels](https://delta.chat/contribute) for help.
|
| 52 |
+
|
| 53 |
+
To contribute code,
|
| 54 |
+
[open a Pull Request](https://github.com/deltachat/deltachat-android/pulls).
|
| 55 |
+
|
| 56 |
+
If you have write access to the repository,
|
| 57 |
+
push a branch named `<username>/<feature>`
|
| 58 |
+
so it is clear who is responsible for the branch,
|
| 59 |
+
and open a PR proposing to merge the change.
|
| 60 |
+
Otherwise fork the repository and create a branch in your fork.
|
| 61 |
+
|
| 62 |
+
Please add a meaningful description to your PR
|
| 63 |
+
so that reviewers get an idea about what the modifications are supposed to do.
|
| 64 |
+
|
| 65 |
+
A meaningful PR title is helpful for [updating `CHANGELOG.md` on releases](./RELEASE.md)
|
| 66 |
+
(CHANGELOG.md is updated manually
|
| 67 |
+
to only add things that are at least roughly understandable by the end user)
|
| 68 |
+
|
| 69 |
+
If the changes affect the user interface,
|
| 70 |
+
screenshots are very helpful,
|
| 71 |
+
esp. before/after screenshots.
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
### Coding Conventions
|
| 75 |
+
|
| 76 |
+
Source files are partly derived from different other open source projects
|
| 77 |
+
and may follow different coding styles and conventions.
|
| 78 |
+
|
| 79 |
+
If you do a PR fixing a bug or adding a feature,
|
| 80 |
+
please embrace the coding convention you see in the corresponding files,
|
| 81 |
+
so that the result fits well together.
|
| 82 |
+
|
| 83 |
+
Do not refactor or rename things in the same PR
|
| 84 |
+
to make the diff small and the PR easy to review.
|
| 85 |
+
|
| 86 |
+
Project language is Java.
|
| 87 |
+
|
| 88 |
+
By using [Delta Chat Core](https://github.com/deltachat/deltachat-core-rust)
|
| 89 |
+
there is already a strong separation between "UI" and "Model".
|
| 90 |
+
Further separations and abstraction layers are often not helpful
|
| 91 |
+
and only add more complexity.
|
| 92 |
+
|
| 93 |
+
Try to avoid premature optimisation
|
| 94 |
+
and complexity because it "may be needed in some future".
|
| 95 |
+
Usually, it is not.
|
| 96 |
+
|
| 97 |
+
Readable code is better than having some Java paradigms fulfilled.
|
| 98 |
+
Classic Java has a strong drive to add lots of classes, factories, one-liner-functions.
|
| 99 |
+
Try to not follow these patterns and keep things really on point and simple.
|
| 100 |
+
If this gets in conflict with embracing existing style, however,
|
| 101 |
+
consistency with existing code is more important.
|
| 102 |
+
|
| 103 |
+
The "Delta Chat Core" is a high-level interface to what the UI actually needs,
|
| 104 |
+
data should be served in a form that the UI do not need much additional work.
|
| 105 |
+
If this is not the case, consider a feature proposal to "Delta Chat Core".
|
| 106 |
+
|
| 107 |
+
|
| 108 |
+
### Merging Conventions
|
| 109 |
+
|
| 110 |
+
PR are merged usually to the branch `main` from which [releases](./RELEASE.md) are done.
|
| 111 |
+
|
| 112 |
+
As a default, do a `git rebase main` in case feature branches and `main` differ too much.
|
| 113 |
+
|
| 114 |
+
Once a PR has an approval, unless stated otherwise, it can be merged by the author.
|
| 115 |
+
A PR may be approved but postponed to be merged eg. because of an ongoing release.
|
| 116 |
+
|
| 117 |
+
To ensure the correct merge merge strategy, merging left up to the PR author:
|
| 118 |
+
|
| 119 |
+
- Usually, PR are squash-merged
|
| 120 |
+
as UI development often results in tiny tweak commits that are not that meaningful on their own.
|
| 121 |
+
- If all commits are meaningful and have a well-written description,
|
| 122 |
+
they can be rebased-merged.
|
| 123 |
+
|
| 124 |
+
If you do not have write access to the repository,
|
| 125 |
+
you may leave a note in the PR about the desired merge strategy.
|
| 126 |
+
|
| 127 |
+
|
| 128 |
+
## Translations
|
| 129 |
+
|
| 130 |
+
Translations are done via [Transifex](https://explore.transifex.com/delta-chat/),
|
| 131 |
+
you can log in there with your E-Mail Address or with a Github or Google handle.
|
| 132 |
+
You find two projects there:
|
| 133 |
+
- "Delta Chat App" contains the strings used in the app's UI
|
| 134 |
+
- "Delta Chat Website" contains the offline help from "Settings / Help"
|
| 135 |
+
as well as the pages used on <https://delta.chat>
|
| 136 |
+
|
| 137 |
+
Most strings and the whole help are used for all systems
|
| 138 |
+
(Android, iOS, Linux, Windows, macOS)
|
| 139 |
+
and should be formulated accordingly.
|
| 140 |
+
|
| 141 |
+
If you want to change the english sources,
|
| 142 |
+
do a PR to [`strings.xml`](https://github.com/deltachat/deltachat-android/blob/main/res/values/strings.xml)
|
| 143 |
+
or to [`help.md`](https://github.com/deltachat/deltachat-pages/blob/master/en/help.md).
|
| 144 |
+
Again, please do not mix adding things and refactorings, esp. for `help.md`,
|
| 145 |
+
this would require retranslations and should be considered carefully.
|
| 146 |
+
|
| 147 |
+
|
| 148 |
+
## Other Ways To Contribute
|
| 149 |
+
|
| 150 |
+
For other ways to contribute, refer to the [website](https://delta.chat/contribute).
|
| 151 |
+
|
| 152 |
+
If you think, something important is missed in this overview,
|
| 153 |
+
please do a PR to this document :)
|
Dockerfile
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM docker.io/debian:12.4
|
| 2 |
+
|
| 3 |
+
# Install Android Studio requirements
|
| 4 |
+
# See https://developer.android.com/studio/install#linux
|
| 5 |
+
RUN apt-get update -y \
|
| 6 |
+
&& apt-get install -y --no-install-recommends \
|
| 7 |
+
wget \
|
| 8 |
+
curl \
|
| 9 |
+
unzip \
|
| 10 |
+
openjdk-17-jre \
|
| 11 |
+
file \
|
| 12 |
+
build-essential \
|
| 13 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 14 |
+
|
| 15 |
+
ARG USER=deltachat
|
| 16 |
+
ARG UID=1000
|
| 17 |
+
ARG GID=1000
|
| 18 |
+
|
| 19 |
+
RUN groupadd -g $GID -o $USER
|
| 20 |
+
RUN useradd -m -u $UID -g $GID -o $USER
|
| 21 |
+
USER $USER
|
| 22 |
+
|
| 23 |
+
ENV ANDROID_SDK_ROOT /home/${USER}/android-sdk
|
| 24 |
+
RUN mkdir ${ANDROID_SDK_ROOT}
|
| 25 |
+
WORKDIR $ANDROID_SDK_ROOT
|
| 26 |
+
RUN wget -q https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip && \
|
| 27 |
+
unzip commandlinetools-linux-8512546_latest.zip && \
|
| 28 |
+
rm commandlinetools-linux-8512546_latest.zip
|
| 29 |
+
|
| 30 |
+
RUN yes | ${ANDROID_SDK_ROOT}/cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_SDK_ROOT} --licenses
|
| 31 |
+
|
| 32 |
+
ENV PATH ${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/bin
|
| 33 |
+
|
| 34 |
+
# Install NDK manually. Other SDK parts are installed automatically by gradle.
|
| 35 |
+
#
|
| 36 |
+
# If you change the NDK version here, also change it in `flake.nix`.
|
| 37 |
+
# NDK version r27 LTS aka 27.0.11902837
|
| 38 |
+
RUN sdkmanager --sdk_root=${ANDROID_SDK_ROOT} 'ndk;27.0.11902837'
|
| 39 |
+
|
| 40 |
+
ENV ANDROID_NDK_ROOT ${ANDROID_SDK_ROOT}/ndk/27.0.11902837
|
| 41 |
+
ENV PATH ${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/
|
| 42 |
+
|
| 43 |
+
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain none
|
| 44 |
+
ENV PATH ${PATH}:/home/${USER}/.cargo/bin
|
LICENSE
ADDED
|
@@ -0,0 +1,621 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
GNU GENERAL PUBLIC LICENSE
|
| 2 |
+
Version 3, 29 June 2007
|
| 3 |
+
|
| 4 |
+
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
| 5 |
+
Everyone is permitted to copy and distribute verbatim copies
|
| 6 |
+
of this license document, but changing it is not allowed.
|
| 7 |
+
|
| 8 |
+
Preamble
|
| 9 |
+
|
| 10 |
+
The GNU General Public License is a free, copyleft license for
|
| 11 |
+
software and other kinds of works.
|
| 12 |
+
|
| 13 |
+
The licenses for most software and other practical works are designed
|
| 14 |
+
to take away your freedom to share and change the works. By contrast,
|
| 15 |
+
the GNU General Public License is intended to guarantee your freedom to
|
| 16 |
+
share and change all versions of a program--to make sure it remains free
|
| 17 |
+
software for all its users. We, the Free Software Foundation, use the
|
| 18 |
+
GNU General Public License for most of our software; it applies also to
|
| 19 |
+
any other work released this way by its authors. You can apply it to
|
| 20 |
+
your programs, too.
|
| 21 |
+
|
| 22 |
+
When we speak of free software, we are referring to freedom, not
|
| 23 |
+
price. Our General Public Licenses are designed to make sure that you
|
| 24 |
+
have the freedom to distribute copies of free software (and charge for
|
| 25 |
+
them if you wish), that you receive source code or can get it if you
|
| 26 |
+
want it, that you can change the software or use pieces of it in new
|
| 27 |
+
free programs, and that you know you can do these things.
|
| 28 |
+
|
| 29 |
+
To protect your rights, we need to prevent others from denying you
|
| 30 |
+
these rights or asking you to surrender the rights. Therefore, you have
|
| 31 |
+
certain responsibilities if you distribute copies of the software, or if
|
| 32 |
+
you modify it: responsibilities to respect the freedom of others.
|
| 33 |
+
|
| 34 |
+
For example, if you distribute copies of such a program, whether
|
| 35 |
+
gratis or for a fee, you must pass on to the recipients the same
|
| 36 |
+
freedoms that you received. You must make sure that they, too, receive
|
| 37 |
+
or can get the source code. And you must show them these terms so they
|
| 38 |
+
know their rights.
|
| 39 |
+
|
| 40 |
+
Developers that use the GNU GPL protect your rights with two steps:
|
| 41 |
+
(1) assert copyright on the software, and (2) offer you this License
|
| 42 |
+
giving you legal permission to copy, distribute and/or modify it.
|
| 43 |
+
|
| 44 |
+
For the developers' and authors' protection, the GPL clearly explains
|
| 45 |
+
that there is no warranty for this free software. For both users' and
|
| 46 |
+
authors' sake, the GPL requires that modified versions be marked as
|
| 47 |
+
changed, so that their problems will not be attributed erroneously to
|
| 48 |
+
authors of previous versions.
|
| 49 |
+
|
| 50 |
+
Some devices are designed to deny users access to install or run
|
| 51 |
+
modified versions of the software inside them, although the manufacturer
|
| 52 |
+
can do so. This is fundamentally incompatible with the aim of
|
| 53 |
+
protecting users' freedom to change the software. The systematic
|
| 54 |
+
pattern of such abuse occurs in the area of products for individuals to
|
| 55 |
+
use, which is precisely where it is most unacceptable. Therefore, we
|
| 56 |
+
have designed this version of the GPL to prohibit the practice for those
|
| 57 |
+
products. If such problems arise substantially in other domains, we
|
| 58 |
+
stand ready to extend this provision to those domains in future versions
|
| 59 |
+
of the GPL, as needed to protect the freedom of users.
|
| 60 |
+
|
| 61 |
+
Finally, every program is threatened constantly by software patents.
|
| 62 |
+
States should not allow patents to restrict development and use of
|
| 63 |
+
software on general-purpose computers, but in those that do, we wish to
|
| 64 |
+
avoid the special danger that patents applied to a free program could
|
| 65 |
+
make it effectively proprietary. To prevent this, the GPL assures that
|
| 66 |
+
patents cannot be used to render the program non-free.
|
| 67 |
+
|
| 68 |
+
The precise terms and conditions for copying, distribution and
|
| 69 |
+
modification follow.
|
| 70 |
+
|
| 71 |
+
TERMS AND CONDITIONS
|
| 72 |
+
|
| 73 |
+
0. Definitions.
|
| 74 |
+
|
| 75 |
+
"This License" refers to version 3 of the GNU General Public License.
|
| 76 |
+
|
| 77 |
+
"Copyright" also means copyright-like laws that apply to other kinds of
|
| 78 |
+
works, such as semiconductor masks.
|
| 79 |
+
|
| 80 |
+
"The Program" refers to any copyrightable work licensed under this
|
| 81 |
+
License. Each licensee is addressed as "you". "Licensees" and
|
| 82 |
+
"recipients" may be individuals or organizations.
|
| 83 |
+
|
| 84 |
+
To "modify" a work means to copy from or adapt all or part of the work
|
| 85 |
+
in a fashion requiring copyright permission, other than the making of an
|
| 86 |
+
exact copy. The resulting work is called a "modified version" of the
|
| 87 |
+
earlier work or a work "based on" the earlier work.
|
| 88 |
+
|
| 89 |
+
A "covered work" means either the unmodified Program or a work based
|
| 90 |
+
on the Program.
|
| 91 |
+
|
| 92 |
+
To "propagate" a work means to do anything with it that, without
|
| 93 |
+
permission, would make you directly or secondarily liable for
|
| 94 |
+
infringement under applicable copyright law, except executing it on a
|
| 95 |
+
computer or modifying a private copy. Propagation includes copying,
|
| 96 |
+
distribution (with or without modification), making available to the
|
| 97 |
+
public, and in some countries other activities as well.
|
| 98 |
+
|
| 99 |
+
To "convey" a work means any kind of propagation that enables other
|
| 100 |
+
parties to make or receive copies. Mere interaction with a user through
|
| 101 |
+
a computer network, with no transfer of a copy, is not conveying.
|
| 102 |
+
|
| 103 |
+
An interactive user interface displays "Appropriate Legal Notices"
|
| 104 |
+
to the extent that it includes a convenient and prominently visible
|
| 105 |
+
feature that (1) displays an appropriate copyright notice, and (2)
|
| 106 |
+
tells the user that there is no warranty for the work (except to the
|
| 107 |
+
extent that warranties are provided), that licensees may convey the
|
| 108 |
+
work under this License, and how to view a copy of this License. If
|
| 109 |
+
the interface presents a list of user commands or options, such as a
|
| 110 |
+
menu, a prominent item in the list meets this criterion.
|
| 111 |
+
|
| 112 |
+
1. Source Code.
|
| 113 |
+
|
| 114 |
+
The "source code" for a work means the preferred form of the work
|
| 115 |
+
for making modifications to it. "Object code" means any non-source
|
| 116 |
+
form of a work.
|
| 117 |
+
|
| 118 |
+
A "Standard Interface" means an interface that either is an official
|
| 119 |
+
standard defined by a recognized standards body, or, in the case of
|
| 120 |
+
interfaces specified for a particular programming language, one that
|
| 121 |
+
is widely used among developers working in that language.
|
| 122 |
+
|
| 123 |
+
The "System Libraries" of an executable work include anything, other
|
| 124 |
+
than the work as a whole, that (a) is included in the normal form of
|
| 125 |
+
packaging a Major Component, but which is not part of that Major
|
| 126 |
+
Component, and (b) serves only to enable use of the work with that
|
| 127 |
+
Major Component, or to implement a Standard Interface for which an
|
| 128 |
+
implementation is available to the public in source code form. A
|
| 129 |
+
"Major Component", in this context, means a major essential component
|
| 130 |
+
(kernel, window system, and so on) of the specific operating system
|
| 131 |
+
(if any) on which the executable work runs, or a compiler used to
|
| 132 |
+
produce the work, or an object code interpreter used to run it.
|
| 133 |
+
|
| 134 |
+
The "Corresponding Source" for a work in object code form means all
|
| 135 |
+
the source code needed to generate, install, and (for an executable
|
| 136 |
+
work) run the object code and to modify the work, including scripts to
|
| 137 |
+
control those activities. However, it does not include the work's
|
| 138 |
+
System Libraries, or general-purpose tools or generally available free
|
| 139 |
+
programs which are used unmodified in performing those activities but
|
| 140 |
+
which are not part of the work. For example, Corresponding Source
|
| 141 |
+
includes interface definition files associated with source files for
|
| 142 |
+
the work, and the source code for shared libraries and dynamically
|
| 143 |
+
linked subprograms that the work is specifically designed to require,
|
| 144 |
+
such as by intimate data communication or control flow between those
|
| 145 |
+
subprograms and other parts of the work.
|
| 146 |
+
|
| 147 |
+
The Corresponding Source need not include anything that users
|
| 148 |
+
can regenerate automatically from other parts of the Corresponding
|
| 149 |
+
Source.
|
| 150 |
+
|
| 151 |
+
The Corresponding Source for a work in source code form is that
|
| 152 |
+
same work.
|
| 153 |
+
|
| 154 |
+
2. Basic Permissions.
|
| 155 |
+
|
| 156 |
+
All rights granted under this License are granted for the term of
|
| 157 |
+
copyright on the Program, and are irrevocable provided the stated
|
| 158 |
+
conditions are met. This License explicitly affirms your unlimited
|
| 159 |
+
permission to run the unmodified Program. The output from running a
|
| 160 |
+
covered work is covered by this License only if the output, given its
|
| 161 |
+
content, constitutes a covered work. This License acknowledges your
|
| 162 |
+
rights of fair use or other equivalent, as provided by copyright law.
|
| 163 |
+
|
| 164 |
+
You may make, run and propagate covered works that you do not
|
| 165 |
+
convey, without conditions so long as your license otherwise remains
|
| 166 |
+
in force. You may convey covered works to others for the sole purpose
|
| 167 |
+
of having them make modifications exclusively for you, or provide you
|
| 168 |
+
with facilities for running those works, provided that you comply with
|
| 169 |
+
the terms of this License in conveying all material for which you do
|
| 170 |
+
not control copyright. Those thus making or running the covered works
|
| 171 |
+
for you must do so exclusively on your behalf, under your direction
|
| 172 |
+
and control, on terms that prohibit them from making any copies of
|
| 173 |
+
your copyrighted material outside their relationship with you.
|
| 174 |
+
|
| 175 |
+
Conveying under any other circumstances is permitted solely under
|
| 176 |
+
the conditions stated below. Sublicensing is not allowed; section 10
|
| 177 |
+
makes it unnecessary.
|
| 178 |
+
|
| 179 |
+
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
| 180 |
+
|
| 181 |
+
No covered work shall be deemed part of an effective technological
|
| 182 |
+
measure under any applicable law fulfilling obligations under article
|
| 183 |
+
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
| 184 |
+
similar laws prohibiting or restricting circumvention of such
|
| 185 |
+
measures.
|
| 186 |
+
|
| 187 |
+
When you convey a covered work, you waive any legal power to forbid
|
| 188 |
+
circumvention of technological measures to the extent such circumvention
|
| 189 |
+
is effected by exercising rights under this License with respect to
|
| 190 |
+
the covered work, and you disclaim any intention to limit operation or
|
| 191 |
+
modification of the work as a means of enforcing, against the work's
|
| 192 |
+
users, your or third parties' legal rights to forbid circumvention of
|
| 193 |
+
technological measures.
|
| 194 |
+
|
| 195 |
+
4. Conveying Verbatim Copies.
|
| 196 |
+
|
| 197 |
+
You may convey verbatim copies of the Program's source code as you
|
| 198 |
+
receive it, in any medium, provided that you conspicuously and
|
| 199 |
+
appropriately publish on each copy an appropriate copyright notice;
|
| 200 |
+
keep intact all notices stating that this License and any
|
| 201 |
+
non-permissive terms added in accord with section 7 apply to the code;
|
| 202 |
+
keep intact all notices of the absence of any warranty; and give all
|
| 203 |
+
recipients a copy of this License along with the Program.
|
| 204 |
+
|
| 205 |
+
You may charge any price or no price for each copy that you convey,
|
| 206 |
+
and you may offer support or warranty protection for a fee.
|
| 207 |
+
|
| 208 |
+
5. Conveying Modified Source Versions.
|
| 209 |
+
|
| 210 |
+
You may convey a work based on the Program, or the modifications to
|
| 211 |
+
produce it from the Program, in the form of source code under the
|
| 212 |
+
terms of section 4, provided that you also meet all of these conditions:
|
| 213 |
+
|
| 214 |
+
a) The work must carry prominent notices stating that you modified
|
| 215 |
+
it, and giving a relevant date.
|
| 216 |
+
|
| 217 |
+
b) The work must carry prominent notices stating that it is
|
| 218 |
+
released under this License and any conditions added under section
|
| 219 |
+
7. This requirement modifies the requirement in section 4 to
|
| 220 |
+
"keep intact all notices".
|
| 221 |
+
|
| 222 |
+
c) You must license the entire work, as a whole, under this
|
| 223 |
+
License to anyone who comes into possession of a copy. This
|
| 224 |
+
License will therefore apply, along with any applicable section 7
|
| 225 |
+
additional terms, to the whole of the work, and all its parts,
|
| 226 |
+
regardless of how they are packaged. This License gives no
|
| 227 |
+
permission to license the work in any other way, but it does not
|
| 228 |
+
invalidate such permission if you have separately received it.
|
| 229 |
+
|
| 230 |
+
d) If the work has interactive user interfaces, each must display
|
| 231 |
+
Appropriate Legal Notices; however, if the Program has interactive
|
| 232 |
+
interfaces that do not display Appropriate Legal Notices, your
|
| 233 |
+
work need not make them do so.
|
| 234 |
+
|
| 235 |
+
A compilation of a covered work with other separate and independent
|
| 236 |
+
works, which are not by their nature extensions of the covered work,
|
| 237 |
+
and which are not combined with it such as to form a larger program,
|
| 238 |
+
in or on a volume of a storage or distribution medium, is called an
|
| 239 |
+
"aggregate" if the compilation and its resulting copyright are not
|
| 240 |
+
used to limit the access or legal rights of the compilation's users
|
| 241 |
+
beyond what the individual works permit. Inclusion of a covered work
|
| 242 |
+
in an aggregate does not cause this License to apply to the other
|
| 243 |
+
parts of the aggregate.
|
| 244 |
+
|
| 245 |
+
6. Conveying Non-Source Forms.
|
| 246 |
+
|
| 247 |
+
You may convey a covered work in object code form under the terms
|
| 248 |
+
of sections 4 and 5, provided that you also convey the
|
| 249 |
+
machine-readable Corresponding Source under the terms of this License,
|
| 250 |
+
in one of these ways:
|
| 251 |
+
|
| 252 |
+
a) Convey the object code in, or embodied in, a physical product
|
| 253 |
+
(including a physical distribution medium), accompanied by the
|
| 254 |
+
Corresponding Source fixed on a durable physical medium
|
| 255 |
+
customarily used for software interchange.
|
| 256 |
+
|
| 257 |
+
b) Convey the object code in, or embodied in, a physical product
|
| 258 |
+
(including a physical distribution medium), accompanied by a
|
| 259 |
+
written offer, valid for at least three years and valid for as
|
| 260 |
+
long as you offer spare parts or customer support for that product
|
| 261 |
+
model, to give anyone who possesses the object code either (1) a
|
| 262 |
+
copy of the Corresponding Source for all the software in the
|
| 263 |
+
product that is covered by this License, on a durable physical
|
| 264 |
+
medium customarily used for software interchange, for a price no
|
| 265 |
+
more than your reasonable cost of physically performing this
|
| 266 |
+
conveying of source, or (2) access to copy the
|
| 267 |
+
Corresponding Source from a network server at no charge.
|
| 268 |
+
|
| 269 |
+
c) Convey individual copies of the object code with a copy of the
|
| 270 |
+
written offer to provide the Corresponding Source. This
|
| 271 |
+
alternative is allowed only occasionally and noncommercially, and
|
| 272 |
+
only if you received the object code with such an offer, in accord
|
| 273 |
+
with subsection 6b.
|
| 274 |
+
|
| 275 |
+
d) Convey the object code by offering access from a designated
|
| 276 |
+
place (gratis or for a charge), and offer equivalent access to the
|
| 277 |
+
Corresponding Source in the same way through the same place at no
|
| 278 |
+
further charge. You need not require recipients to copy the
|
| 279 |
+
Corresponding Source along with the object code. If the place to
|
| 280 |
+
copy the object code is a network server, the Corresponding Source
|
| 281 |
+
may be on a different server (operated by you or a third party)
|
| 282 |
+
that supports equivalent copying facilities, provided you maintain
|
| 283 |
+
clear directions next to the object code saying where to find the
|
| 284 |
+
Corresponding Source. Regardless of what server hosts the
|
| 285 |
+
Corresponding Source, you remain obligated to ensure that it is
|
| 286 |
+
available for as long as needed to satisfy these requirements.
|
| 287 |
+
|
| 288 |
+
e) Convey the object code using peer-to-peer transmission, provided
|
| 289 |
+
you inform other peers where the object code and Corresponding
|
| 290 |
+
Source of the work are being offered to the general public at no
|
| 291 |
+
charge under subsection 6d.
|
| 292 |
+
|
| 293 |
+
A separable portion of the object code, whose source code is excluded
|
| 294 |
+
from the Corresponding Source as a System Library, need not be
|
| 295 |
+
included in conveying the object code work.
|
| 296 |
+
|
| 297 |
+
A "User Product" is either (1) a "consumer product", which means any
|
| 298 |
+
tangible personal property which is normally used for personal, family,
|
| 299 |
+
or household purposes, or (2) anything designed or sold for incorporation
|
| 300 |
+
into a dwelling. In determining whether a product is a consumer product,
|
| 301 |
+
doubtful cases shall be resolved in favor of coverage. For a particular
|
| 302 |
+
product received by a particular user, "normally used" refers to a
|
| 303 |
+
typical or common use of that class of product, regardless of the status
|
| 304 |
+
of the particular user or of the way in which the particular user
|
| 305 |
+
actually uses, or expects or is expected to use, the product. A product
|
| 306 |
+
is a consumer product regardless of whether the product has substantial
|
| 307 |
+
commercial, industrial or non-consumer uses, unless such uses represent
|
| 308 |
+
the only significant mode of use of the product.
|
| 309 |
+
|
| 310 |
+
"Installation Information" for a User Product means any methods,
|
| 311 |
+
procedures, authorization keys, or other information required to install
|
| 312 |
+
and execute modified versions of a covered work in that User Product from
|
| 313 |
+
a modified version of its Corresponding Source. The information must
|
| 314 |
+
suffice to ensure that the continued functioning of the modified object
|
| 315 |
+
code is in no case prevented or interfered with solely because
|
| 316 |
+
modification has been made.
|
| 317 |
+
|
| 318 |
+
If you convey an object code work under this section in, or with, or
|
| 319 |
+
specifically for use in, a User Product, and the conveying occurs as
|
| 320 |
+
part of a transaction in which the right of possession and use of the
|
| 321 |
+
User Product is transferred to the recipient in perpetuity or for a
|
| 322 |
+
fixed term (regardless of how the transaction is characterized), the
|
| 323 |
+
Corresponding Source conveyed under this section must be accompanied
|
| 324 |
+
by the Installation Information. But this requirement does not apply
|
| 325 |
+
if neither you nor any third party retains the ability to install
|
| 326 |
+
modified object code on the User Product (for example, the work has
|
| 327 |
+
been installed in ROM).
|
| 328 |
+
|
| 329 |
+
The requirement to provide Installation Information does not include a
|
| 330 |
+
requirement to continue to provide support service, warranty, or updates
|
| 331 |
+
for a work that has been modified or installed by the recipient, or for
|
| 332 |
+
the User Product in which it has been modified or installed. Access to a
|
| 333 |
+
network may be denied when the modification itself materially and
|
| 334 |
+
adversely affects the operation of the network or violates the rules and
|
| 335 |
+
protocols for communication across the network.
|
| 336 |
+
|
| 337 |
+
Corresponding Source conveyed, and Installation Information provided,
|
| 338 |
+
in accord with this section must be in a format that is publicly
|
| 339 |
+
documented (and with an implementation available to the public in
|
| 340 |
+
source code form), and must require no special password or key for
|
| 341 |
+
unpacking, reading or copying.
|
| 342 |
+
|
| 343 |
+
7. Additional Terms.
|
| 344 |
+
|
| 345 |
+
"Additional permissions" are terms that supplement the terms of this
|
| 346 |
+
License by making exceptions from one or more of its conditions.
|
| 347 |
+
Additional permissions that are applicable to the entire Program shall
|
| 348 |
+
be treated as though they were included in this License, to the extent
|
| 349 |
+
that they are valid under applicable law. If additional permissions
|
| 350 |
+
apply only to part of the Program, that part may be used separately
|
| 351 |
+
under those permissions, but the entire Program remains governed by
|
| 352 |
+
this License without regard to the additional permissions.
|
| 353 |
+
|
| 354 |
+
When you convey a copy of a covered work, you may at your option
|
| 355 |
+
remove any additional permissions from that copy, or from any part of
|
| 356 |
+
it. (Additional permissions may be written to require their own
|
| 357 |
+
removal in certain cases when you modify the work.) You may place
|
| 358 |
+
additional permissions on material, added by you to a covered work,
|
| 359 |
+
for which you have or can give appropriate copyright permission.
|
| 360 |
+
|
| 361 |
+
Notwithstanding any other provision of this License, for material you
|
| 362 |
+
add to a covered work, you may (if authorized by the copyright holders of
|
| 363 |
+
that material) supplement the terms of this License with terms:
|
| 364 |
+
|
| 365 |
+
a) Disclaiming warranty or limiting liability differently from the
|
| 366 |
+
terms of sections 15 and 16 of this License; or
|
| 367 |
+
|
| 368 |
+
b) Requiring preservation of specified reasonable legal notices or
|
| 369 |
+
author attributions in that material or in the Appropriate Legal
|
| 370 |
+
Notices displayed by works containing it; or
|
| 371 |
+
|
| 372 |
+
c) Prohibiting misrepresentation of the origin of that material, or
|
| 373 |
+
requiring that modified versions of such material be marked in
|
| 374 |
+
reasonable ways as different from the original version; or
|
| 375 |
+
|
| 376 |
+
d) Limiting the use for publicity purposes of names of licensors or
|
| 377 |
+
authors of the material; or
|
| 378 |
+
|
| 379 |
+
e) Declining to grant rights under trademark law for use of some
|
| 380 |
+
trade names, trademarks, or service marks; or
|
| 381 |
+
|
| 382 |
+
f) Requiring indemnification of licensors and authors of that
|
| 383 |
+
material by anyone who conveys the material (or modified versions of
|
| 384 |
+
it) with contractual assumptions of liability to the recipient, for
|
| 385 |
+
any liability that these contractual assumptions directly impose on
|
| 386 |
+
those licensors and authors.
|
| 387 |
+
|
| 388 |
+
All other non-permissive additional terms are considered "further
|
| 389 |
+
restrictions" within the meaning of section 10. If the Program as you
|
| 390 |
+
received it, or any part of it, contains a notice stating that it is
|
| 391 |
+
governed by this License along with a term that is a further
|
| 392 |
+
restriction, you may remove that term. If a license document contains
|
| 393 |
+
a further restriction but permits relicensing or conveying under this
|
| 394 |
+
License, you may add to a covered work material governed by the terms
|
| 395 |
+
of that license document, provided that the further restriction does
|
| 396 |
+
not survive such relicensing or conveying.
|
| 397 |
+
|
| 398 |
+
If you add terms to a covered work in accord with this section, you
|
| 399 |
+
must place, in the relevant source files, a statement of the
|
| 400 |
+
additional terms that apply to those files, or a notice indicating
|
| 401 |
+
where to find the applicable terms.
|
| 402 |
+
|
| 403 |
+
Additional terms, permissive or non-permissive, may be stated in the
|
| 404 |
+
form of a separately written license, or stated as exceptions;
|
| 405 |
+
the above requirements apply either way.
|
| 406 |
+
|
| 407 |
+
8. Termination.
|
| 408 |
+
|
| 409 |
+
You may not propagate or modify a covered work except as expressly
|
| 410 |
+
provided under this License. Any attempt otherwise to propagate or
|
| 411 |
+
modify it is void, and will automatically terminate your rights under
|
| 412 |
+
this License (including any patent licenses granted under the third
|
| 413 |
+
paragraph of section 11).
|
| 414 |
+
|
| 415 |
+
However, if you cease all violation of this License, then your
|
| 416 |
+
license from a particular copyright holder is reinstated (a)
|
| 417 |
+
provisionally, unless and until the copyright holder explicitly and
|
| 418 |
+
finally terminates your license, and (b) permanently, if the copyright
|
| 419 |
+
holder fails to notify you of the violation by some reasonable means
|
| 420 |
+
prior to 60 days after the cessation.
|
| 421 |
+
|
| 422 |
+
Moreover, your license from a particular copyright holder is
|
| 423 |
+
reinstated permanently if the copyright holder notifies you of the
|
| 424 |
+
violation by some reasonable means, this is the first time you have
|
| 425 |
+
received notice of violation of this License (for any work) from that
|
| 426 |
+
copyright holder, and you cure the violation prior to 30 days after
|
| 427 |
+
your receipt of the notice.
|
| 428 |
+
|
| 429 |
+
Termination of your rights under this section does not terminate the
|
| 430 |
+
licenses of parties who have received copies or rights from you under
|
| 431 |
+
this License. If your rights have been terminated and not permanently
|
| 432 |
+
reinstated, you do not qualify to receive new licenses for the same
|
| 433 |
+
material under section 10.
|
| 434 |
+
|
| 435 |
+
9. Acceptance Not Required for Having Copies.
|
| 436 |
+
|
| 437 |
+
You are not required to accept this License in order to receive or
|
| 438 |
+
run a copy of the Program. Ancillary propagation of a covered work
|
| 439 |
+
occurring solely as a consequence of using peer-to-peer transmission
|
| 440 |
+
to receive a copy likewise does not require acceptance. However,
|
| 441 |
+
nothing other than this License grants you permission to propagate or
|
| 442 |
+
modify any covered work. These actions infringe copyright if you do
|
| 443 |
+
not accept this License. Therefore, by modifying or propagating a
|
| 444 |
+
covered work, you indicate your acceptance of this License to do so.
|
| 445 |
+
|
| 446 |
+
10. Automatic Licensing of Downstream Recipients.
|
| 447 |
+
|
| 448 |
+
Each time you convey a covered work, the recipient automatically
|
| 449 |
+
receives a license from the original licensors, to run, modify and
|
| 450 |
+
propagate that work, subject to this License. You are not responsible
|
| 451 |
+
for enforcing compliance by third parties with this License.
|
| 452 |
+
|
| 453 |
+
An "entity transaction" is a transaction transferring control of an
|
| 454 |
+
organization, or substantially all assets of one, or subdividing an
|
| 455 |
+
organization, or merging organizations. If propagation of a covered
|
| 456 |
+
work results from an entity transaction, each party to that
|
| 457 |
+
transaction who receives a copy of the work also receives whatever
|
| 458 |
+
licenses to the work the party's predecessor in interest had or could
|
| 459 |
+
give under the previous paragraph, plus a right to possession of the
|
| 460 |
+
Corresponding Source of the work from the predecessor in interest, if
|
| 461 |
+
the predecessor has it or can get it with reasonable efforts.
|
| 462 |
+
|
| 463 |
+
You may not impose any further restrictions on the exercise of the
|
| 464 |
+
rights granted or affirmed under this License. For example, you may
|
| 465 |
+
not impose a license fee, royalty, or other charge for exercise of
|
| 466 |
+
rights granted under this License, and you may not initiate litigation
|
| 467 |
+
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
| 468 |
+
any patent claim is infringed by making, using, selling, offering for
|
| 469 |
+
sale, or importing the Program or any portion of it.
|
| 470 |
+
|
| 471 |
+
11. Patents.
|
| 472 |
+
|
| 473 |
+
A "contributor" is a copyright holder who authorizes use under this
|
| 474 |
+
License of the Program or a work on which the Program is based. The
|
| 475 |
+
work thus licensed is called the contributor's "contributor version".
|
| 476 |
+
|
| 477 |
+
A contributor's "essential patent claims" are all patent claims
|
| 478 |
+
owned or controlled by the contributor, whether already acquired or
|
| 479 |
+
hereafter acquired, that would be infringed by some manner, permitted
|
| 480 |
+
by this License, of making, using, or selling its contributor version,
|
| 481 |
+
but do not include claims that would be infringed only as a
|
| 482 |
+
consequence of further modification of the contributor version. For
|
| 483 |
+
purposes of this definition, "control" includes the right to grant
|
| 484 |
+
patent sublicenses in a manner consistent with the requirements of
|
| 485 |
+
this License.
|
| 486 |
+
|
| 487 |
+
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
| 488 |
+
patent license under the contributor's essential patent claims, to
|
| 489 |
+
make, use, sell, offer for sale, import and otherwise run, modify and
|
| 490 |
+
propagate the contents of its contributor version.
|
| 491 |
+
|
| 492 |
+
In the following three paragraphs, a "patent license" is any express
|
| 493 |
+
agreement or commitment, however denominated, not to enforce a patent
|
| 494 |
+
(such as an express permission to practice a patent or covenant not to
|
| 495 |
+
sue for patent infringement). To "grant" such a patent license to a
|
| 496 |
+
party means to make such an agreement or commitment not to enforce a
|
| 497 |
+
patent against the party.
|
| 498 |
+
|
| 499 |
+
If you convey a covered work, knowingly relying on a patent license,
|
| 500 |
+
and the Corresponding Source of the work is not available for anyone
|
| 501 |
+
to copy, free of charge and under the terms of this License, through a
|
| 502 |
+
publicly available network server or other readily accessible means,
|
| 503 |
+
then you must either (1) cause the Corresponding Source to be so
|
| 504 |
+
available, or (2) arrange to deprive yourself of the benefit of the
|
| 505 |
+
patent license for this particular work, or (3) arrange, in a manner
|
| 506 |
+
consistent with the requirements of this License, to extend the patent
|
| 507 |
+
license to downstream recipients. "Knowingly relying" means you have
|
| 508 |
+
actual knowledge that, but for the patent license, your conveying the
|
| 509 |
+
covered work in a country, or your recipient's use of the covered work
|
| 510 |
+
in a country, would infringe one or more identifiable patents in that
|
| 511 |
+
country that you have reason to believe are valid.
|
| 512 |
+
|
| 513 |
+
If, pursuant to or in connection with a single transaction or
|
| 514 |
+
arrangement, you convey, or propagate by procuring conveyance of, a
|
| 515 |
+
covered work, and grant a patent license to some of the parties
|
| 516 |
+
receiving the covered work authorizing them to use, propagate, modify
|
| 517 |
+
or convey a specific copy of the covered work, then the patent license
|
| 518 |
+
you grant is automatically extended to all recipients of the covered
|
| 519 |
+
work and works based on it.
|
| 520 |
+
|
| 521 |
+
A patent license is "discriminatory" if it does not include within
|
| 522 |
+
the scope of its coverage, prohibits the exercise of, or is
|
| 523 |
+
conditioned on the non-exercise of one or more of the rights that are
|
| 524 |
+
specifically granted under this License. You may not convey a covered
|
| 525 |
+
work if you are a party to an arrangement with a third party that is
|
| 526 |
+
in the business of distributing software, under which you make payment
|
| 527 |
+
to the third party based on the extent of your activity of conveying
|
| 528 |
+
the work, and under which the third party grants, to any of the
|
| 529 |
+
parties who would receive the covered work from you, a discriminatory
|
| 530 |
+
patent license (a) in connection with copies of the covered work
|
| 531 |
+
conveyed by you (or copies made from those copies), or (b) primarily
|
| 532 |
+
for and in connection with specific products or compilations that
|
| 533 |
+
contain the covered work, unless you entered into that arrangement,
|
| 534 |
+
or that patent license was granted, prior to 28 March 2007.
|
| 535 |
+
|
| 536 |
+
Nothing in this License shall be construed as excluding or limiting
|
| 537 |
+
any implied license or other defenses to infringement that may
|
| 538 |
+
otherwise be available to you under applicable patent law.
|
| 539 |
+
|
| 540 |
+
12. No Surrender of Others' Freedom.
|
| 541 |
+
|
| 542 |
+
If conditions are imposed on you (whether by court order, agreement or
|
| 543 |
+
otherwise) that contradict the conditions of this License, they do not
|
| 544 |
+
excuse you from the conditions of this License. If you cannot convey a
|
| 545 |
+
covered work so as to satisfy simultaneously your obligations under this
|
| 546 |
+
License and any other pertinent obligations, then as a consequence you may
|
| 547 |
+
not convey it at all. For example, if you agree to terms that obligate you
|
| 548 |
+
to collect a royalty for further conveying from those to whom you convey
|
| 549 |
+
the Program, the only way you could satisfy both those terms and this
|
| 550 |
+
License would be to refrain entirely from conveying the Program.
|
| 551 |
+
|
| 552 |
+
13. Use with the GNU Affero General Public License.
|
| 553 |
+
|
| 554 |
+
Notwithstanding any other provision of this License, you have
|
| 555 |
+
permission to link or combine any covered work with a work licensed
|
| 556 |
+
under version 3 of the GNU Affero General Public License into a single
|
| 557 |
+
combined work, and to convey the resulting work. The terms of this
|
| 558 |
+
License will continue to apply to the part which is the covered work,
|
| 559 |
+
but the special requirements of the GNU Affero General Public License,
|
| 560 |
+
section 13, concerning interaction through a network will apply to the
|
| 561 |
+
combination as such.
|
| 562 |
+
|
| 563 |
+
14. Revised Versions of this License.
|
| 564 |
+
|
| 565 |
+
The Free Software Foundation may publish revised and/or new versions of
|
| 566 |
+
the GNU General Public License from time to time. Such new versions will
|
| 567 |
+
be similar in spirit to the present version, but may differ in detail to
|
| 568 |
+
address new problems or concerns.
|
| 569 |
+
|
| 570 |
+
Each version is given a distinguishing version number. If the
|
| 571 |
+
Program specifies that a certain numbered version of the GNU General
|
| 572 |
+
Public License "or any later version" applies to it, you have the
|
| 573 |
+
option of following the terms and conditions either of that numbered
|
| 574 |
+
version or of any later version published by the Free Software
|
| 575 |
+
Foundation. If the Program does not specify a version number of the
|
| 576 |
+
GNU General Public License, you may choose any version ever published
|
| 577 |
+
by the Free Software Foundation.
|
| 578 |
+
|
| 579 |
+
If the Program specifies that a proxy can decide which future
|
| 580 |
+
versions of the GNU General Public License can be used, that proxy's
|
| 581 |
+
public statement of acceptance of a version permanently authorizes you
|
| 582 |
+
to choose that version for the Program.
|
| 583 |
+
|
| 584 |
+
Later license versions may give you additional or different
|
| 585 |
+
permissions. However, no additional obligations are imposed on any
|
| 586 |
+
author or copyright holder as a result of your choosing to follow a
|
| 587 |
+
later version.
|
| 588 |
+
|
| 589 |
+
15. Disclaimer of Warranty.
|
| 590 |
+
|
| 591 |
+
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
| 592 |
+
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
| 593 |
+
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
| 594 |
+
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
| 595 |
+
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| 596 |
+
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
| 597 |
+
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
| 598 |
+
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
| 599 |
+
|
| 600 |
+
16. Limitation of Liability.
|
| 601 |
+
|
| 602 |
+
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
| 603 |
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
| 604 |
+
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
| 605 |
+
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
| 606 |
+
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
| 607 |
+
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
| 608 |
+
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
| 609 |
+
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
| 610 |
+
SUCH DAMAGES.
|
| 611 |
+
|
| 612 |
+
17. Interpretation of Sections 15 and 16.
|
| 613 |
+
|
| 614 |
+
If the disclaimer of warranty and limitation of liability provided
|
| 615 |
+
above cannot be given local legal effect according to their terms,
|
| 616 |
+
reviewing courts shall apply local law that most closely approximates
|
| 617 |
+
an absolute waiver of all civil liability in connection with the
|
| 618 |
+
Program, unless a warranty or assumption of liability accompanies a
|
| 619 |
+
copy of the Program in return for a fee.
|
| 620 |
+
|
| 621 |
+
END OF TERMS AND CONDITIONS
|
README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
## Delta Chat Android Client
|
| 2 |
+
|
| 3 |
+
This is the Android client for [Delta Chat](https://delta.chat/).
|
| 4 |
+
|
| 5 |
+
[<img src="https://delta.chat/assets/badges/get-it-on-gplay.png" alt="Get it on Google Play" height="48">](https://play.google.com/store/apps/details?id=chat.delta)
|
| 6 |
+
[<img src="https://delta.chat/assets/badges/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/app/com.b44t.messenger)
|
| 7 |
+
|
| 8 |
+
Other download options and downloads for other platforms can be
|
| 9 |
+
found at [get.delta.chat](https://get.delta.chat).
|
| 10 |
+
|
| 11 |
+
For the core library and other common info, please refer to the
|
| 12 |
+
[Chatmail Core Library](https://github.com/chatmail/core).
|
| 13 |
+
|
| 14 |
+
For general contribution hints, please refer to [CONTRIBUTING.md](./CONTRIBUTING.md).
|
| 15 |
+
For building the app, refer to [BUILDING.md](./BUILDING.md).
|
| 16 |
+
|
| 17 |
+
<img alt="Screenshot Chat List" src="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" width="298" /> <img alt="Screenshot Chat View" src="fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" width="298" />
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
# Translations
|
| 21 |
+
|
| 22 |
+
Android metadata and changelogs are translated using [Weblate](https://hosted.weblate.org/projects/deltachat/android-metadata/).
|
| 23 |
+
|
| 24 |
+
<a href="https://hosted.weblate.org/engage/deltachat/">
|
| 25 |
+
<img src="https://hosted.weblate.org/widget/deltachat/android-metadata/svg-badge.svg" alt="Translation status" />
|
| 26 |
+
</a>
|
| 27 |
+
|
| 28 |
+
App strings and website are translated using [Transifex](https://app.transifex.com/delta-chat/).
|
| 29 |
+
|
| 30 |
+
# Credits
|
| 31 |
+
|
| 32 |
+
Many of the user interface classes were based on the Android Signal messenger when we ported it from the former Telegram-UI base in 2019.
|
| 33 |
+
Meanwhile, development has diverged in many areas.
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
# License
|
| 37 |
+
|
| 38 |
+
Licensed GPLv3+, see the LICENSE file for details.
|
| 39 |
+
|
| 40 |
+
Copyright © Delta Chat contributors.
|
RELEASE.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Android Release Checklist
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
## Generate APKs
|
| 5 |
+
|
| 6 |
+
### Update core and translations
|
| 7 |
+
|
| 8 |
+
on the command-line, in a PR called "update-core-and-stuff-DATE":
|
| 9 |
+
|
| 10 |
+
1. update core:
|
| 11 |
+
```
|
| 12 |
+
./scripts/update-core.sh # shows used branch
|
| 13 |
+
./scripts/update-core.sh BRANCH_OR_TAG # update to tag or latest commit of branch
|
| 14 |
+
./scripts/clean-core.sh # helps on weird issues, do also "Build / Clean"
|
| 15 |
+
./scripts/ndk-make.sh
|
| 16 |
+
```
|
| 17 |
+
|
| 18 |
+
a) Update `CHANGELOG.md`
|
| 19 |
+
from <https://github.com/chatmail/core/blob/main/CHANGELOG.md>,
|
| 20 |
+
do not just copy and avoid technical terms.
|
| 21 |
+
The changelog is for the end user and shall show impacts form that angle.
|
| 22 |
+
Add used core version to end of changelog entry
|
| 23 |
+
as `update to core 1.2.3` or `using core 1.2.3`
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
2. update JSON-RPC bindings:
|
| 27 |
+
```
|
| 28 |
+
./scripts/update-rpc-bindings.sh
|
| 29 |
+
```
|
| 30 |
+
|
| 31 |
+
3. update translations and local help:
|
| 32 |
+
```
|
| 33 |
+
./scripts/tx-pull-translations.sh
|
| 34 |
+
./scripts/create-local-help.sh # requires deltachat-pages checked out at ../deltachat-pages
|
| 35 |
+
```
|
| 36 |
+
|
| 37 |
+
### Prepare release
|
| 38 |
+
|
| 39 |
+
the following steps are done in a PR called `prep-VERSION` (no leading "v"):
|
| 40 |
+
|
| 41 |
+
3. Update `CHANGELOG.md`:
|
| 42 |
+
Rename header with version number and add date as `YYYY-MM`
|
| 43 |
+
|
| 44 |
+
in case previous entries of the changelog refer to betas or to not officially released versions,
|
| 45 |
+
the entries can be summarized.
|
| 46 |
+
this makes it easier for the end user to follow changes by showing major changes atop.
|
| 47 |
+
|
| 48 |
+
4. add a device message to `ConversationListActivity::onCreate()` or remove the old one.
|
| 49 |
+
do not repeat the CHANGELOG here: write what really is the ux outcome
|
| 50 |
+
in a few lines of easy speak without technical terms.
|
| 51 |
+
if there is time for a translation round, do `./scripts/tx-push-source.sh`
|
| 52 |
+
**ping tangible translators** and start over at step 2.
|
| 53 |
+
|
| 54 |
+
5. bump `versionCode` _and_ `versionName` (no leading "v") in `build.gradle`
|
| 55 |
+
|
| 56 |
+
6. build APKs:
|
| 57 |
+
a) generate debug APK at "Build / Build Bundle(s)/APK / Build APK(s)"
|
| 58 |
+
b) generate release APK at "Build / Generate Signed Bundle or APK",
|
| 59 |
+
select "APK", add keys, flavor `gplayRelease`.
|
| 60 |
+
this APK will go to the stores and is located at `gplay/release`
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
## Push Test Releases
|
| 64 |
+
|
| 65 |
+
7. a) `./scripts/upload-beta.sh VERSION` uploads both APKs to testrun.org and drafts a message.
|
| 66 |
+
b) add things critically to be tested to the message (this is not the changelog nor the device message)
|
| 67 |
+
c) post the message to relevant testing channels, **ping testers**
|
| 68 |
+
d) make sure, the `prep-VERSION` PR **gets merged**
|
| 69 |
+
|
| 70 |
+
On serious deteriorations, **ping devs**, make sure they get fixed, and start over at step 1.
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
## Release on get.delta.chat
|
| 74 |
+
|
| 75 |
+
Take care the APK used here and in the following steps
|
| 76 |
+
are binary-wise the same as pushed to testers and not overwritten by subsequent builds.
|
| 77 |
+
|
| 78 |
+
8. a) `./scripts/upload-release.sh VERSION`
|
| 79 |
+
b) do a PR to bump `VERSION_ANDROID` (without leading `v`) on
|
| 80 |
+
`https://github.com/deltachat/deltachat-pages/blob/master/_includes/download-boxes.html`
|
| 81 |
+
c) make sure, **the PR gets merged**
|
| 82 |
+
and the correct APK is finally available on get.delta.chat
|
| 83 |
+
|
| 84 |
+
only afterwards, push the APK to stores. **consider a blog post.**
|
| 85 |
+
|
| 86 |
+
|
| 87 |
+
## Release on Play Store
|
| 88 |
+
|
| 89 |
+
on <https://play.google.com/apps/publish/>:
|
| 90 |
+
|
| 91 |
+
9. a) open "Delta Chat / Test and release / Production"
|
| 92 |
+
then "Create new release" and upload APK from above
|
| 93 |
+
b) fill out "Release details/Release notes" (500 chars), add the line
|
| 94 |
+
"These features will roll out over the coming days. Thanks for using Delta Chat!";
|
| 95 |
+
release name should be default ("123 (1.2.3)")
|
| 96 |
+
c) click "Next", set "Rollout Percentage" to 50%, click "Save"
|
| 97 |
+
d) Go to "Publishing Overview", "Managed publishing" is usually off;
|
| 98 |
+
click "Send change for review", confirm
|
| 99 |
+
|
| 100 |
+
2 days later, change "Rollout Percentage" to 99%. Two more days later to 100%.
|
| 101 |
+
Rollout is anyways slower in practise, however,
|
| 102 |
+
only as long as we do not enter 100%, we can retract the version
|
| 103 |
+
(Once we reach 100%, we have to submit a new version for approval.
|
| 104 |
+
During these up to 4 days, sometimes longer, we cannot do anything on existing rollout)
|
| 105 |
+
|
| 106 |
+
|
| 107 |
+
## Tag for F-Droid and create Github release
|
| 108 |
+
|
| 109 |
+
10. make sure, everything is pushed, then:
|
| 110 |
+
$ git tag v1.2.1 COMMIT; git push --tags
|
| 111 |
+
|
| 112 |
+
F-Droid picks on the tags starting with "v" and builds the version.
|
| 113 |
+
This may take some days.
|
| 114 |
+
|
| 115 |
+
11. a) on <https://github.com/deltachat/deltachat-android/releases>,
|
| 116 |
+
tap "Draft a new Release", choose just created tag, fill changelog
|
| 117 |
+
b) add APK from above using "Attach binary".
|
| 118 |
+
c) tap "Publish release"
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
## Release on Huawei AppGallery
|
| 122 |
+
|
| 123 |
+
on <https://developer.huawei.com/consumer/en/appgallery>:
|
| 124 |
+
|
| 125 |
+
13. a) go to "Upload your app / Android / Delta Chat / Update", again "Update" upper right
|
| 126 |
+
b) "Manage Packages / Upload", upload the APK from above, hit "Save"
|
| 127 |
+
c) Update "App Information / New Features", hit "Save", then "Next"
|
| 128 |
+
d) Hit "Submit"; on the next page, confirm version and language
|
| 129 |
+
|
| 130 |
+
|
| 131 |
+
## Releases on other stores (ex. Passkoocheh)
|
| 132 |
+
|
| 133 |
+
These stores are not under our control.
|
| 134 |
+
On important updates **ping store maintainers** and ask to update.
|
| 135 |
+
|
| 136 |
+
|
| 137 |
+
## Testing checklist
|
| 138 |
+
|
| 139 |
+
Only some rough ideas, ideally, this should result into a simple checklist
|
| 140 |
+
that can be checked before releasing.
|
| 141 |
+
However, although it would be nice to test "everything", we should keep in mind
|
| 142 |
+
that the test should be doable in, say, 10~15 minutes.
|
| 143 |
+
- create new account with (one of?): gmail, yandex, other
|
| 144 |
+
or (?) test an existing account
|
| 145 |
+
- send and receive a message
|
| 146 |
+
- create a group
|
| 147 |
+
- do a contact verification
|
| 148 |
+
- join a group via a qr scan
|
build.gradle
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
plugins {
|
| 2 |
+
id 'com.android.application' version '8.11.1'
|
| 3 |
+
id 'com.google.gms.google-services' version '4.4.1'
|
| 4 |
+
}
|
| 5 |
+
|
| 6 |
+
repositories {
|
| 7 |
+
google()
|
| 8 |
+
mavenCentral()
|
| 9 |
+
maven {
|
| 10 |
+
url "https://www.jitpack.io"
|
| 11 |
+
name 'JitPack Github wrapper'
|
| 12 |
+
}
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
android {
|
| 16 |
+
namespace "org.thoughtcrime.securesms"
|
| 17 |
+
flavorDimensions "none"
|
| 18 |
+
compileSdk 36
|
| 19 |
+
|
| 20 |
+
// Set NDK version to strip native libraries.
|
| 21 |
+
// Even though we compile our libraries outside Gradle with `scripts/ndk-make.sh`,
|
| 22 |
+
// without ndkVersion `./gradlew clean` followed by `./gradlew assembleDebug --warning-mode=all` emits the following warning:
|
| 23 |
+
// > Task :stripFatDebugDebugSymbols
|
| 24 |
+
// Unable to strip the following libraries, packaging them as they are: libanimation-decoder-gif.so, libnative-utils.so.
|
| 25 |
+
// See <https://issuetracker.google.com/issues/237187538> for details.
|
| 26 |
+
ndkVersion "27.0.12077973"
|
| 27 |
+
useLibrary 'org.apache.http.legacy'
|
| 28 |
+
|
| 29 |
+
defaultConfig {
|
| 30 |
+
versionCode 740
|
| 31 |
+
versionName "2.35.0"
|
| 32 |
+
|
| 33 |
+
applicationId "com.b44t.messenger"
|
| 34 |
+
multiDexEnabled true
|
| 35 |
+
|
| 36 |
+
minSdkVersion 21
|
| 37 |
+
targetSdkVersion 36
|
| 38 |
+
|
| 39 |
+
vectorDrawables.useSupportLibrary = true
|
| 40 |
+
|
| 41 |
+
// base name of the generated apk
|
| 42 |
+
project.ext.set("archivesBaseName", "deltachat");
|
| 43 |
+
|
| 44 |
+
buildConfigField "boolean", "DEV_BUILD", "false"
|
| 45 |
+
|
| 46 |
+
ndk {
|
| 47 |
+
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
| 51 |
+
|
| 52 |
+
buildConfigField("String", "TEST_ADDR", buildConfigProperty("TEST_ADDR"))
|
| 53 |
+
buildConfigField("String", "TEST_MAIL_PW", buildConfigProperty("TEST_MAIL_PW"))
|
| 54 |
+
buildConfigField("String", "NDK_ARCH", getNdkArch())
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
compileOptions {
|
| 58 |
+
sourceCompatibility JavaVersion.VERSION_1_8
|
| 59 |
+
targetCompatibility JavaVersion.VERSION_1_8
|
| 60 |
+
}
|
| 61 |
+
packagingOptions {
|
| 62 |
+
jniLibs {
|
| 63 |
+
keepDebugSymbols += ['*/mips/*.so', '*/mips64/*.so']
|
| 64 |
+
}
|
| 65 |
+
resources {
|
| 66 |
+
excludes += ['LICENSE.txt', 'LICENSE', 'NOTICE', 'asm-license.txt', 'META-INF/LICENSE', 'META-INF/NOTICE']
|
| 67 |
+
}
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
signingConfigs {
|
| 72 |
+
debug {
|
| 73 |
+
// add `DC_DEBUG_STORE_FILE=/path/to/debug.keystore` to `~/.gradle/gradle.properties`
|
| 74 |
+
if(project.hasProperty("DC_DEBUG_STORE_FILE" )) {
|
| 75 |
+
storeFile file(DC_DEBUG_STORE_FILE )
|
| 76 |
+
}
|
| 77 |
+
}
|
| 78 |
+
release {
|
| 79 |
+
// can be defined at `~/.gradle/gradle.properties` or at "Build/Generate signed APK"
|
| 80 |
+
if(project.hasProperty("DC_RELEASE_STORE_FILE")) {
|
| 81 |
+
storeFile file(DC_RELEASE_STORE_FILE)
|
| 82 |
+
storePassword DC_RELEASE_STORE_PASSWORD
|
| 83 |
+
keyAlias DC_RELEASE_KEY_ALIAS
|
| 84 |
+
keyPassword DC_RELEASE_KEY_PASSWORD
|
| 85 |
+
}
|
| 86 |
+
}
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
buildTypes {
|
| 90 |
+
debug {
|
| 91 |
+
minifyEnabled true
|
| 92 |
+
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
| 93 |
+
testProguardFiles 'test-proguard-rules.pro'
|
| 94 |
+
applicationIdSuffix ".beta"
|
| 95 |
+
}
|
| 96 |
+
release {
|
| 97 |
+
// minification and proguard disabled for now.
|
| 98 |
+
//
|
| 99 |
+
// when enabled, it can cut down apk size about 6%,
|
| 100 |
+
// however this also has the potential to break things.
|
| 101 |
+
// so exceptions are needed and have to be maintained.
|
| 102 |
+
// (see git-history and https://github.com/deltachat/deltachat-android/issues/905 )
|
| 103 |
+
//
|
| 104 |
+
// nb: it is highly recommended to use the same settings in debug+release -
|
| 105 |
+
// otherwise problems might be noticed delayed only
|
| 106 |
+
minifyEnabled true
|
| 107 |
+
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
| 108 |
+
testProguardFiles 'test-proguard-rules.pro'
|
| 109 |
+
signingConfig signingConfigs.release
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
productFlavors {
|
| 114 |
+
foss {
|
| 115 |
+
dimension "none"
|
| 116 |
+
buildConfigField "boolean", "USE_PLAY_SERVICES", "false"
|
| 117 |
+
}
|
| 118 |
+
gplay {
|
| 119 |
+
dimension "none"
|
| 120 |
+
applicationId "chat.delta"
|
| 121 |
+
apply plugin: "com.google.gms.google-services"
|
| 122 |
+
buildConfigField "boolean", "USE_PLAY_SERVICES", "true"
|
| 123 |
+
}
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
android.applicationVariants.all { variant ->
|
| 127 |
+
variant.outputs.all {
|
| 128 |
+
outputFileName = outputFileName
|
| 129 |
+
.replace("deltachat-android", "deltachat")
|
| 130 |
+
.replace(".apk", "-${variant.versionName}.apk")
|
| 131 |
+
}
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
sourceSets {
|
| 135 |
+
main {
|
| 136 |
+
jniLibs.srcDirs = ['libs']
|
| 137 |
+
}
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
androidResources {
|
| 141 |
+
generateLocaleConfig true
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
lint {
|
| 145 |
+
abortOnError false
|
| 146 |
+
}
|
| 147 |
+
buildFeatures {
|
| 148 |
+
renderScript true
|
| 149 |
+
aidl true
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
dependencies {
|
| 155 |
+
implementation 'androidx.concurrent:concurrent-futures:1.3.0'
|
| 156 |
+
implementation 'androidx.sharetarget:sharetarget:1.2.0'
|
| 157 |
+
implementation 'androidx.webkit:webkit:1.14.0'
|
| 158 |
+
implementation 'androidx.multidex:multidex:2.0.1'
|
| 159 |
+
implementation 'androidx.appcompat:appcompat:1.7.1'
|
| 160 |
+
implementation 'com.google.android.material:material:1.12.0'
|
| 161 |
+
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
|
| 162 |
+
implementation ('androidx.preference:preference:1.2.1') {
|
| 163 |
+
exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel'
|
| 164 |
+
exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel-ktx'
|
| 165 |
+
}
|
| 166 |
+
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
|
| 167 |
+
implementation 'androidx.exifinterface:exifinterface:1.4.1'
|
| 168 |
+
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
| 169 |
+
implementation 'androidx.lifecycle:lifecycle-common-java8:2.6.2'
|
| 170 |
+
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.6.2'
|
| 171 |
+
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2'
|
| 172 |
+
implementation 'androidx.work:work-runtime:2.9.1'
|
| 173 |
+
implementation 'androidx.emoji2:emoji2-emojipicker:1.5.0'
|
| 174 |
+
implementation 'com.google.guava:guava:31.1-android'
|
| 175 |
+
implementation 'com.google.android.exoplayer:exoplayer-core:2.19.1' // plays video and audio
|
| 176 |
+
implementation 'com.google.android.exoplayer:exoplayer-ui:2.19.1'
|
| 177 |
+
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
|
| 178 |
+
implementation 'com.google.zxing:core:3.3.0' // fixed version to support SDK<24
|
| 179 |
+
implementation ('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } // QR Code scanner
|
| 180 |
+
implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.1' // used as JSON library
|
| 181 |
+
implementation 'com.github.Baseflow:PhotoView:2.3.0' // does the zooming on photos / media
|
| 182 |
+
implementation 'com.caverock:androidsvg-aar:1.4' // SVG support.
|
| 183 |
+
implementation 'com.github.bumptech.glide:glide:4.16.0'
|
| 184 |
+
annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
|
| 185 |
+
annotationProcessor 'androidx.annotation:annotation:1.9.1'
|
| 186 |
+
implementation 'com.makeramen:roundedimageview:2.3.0' // crops the avatars to circles
|
| 187 |
+
implementation 'com.github.amulyakhare:TextDrawable:558677ea31' // number of unread messages,
|
| 188 |
+
// the one-letter circle for the contacts (when there is not avatar) and a white background.
|
| 189 |
+
implementation 'com.googlecode.mp4parser:isoparser:1.0.6' // MP4 recoding; upgrading eg. to 1.1.22 breaks recoding, however, i have not investigated further, just reset to 1.0.6
|
| 190 |
+
implementation ('com.davemorrissey.labs:subsampling-scale-image-view:3.10.0') { // for the zooming on photos / media
|
| 191 |
+
exclude group: 'com.android.support', module: 'support-annotations'
|
| 192 |
+
}
|
| 193 |
+
|
| 194 |
+
// Replacement for ContentResolver
|
| 195 |
+
// that protects against the Surreptitious Sharing attack.
|
| 196 |
+
// <https://github.com/cketti/SafeContentResolver>
|
| 197 |
+
implementation 'de.cketti.safecontentresolver:safe-content-resolver-v21:1.0.0'
|
| 198 |
+
|
| 199 |
+
gplayImplementation('com.google.firebase:firebase-messaging:24.1.2') { // for PUSH notifications, don't upgrade: v25.0.0 requires minSdk>=23
|
| 200 |
+
exclude group: 'com.google.firebase', module: 'firebase-core'
|
| 201 |
+
exclude group: 'com.google.firebase', module: 'firebase-analytics'
|
| 202 |
+
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
testImplementation 'junit:junit:4.13.2'
|
| 206 |
+
testImplementation 'org.assertj:assertj-core:3.27.3'
|
| 207 |
+
testImplementation 'org.mockito:mockito-core:5.18.0'
|
| 208 |
+
testImplementation 'org.powermock:powermock-api-mockito:1.7.4'
|
| 209 |
+
testImplementation 'org.powermock:powermock-module-junit4:2.0.9'
|
| 210 |
+
testImplementation 'org.powermock:powermock-module-junit4-rule:2.0.9'
|
| 211 |
+
testImplementation 'org.powermock:powermock-classloading-xstream:2.0.9'
|
| 212 |
+
|
| 213 |
+
androidTestImplementation 'androidx.test:runner:1.7.0'
|
| 214 |
+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0'
|
| 215 |
+
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.7.0'
|
| 216 |
+
androidTestImplementation 'androidx.test:rules:1.7.0'
|
| 217 |
+
androidTestImplementation 'androidx.test.ext:junit:1.3.0'
|
| 218 |
+
androidTestImplementation 'com.android.support:support-annotations:28.0.0'
|
| 219 |
+
|
| 220 |
+
androidTestImplementation ('org.assertj:assertj-core:3.27.3') {
|
| 221 |
+
exclude group: 'org.hamcrest', module: 'hamcrest-core'
|
| 222 |
+
}
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
String buildConfigProperty(String name) {
|
| 226 |
+
return "\"${propertyOrEmpty(name)}\""
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
String propertyOrEmpty(String name) {
|
| 230 |
+
Object p = findProperty(name)
|
| 231 |
+
if (p == null) return environmentVariable(name)
|
| 232 |
+
return (String) p
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
static String environmentVariable(String name) {
|
| 236 |
+
String env = System.getenv(name)
|
| 237 |
+
if (env == null) return ""
|
| 238 |
+
return env
|
| 239 |
+
}
|
| 240 |
+
|
| 241 |
+
String getNdkArch() {
|
| 242 |
+
Properties properties = new Properties()
|
| 243 |
+
def file = project.rootProject.file('ndkArch')
|
| 244 |
+
if (!file.exists()) return "\"\""
|
| 245 |
+
properties.load(file.newDataInputStream())
|
| 246 |
+
def arch = properties.getProperty('NDK_ARCH')
|
| 247 |
+
if (arch == null) return "\"\""
|
| 248 |
+
return "\"$arch\""
|
| 249 |
+
}
|
docs/f-droid.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# F-Droid - Overview
|
| 2 |
+
|
| 3 |
+
- <https://f-droid.org/en/packages/com.b44t.messenger/>
|
| 4 |
+
is the Delta Chat page on F-Droid.org,
|
| 5 |
+
the F-Droid app will show similar information.
|
| 6 |
+
|
| 7 |
+
- <https://github.com/deltachat/deltachat-android/tree/main/metadata>
|
| 8 |
+
contains the description, icon, screenshots and all meta data shown for Delta Chat on F-Droid
|
| 9 |
+
in the [fastlane format](https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#fastlane-structure).
|
| 10 |
+
|
| 11 |
+
- <https://gitlab.com/fdroid/fdroiddata/blob/master/metadata/com.b44t.messenger.yml>
|
| 12 |
+
contains [additional F-Droid-specific metadata](https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#in-the-f-droid-repo)
|
| 13 |
+
and build instructions that do not fit the fastlane format.
|
| 14 |
+
F-Droid adds new versions automatically to the end of `.yml` file.
|
| 15 |
+
|
| 16 |
+
- New versions are recognized by tags in the form `v1.2.3` -
|
| 17 |
+
before adding tags like that, have a look at
|
| 18 |
+
<https://github.com/deltachat/deltachat-android/blob/main/RELEASE.md#release-on-f-droid>.
|
| 19 |
+
The build and distribution is expected to take
|
| 20 |
+
[up to 7 days](https://gitlab.com/fdroid/wiki/-/wikis/FAQ#how-long-does-it-take-for-my-app-to-show-up-on-website-and-client).
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
# F-Droid Build status
|
| 24 |
+
|
| 25 |
+
- <https://monitor.f-droid.org/builds>
|
| 26 |
+
shows F-Droid's overall build status,
|
| 27 |
+
if Delta Chat shows up at "Need updating" or "Running",
|
| 28 |
+
things are working as expected. :)
|
| 29 |
+
|
| 30 |
+
- <https://f-droid.org/repo/com.b44t.messenger_VERSIONCODE.apk>
|
| 31 |
+
(with VERSIONCODE = 537 or so) links to successfully built apk
|
| 32 |
+
even if it is not yet in the index (which may take some more time).
|
| 33 |
+
F-Droid keeps the last 3 successful builds in the main repo,
|
| 34 |
+
while the rest will be moved to the Archive repo:
|
| 35 |
+
<https://f-droid.org/archive/com.b44t.messenger_VERSIONCODE.apk>
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
# Use F-Droid-tools locally
|
| 39 |
+
|
| 40 |
+
$ git clone https://gitlab.com/fdroid/fdroiddata
|
| 41 |
+
$ git clone https://gitlab.com/fdroid/fdroidserver
|
| 42 |
+
$ cd fdroiddata
|
| 43 |
+
|
| 44 |
+
Now, metadata/com.b44t.messenger.yml can be modified.
|
| 45 |
+
For testing, one can change the repo to a branch
|
| 46 |
+
by adding the line `Update Check Mode:RepoManifest/BRANCH` to the file.
|
| 47 |
+
|
| 48 |
+
Set some path to ndk etc:
|
| 49 |
+
$ cp ../fdroidserver/examples/config.py . # adapt file as needed
|
| 50 |
+
|
| 51 |
+
Checkout repo as F-Droid would do:
|
| 52 |
+
$ ../fdroidserver/fdroid checkupdates -v com.b44t.messenger
|
| 53 |
+
(for testing with uncommitted changes, add --allow-dirty)
|
| 54 |
+
|
| 55 |
+
Build repo as F-Droid would do:
|
| 56 |
+
$ ../froidserver/fdroid build -v com.b44t.messenger:<versionCode>
|
| 57 |
+
|
| 58 |
+
(via <https://f-droid.org/docs/Installing_the_Server_and_Repo_Tools/>
|
| 59 |
+
and <https://f-droid.org/docs/Building_Applications/> -
|
| 60 |
+
might require `pip install pyasn1 pyasn1_modules pyaml requests`)
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
# Changing the description
|
| 64 |
+
|
| 65 |
+
- Change the files `metadata/en-US/short_description.txt`
|
| 66 |
+
and `metadata/en-US/full_description.txt`
|
| 67 |
+
in <https://github.com/deltachat/deltachat-android/> repository.
|
| 68 |
+
|
| 69 |
+
- Make sure there is a "newline" at the end of the description
|
| 70 |
+
(see <https://gitlab.com/fdroid/fdroiddata/merge_requests/3580>).
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
# Changing F-Droid metadata
|
| 74 |
+
|
| 75 |
+
- The file `com.b44t.messenger.yml` can be changed via a PR to the <https://gitlab.com/fdroid/fdroiddata/> repository.
|
| 76 |
+
|
| 77 |
+
- Reformat the metadata using
|
| 78 |
+
$ ../fdroidserver/fdroid rewritemeta com.b44t.messenger # called from fdroiddata dir
|
| 79 |
+
|
docs/images/2019-12-material-icon-dev-template.png
ADDED
|
|
docs/images/2019-12-material-icon-template.png
ADDED
|
|
docs/playstore.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Google Play Store
|
| 2 |
+
|
| 3 |
+
If you have access to uploading and signing apks,
|
| 4 |
+
this can be done at
|
| 5 |
+
https://play.google.com/apps/publish/
|
| 6 |
+
|
| 7 |
+
The description can be discussed and changed at
|
| 8 |
+
https://github.com/deltachat/deltachat-android/blob/master/store/text.md
|
| 9 |
+
In future, we can also add the screenshots or other assets there.
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
# Google Play Releases
|
| 13 |
+
|
| 14 |
+
see `release-checklist.md`
|
fastlane/metadata/android/ar/short_description.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
التواصل الفوري عبر البريد الكتروني
|
fastlane/metadata/android/cs/short_description.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Okamžitá komunikace prostřednictvím e-mailu
|
fastlane/metadata/android/de/changelogs/6544.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
* Verwenden Sie SOCKS5-Konfiguration auch zum Laden von Remote-Bildern in HTML-Mails
|
| 2 |
+
* Bugfixes
|
| 3 |
+
* Übersetzungen und lokale Hilfe aktualisieren
|
| 4 |
+
* Update auf core112.8
|
fastlane/metadata/android/de/changelogs/6584.txt
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
* neue webxdc APIs: importFiles() und sendToChat()
|
| 2 |
+
* die obere Größengrenze der Anbaugeräte entfernen
|
| 3 |
+
* speichern Verkehr und Speicher: Recodieren Sie große PNG und andere unterstützte Bildformate (große JPEG wurden immer recodiert; Bilder, die als "Datei" gesendet werden, werden noch nicht aufgenommen oder anders geändert)
|
| 4 |
+
* Speicherort speichern: HTML-E-Mails in der Datenbank komprimieren
|
| 5 |
+
* Verbesserung der Gruppenmitgliedschaft Konsistenz
|
| 6 |
+
* viele Fehlerbehebungen
|
fastlane/metadata/android/de/changelogs/6594.txt
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
* wenn möglich Bildeditor für die Avatarauswahl verwenden
|
| 2 |
+
* Verbesserung des Ladebildschirms im Dunkelmodus
|
| 3 |
+
* Update "verified icon"
|
| 4 |
+
* Luri Bakhtiari Übersetzung hinzufügen, andere Übersetzungen aktualisieren
|
| 5 |
+
* viele Fehlerbehebungen
|
fastlane/metadata/android/de/changelogs/6744.txt
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
- One-to-one Chats garantieren eine end-to-end-Verschlüsselung für Kontakte mit einem grünen Checkmark
|
| 2 |
+
- Für jedermanns Einfachheit markieren wir diese Chats auch mit grünen Checkmarks
|
| 3 |
+
- Gruppen werden automatisch mit garantierter End-to-End-Verschlüsselung erstellt, wenn möglich
|
| 4 |
+
- Akzeptiert/geschlossen, archiviert, gepinnt, Mute wird über alle Ihre Geräte synchronisiert
|
| 5 |
+
- Weitere Verbesserungen in der Kamera, Sprachnachrichten, Backup-all, Bildschirmleser, Per-Account Wallpaper, Galerie select-all, webxdc Landschaft
|
| 6 |
+
- Tonnen Fehlerbehebungen
|
fastlane/metadata/android/de/changelogs/6754.txt
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
- One-to-one Chats garantieren eine end-to-end-Verschlüsselung für Kontakte mit einem grünen Checkmark
|
| 2 |
+
- Für jedermanns Einfachheit markieren wir diese Chats auch mit grünen Checkmarks
|
| 3 |
+
- Gruppen werden automatisch mit garantierter End-to-End-Verschlüsselung erstellt, wenn möglich
|
| 4 |
+
- Akzeptiert/geschlossen, archiviert, gepinnt, Mute wird über alle Ihre Geräte synchronisiert
|
| 5 |
+
- Weitere Verbesserungen in der Kamera, Sprachnachrichten, Backup-all, Bildschirmleser, Per-Account Wallpaper, Galerie select-all, webxdc Landschaft
|
| 6 |
+
- Tonnen Fehlerbehebungen
|
fastlane/metadata/android/de/changelogs/6774.txt
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
- synchronisieren Sie Änderungen auf "Your Profile Name", "Class Mails anzeigen", "Lesen Sie Receipts" Optionen auf Geräten
|
| 2 |
+
- entfernen Empfängergrenze auf .xdc Größe
|
| 3 |
+
- Log-in-Fehler für Anbieter als 163.com beheben
|
| 4 |
+
- Decryption Fehler beheben, wenn Sie mehrere private Schlüssel verwenden
|
| 5 |
+
- Datenbank gesperrte Fehler auf Webxdc-Updates beheben
|
| 6 |
+
- Übersetzungen aktualisieren
|
fastlane/metadata/android/de/changelogs/6804.txt
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
- "Reactions": lange tippen Sie auf eine Nachricht, um darauf zu reagieren
|
| 2 |
+
- Ja. Wenn Sie QR-Codes nicht scannen können, teilen Sie sie als "Einladung Links"
|
| 3 |
+
- Ungelesene Nachrichten aller Konten werden jetzt gezählt und im Titel angezeigt
|
| 4 |
+
- Webxdc Sendegrenze entfernt
|
| 5 |
+
- Long-Tapping-Chatlist-Elemente erlauben es jetzt, Chats direkt zu stummen/unmute
|
| 6 |
+
- Fragen Sie nach System entsperren Geheimnis vor dem Öffnen "Passwort & Account"
|
| 7 |
+
- Neue Option "Settings / Advanced / Read System Address Book"
|
| 8 |
+
- Tonnen Fehlerbehebungen
|
fastlane/metadata/android/de/full_description.txt
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Delta Chat ist eine dezentrale, sichere Messenger-App, die mit der bestehenden E-Mail-Infrastruktur vollständig kompatibel ist..
|
| 2 |
+
|
| 3 |
+
Mit Delta Chat erhalten Sie die Einfachheit bekannter Messenger mit der Reichweite von E-Mail.
|
| 4 |
+
|
| 5 |
+
Einige Funktionen auf einen Blick:
|
| 6 |
+
|
| 7 |
+
💬 Zuverläßiges Instant-Messaging mit der Unterstützung mehrerer Profile und Geräte.
|
| 8 |
+
|
| 9 |
+
⚡️ Nutzen Sie sichere und schnelle Chatmail-Server, um sich auf einfache Art anzumelden. Sie benötigen weder Telefonnummer noch private Angaben.
|
| 10 |
+
|
| 11 |
+
📧 Alternativ können Sie Ihre bestehende E-Mail-Adresse verwenden, um Ihren Posteingang als Chat-Nachrichten zu lesen.
|
| 12 |
+
|
| 13 |
+
🎮 Interaktive Mini-Apps in den Chats fürs Spielen und Zusammenarbeiten.
|
| 14 |
+
|
| 15 |
+
🔒 Geprüfte Ende-zu-Ende-Verschlüsselung, die vor Netzwerk- und Server-Attacken schützt.
|
| 16 |
+
|
| 17 |
+
🆓 Vollständig freie Open-Source-Software, nach Internet-Standards erstellt.
|
fastlane/metadata/android/de/short_description.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Über E-Mail chatten. Elegant retro, dezentral und offen. Privacy by Design.
|
fastlane/metadata/android/de/title.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Delta Chat
|
fastlane/metadata/android/en-US/full_description.txt
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Delta Chat is a reliable decentralized instant messenger that is easy and fun to use for friends, family, groups and organizations. Delta Chat is developed by a dedicated FOSS contributor community that jointly releases refinements and new features several times a year, across many stores and platforms world-wide.
|
| 2 |
+
|
| 3 |
+
Features at a glance:
|
| 4 |
+
|
| 5 |
+
• Anonymous. Instant onboarding without a phone number, e-mail or other private data.
|
| 6 |
+
|
| 7 |
+
• Flexible. Supports multiple chat profiles and is easy to setup on multiple devices.
|
| 8 |
+
|
| 9 |
+
• Extensible. Add tools like shopping lists, calendars or gaming apps to any chat.
|
| 10 |
+
|
| 11 |
+
• Reliable. Works under bad and adversarial network conditions.
|
| 12 |
+
|
| 13 |
+
• Secure. Audited End-to-End encryption safe against network and server attacks.
|
| 14 |
+
|
| 15 |
+
• Sovereign. Can be run with your own e-mail address or server.
|
| 16 |
+
|
| 17 |
+
• FOSS. Fully Open Source/Free Software, built on Internet Standards.
|
fastlane/metadata/android/en-US/images/icon.png
ADDED
|
|
fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
ADDED
|
Git LFS Details
|
fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
ADDED
|
Git LFS Details
|
fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
ADDED
|
Git LFS Details
|
fastlane/metadata/android/en-US/images/phoneScreenshots/4.png
ADDED
|
Git LFS Details
|
fastlane/metadata/android/en-US/images/phoneScreenshots/5.png
ADDED
|
Git LFS Details
|
fastlane/metadata/android/en-US/short_description.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Decentralized private messenger with chat-shared tools and games.
|
fastlane/metadata/android/en-US/title.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Delta Chat
|
fastlane/metadata/android/eo/short_description.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Tujmesaĝilo uzanta retpoŝton
|
fastlane/metadata/android/es/full_description.txt
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Delta Chat es una aplicación de mensajería totalmente compatible con
|
| 2 |
+
infraestructura de correo electrónico.
|
| 3 |
+
|
| 4 |
+
Por lo tanto, con Delta Chat se obtiene la facilidad de conocidos mensajeros con el alcance de
|
| 5 |
+
e-mail. Además, eres independiente de otras empresas o servicios, ya que tu
|
| 6 |
+
Los datos no están relacionados con Delta Chat, ni siquiera agregará nuevas dependencias aquí.
|
| 7 |
+
|
| 8 |
+
Algunas características de un vistazo:
|
| 9 |
+
|
| 10 |
+
* Seguro con cifrado automático de extremo a extremo, compatible con el nuevo estándar <a href="https://autocrypt.org">Autocrypt</a>
|
| 11 |
+
* Rápido mediante el uso de Push-IMAP
|
| 12 |
+
* Mayor base de usuarios -- también se puede llegar a los receptores que no usan Delta Chat
|
| 13 |
+
* Compatible -- no sólo consigo mismo
|
| 14 |
+
* Interfaz de usuario elegante y sencilla
|
| 15 |
+
* Sistema distribuido
|
| 16 |
+
* Sin spam -- sólo los mensajes de usuarios conocidos se muestran por defecto
|
| 17 |
+
* Fiable -- seguro para uso profesional
|
| 18 |
+
* Confiable -- incluso se puede utilizar para mensajes de negocios
|
| 19 |
+
* Totalmente OpenSource y basado en estándares
|
fastlane/metadata/android/es/short_description.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Comuníquese al instante mediante correo electrónico
|
fastlane/metadata/android/es/title.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Delta Chat
|
fastlane/metadata/android/et/full_description.txt
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Delta Chat on hajutatud ja turvaline sõnumirakendus, mis tervikuna ja täielikult
|
| 2 |
+
ühildub olemasoleva e-posti taristuga.
|
| 3 |
+
|
| 4 |
+
Seega Delta Chati abil saad kasutada tänapäevaset tuntud vestlusrakendustega kaasnevat
|
| 5 |
+
lihtsust e-posti levi alusel.
|
| 6 |
+
|
| 7 |
+
Ülevaade tähtsamatest omadustest:
|
| 8 |
+
|
| 9 |
+
💬 Turvaline sõnumiklient, mis toimib mitme kasutajakontoga ja mitmetes seadmetes.
|
| 10 |
+
|
| 11 |
+
⚡️ Lihtne liitumine kiire ja turvalise vestlusserveriga. Pole vaja telefoninumbrit ega isiklikke andmeid.
|
| 12 |
+
|
| 13 |
+
📧 Alternatiivina kasuta oma tavapärast e-postiaadressi, aga loe sõnumeid vestlustena.
|
| 14 |
+
|
| 15 |
+
🎮 Vestlustes leiduvad interaktiivsed pisirakendused mängude ja ühistöö jaoks.
|
| 16 |
+
|
| 17 |
+
🔒 Auditeeritud läbiv krüptimine, mis on turvaline võrgu- ja serverirünnete vastu.
|
| 18 |
+
|
| 19 |
+
🆓 Internetistandarditel põhinev avatud lähtekoodiga vaba tarkvara.
|
fastlane/metadata/android/et/short_description.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Privaatsed sõnumid e-posti teel. Elegantselt vanamoodne, hajutatud ja avatud.
|
fastlane/metadata/android/et/title.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Delta Chat
|