mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
Compare commits
119 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e1c92712a0 | |||
| 6ec0f1bfce | |||
| db410d8b44 | |||
| cd07f3de96 | |||
| 12072a0342 | |||
| c6f3761bb9 | |||
| 673f0e78b1 | |||
| 65c8960ec8 | |||
| 089ecc67d1 | |||
| 0f84af5b32 | |||
| 710ed6dd56 | |||
| 335aabd4ff | |||
| 98c97a8aed | |||
| 23d18d2ac5 | |||
| a136b8b1e5 | |||
| 7f8b71cf28 | |||
| 9e5f2b18b9 | |||
| bdfeddecd5 | |||
| 23cbe63cd4 | |||
| f0f53455a5 | |||
| d8b49f57a9 | |||
| 7eaaf3bbb4 | |||
| d4f83cd38b | |||
| 9eca5f518e | |||
| d17bed02e6 | |||
| b4b194a59b | |||
| c6f62a2b81 | |||
| e3a9f42a56 | |||
| 323bcef1fe | |||
| 095b92b498 | |||
| 18c2ccd66c | |||
| 28fdeac01c | |||
| a7e4267b9b | |||
| d6837aa121 | |||
| 5a2913b36f | |||
| 20180fa89c | |||
| c6b89055d8 | |||
| bfda7ab2c3 | |||
| 953ce32bea | |||
| 961fa5ffe6 | |||
| b1b2959bcb | |||
| 70ef715dc6 | |||
| ffa58aae34 | |||
| 24f5209c03 | |||
| 7fd96732d6 | |||
| 6e0759f719 | |||
| 63434e1e2f | |||
| 9c17bc412a | |||
| d40144d50c | |||
| 131c0f5a37 | |||
| 7086314d8b | |||
| d75b2c2bb7 | |||
| c46d174869 | |||
| 17e03f2903 | |||
| 2c12a34051 | |||
| 2d3dde2101 | |||
| d539f5ecf2 | |||
| b17d6be4fc | |||
| 3c737f2360 | |||
| 9ac5e714b8 | |||
| 94defa3091 | |||
| 052ada221e | |||
| 1d5e4cf2a9 | |||
| c46aef3ea0 | |||
| d30e141693 | |||
| 305940396e | |||
| 2ab567a9d3 | |||
| a9c488ff03 | |||
| 8817b50c95 | |||
| 84c3710a35 | |||
| be7be9bba4 | |||
| b50ae284fb | |||
| 97716d5c26 | |||
| e77253c843 | |||
| 6aed8d003f | |||
| 0083e60c49 | |||
| 0fc79fd845 | |||
| a7c3bc7ac5 | |||
| 83b16e5f4b | |||
| ee17c6d75e | |||
| c0525ac69c | |||
| e9d2a39098 | |||
| 4d6fd16767 | |||
| b398870823 | |||
| e68c50d614 | |||
| f6a27718a2 | |||
| f136fa3e3a | |||
| 8e55a3dbf3 | |||
| 923227a0e8 | |||
| 14ecafe0e2 | |||
| b93f8323ab | |||
| 77f43cde9a | |||
| e4d018393d | |||
| 9a816090de | |||
| 4b04aa65be | |||
| 489bb55788 | |||
| 9d244611bc | |||
| 3533916149 | |||
| 46bc3e7f72 | |||
| ed0f0107e3 | |||
| a855d7043a | |||
| 66fd795763 | |||
| 05da43484f | |||
| a58de2278b | |||
| 6743df23e9 | |||
| 35ec0d05e2 | |||
| 6ead7207ec | |||
| 0d5223036d | |||
| 640fc433b8 | |||
| 3390b865e0 | |||
| 883486da9c | |||
| d048203f45 | |||
| f9d70d1196 | |||
| 4413b7b4fb | |||
| 7a4f263a62 | |||
| 1a360d5282 | |||
| dc785fc116 | |||
| 884be3a93e | |||
| 9a25328787 |
@@ -0,0 +1,3 @@
|
||||
ko_fi: adbenitez
|
||||
liberapay: adbenitez
|
||||
custom: "https://arcanechat.me/#contribute"
|
||||
@@ -1 +1 @@
|
||||
blank_issues_enabled: true
|
||||
blank_issues_enabled: false
|
||||
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
run: ./gradlew --no-daemon -PABI_FILTER=armeabi-v7a assembleFossDebug
|
||||
|
||||
- name: Upload APK
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: app-preview.apk
|
||||
path: 'build/outputs/apk/foss/debug/*.apk'
|
||||
|
||||
@@ -49,11 +49,12 @@ jobs:
|
||||
- name: Build APK
|
||||
run: |
|
||||
mkdir -p ~/.gradle
|
||||
echo -n ${{ secrets.SIGNING_KEY }} | base64 -d >> ~/app.keystore
|
||||
echo "DC_RELEASE_STORE_FILE=$HOME/app.keystore" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_STORE_PASSWORD=${{ secrets.KEY_STORE_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
echo -n ${{ secrets.KEYSTORE_FILE }} | base64 -d >> ~/keystore.jks
|
||||
echo "DC_RELEASE_STORE_FILE=$HOME/keystore.jks" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_STORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_ALIAS_FDROID=${{ secrets.ALIAS_FDROID }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_ALIAS_GPLAY=${{ secrets.ALIAS_GPLAY }}" >> ~/.gradle/gradle.properties
|
||||
echo "DC_RELEASE_KEY_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> ~/.gradle/gradle.properties
|
||||
./gradlew assembleFossRelease
|
||||
rm build/outputs/apk/foss/release/*universal*
|
||||
./gradlew assembleGplayRelease
|
||||
@@ -63,7 +64,7 @@ jobs:
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
body: '[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite) [<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite) [<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite) [<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)'
|
||||
body: '[<img src="store/get-it-on-gplay.png" alt="Get it on Google Play" height="48">](https://play.google.com/store/apps/details?id=com.github.arcanechat) [<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite) [<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite) [<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite) [<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)'
|
||||
prerelease: ${{ contains(github.event.ref, '-beta') }}
|
||||
fail_on_unmatched_files: true
|
||||
files: build/outputs/apk/foss/release/*.apk
|
||||
|
||||
@@ -1,5 +1,48 @@
|
||||
# ArcaneChat Android Changelog
|
||||
|
||||
## v1.52.1
|
||||
2025-01
|
||||
|
||||
* the app now requires less storage on your SD card by deduplicating newly received/sent files
|
||||
* some small bug fixes
|
||||
* update translations
|
||||
* update to core 1.155.1
|
||||
|
||||
## v1.52.0
|
||||
2025-01
|
||||
|
||||
* new group consistency algorithm
|
||||
* fix: don't show animated .webp stickers as static stickers
|
||||
* fix the chat shortcuts (created via long-press in launcher) to properly support multi-profile
|
||||
* fix some small bugs in certain android versions and special situations
|
||||
* avoid the app freezing in slow phones in some situations
|
||||
* improve menu in the help screen
|
||||
* update translations
|
||||
* update to core 1.155.0
|
||||
|
||||
## v1.50.5
|
||||
2025-01
|
||||
|
||||
* fix push-notifications handling for certain devices where it was not working correctly
|
||||
* update translations
|
||||
* using core 1.153.0
|
||||
|
||||
## v1.50.4
|
||||
2025-01
|
||||
|
||||
* properly send as animated stickers GIF files selected from keyboard
|
||||
* improve emoji picker in landscape mode and when changing from landscape to portrait
|
||||
* avoid crash when receiving push notifications if the user restricted the app from working in background
|
||||
* improve UI when attaching a file or image to easily recognize it is attached but not sent yet
|
||||
* avoid slow loading of in-chat apps in some devices when quickly re-opening an app after closing it
|
||||
* allow to select multiple images at once in the media picker via "Gallery" button
|
||||
* mark holiday notice messages as bot-generated
|
||||
* don't mark contacts as bot when receiving location-only and sync messages
|
||||
* prefer to encrypt even if peers have their preference to "no preference"
|
||||
* start ephemeral messages timers when the chat is archived or noticed
|
||||
* several bug fixes and updated translations
|
||||
* update to core 1.153.0
|
||||
|
||||
## v1.50.3
|
||||
2024-12
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
## ArcaneChat Android Client
|
||||
|
||||
A [Delta Chat](https://delta.chat/) client for Android.
|
||||
A [Delta Chat](https://delta.chat/) client for Android. Learn more at: https://arcanechat.me
|
||||
|
||||
[<img src="store/get-it-on-gplay.png" alt="Get it on Google Play" height="48">](https://play.google.com/store/apps/details?id=com.github.arcanechat)
|
||||
[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite)
|
||||
[<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite)
|
||||
[<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite)
|
||||
|
||||
+43
-25
@@ -1,5 +1,5 @@
|
||||
plugins {
|
||||
id 'com.android.application' version '8.1.4'
|
||||
id 'com.android.application' version '8.5.2'
|
||||
id 'com.google.gms.google-services' version '4.4.1'
|
||||
}
|
||||
|
||||
@@ -33,8 +33,8 @@ android {
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
|
||||
defaultConfig {
|
||||
versionCode 30000702
|
||||
versionName "1.50.6"
|
||||
versionCode 30000708
|
||||
versionName "1.52.2"
|
||||
|
||||
applicationId "chat.delta.lite"
|
||||
multiDexEnabled true
|
||||
@@ -87,15 +87,45 @@ android {
|
||||
storeFile file(DC_DEBUG_STORE_FILE )
|
||||
}
|
||||
}
|
||||
release {
|
||||
releaseFdroid {
|
||||
// can be defined at `~/.gradle/gradle.properties` or at "Build/Generate signed APK"
|
||||
if(project.hasProperty("DC_RELEASE_STORE_FILE")) {
|
||||
storeFile file(DC_RELEASE_STORE_FILE)
|
||||
storePassword DC_RELEASE_STORE_PASSWORD
|
||||
keyAlias DC_RELEASE_KEY_ALIAS
|
||||
keyAlias DC_RELEASE_KEY_ALIAS_FDROID
|
||||
keyPassword DC_RELEASE_KEY_PASSWORD
|
||||
}
|
||||
}
|
||||
releaseApk {
|
||||
// can be defined at `~/.gradle/gradle.properties` or at "Build/Generate signed APK"
|
||||
if(project.hasProperty("DC_RELEASE_STORE_FILE")) {
|
||||
storeFile file(DC_RELEASE_STORE_FILE)
|
||||
storePassword DC_RELEASE_STORE_PASSWORD
|
||||
keyAlias DC_RELEASE_KEY_ALIAS_GPLAY
|
||||
keyPassword DC_RELEASE_KEY_PASSWORD
|
||||
}
|
||||
}
|
||||
releaseBundle {
|
||||
if(project.hasProperty("DC_BUNDLE_STORE_FILE")) {
|
||||
storeFile file(DC_BUNDLE_STORE_FILE)
|
||||
storePassword DC_BUNDLE_STORE_PASSWORD
|
||||
keyAlias DC_BUNDLE_KEY_ALIAS
|
||||
keyPassword DC_BUNDLE_STORE_PASSWORD
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
productFlavors {
|
||||
foss {
|
||||
dimension "none"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "false"
|
||||
}
|
||||
gplay {
|
||||
dimension "none"
|
||||
apply plugin: "com.google.gms.google-services"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "true"
|
||||
applicationId "com.github.arcanechat"
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -114,23 +144,12 @@ android {
|
||||
// nb: it is highly recommended to use the same settings in debug+release -
|
||||
// otherwise problems might be noticed delayed only
|
||||
minifyEnabled true
|
||||
signingConfig signingConfigs.release
|
||||
productFlavors.foss.signingConfig signingConfigs.releaseFdroid
|
||||
productFlavors.gplay.signingConfig signingConfigs.releaseApk
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
productFlavors {
|
||||
foss {
|
||||
dimension "none"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "false"
|
||||
}
|
||||
gplay {
|
||||
dimension "none"
|
||||
apply plugin: "com.google.gms.google-services"
|
||||
buildConfigField "boolean", "USE_PLAY_SERVICES", "true"
|
||||
}
|
||||
}
|
||||
|
||||
if(!project.hasProperty("ABI_FILTER")) {
|
||||
splits {
|
||||
abi {
|
||||
@@ -190,7 +209,7 @@ dependencies {
|
||||
implementation 'com.airbnb.android:lottie:4.2.2' // Lottie animations support.
|
||||
|
||||
implementation 'androidx.sharetarget:sharetarget:1.2.0'
|
||||
implementation 'androidx.webkit:webkit:1.11.0'
|
||||
implementation 'androidx.webkit:webkit:1.12.1'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.7.0'
|
||||
implementation 'com.google.android.material:material:1.12.0'
|
||||
@@ -210,7 +229,7 @@ dependencies {
|
||||
implementation 'com.google.guava:guava:31.1-android'
|
||||
implementation 'com.google.android.exoplayer:exoplayer-core:2.19.1' // plays video and audio
|
||||
implementation 'com.google.android.exoplayer:exoplayer-ui:2.19.1'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
|
||||
implementation 'com.google.zxing:core:3.3.0' // fixed version to support SDK<24
|
||||
implementation ('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } // QR Code scanner
|
||||
implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.1' // used as JSON library
|
||||
@@ -218,14 +237,13 @@ dependencies {
|
||||
implementation "me.leolin:ShortcutBadger:1.1.16" // display messagecount on the home screen icon.
|
||||
implementation 'com.jpardogo.materialtabstrip:library:1.0.9' // used in the emoji selector for the tab selection.
|
||||
implementation 'com.github.chrisbanes:PhotoView:2.1.3' // does the zooming on photos / media
|
||||
implementation 'com.github.penfeizhou.android.animation:glide-plugin:2.25.0' // APNG & animated webp support.
|
||||
implementation 'com.github.penfeizhou.android.animation:glide-plugin:3.0.2' // APNG & animated webp support.
|
||||
implementation 'com.caverock:androidsvg-aar:1.4' // SVG support.
|
||||
implementation 'com.github.bumptech.glide:glide:4.12.0'
|
||||
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
|
||||
annotationProcessor 'androidx.annotation:annotation:1.8.2'
|
||||
annotationProcessor 'androidx.annotation:annotation:1.9.1'
|
||||
implementation 'com.makeramen:roundedimageview:2.1.0' // crops the avatars to circles
|
||||
implementation 'com.pnikosis:materialish-progress:1.5' // used only in the "Progress Wheel" in Share Activity.
|
||||
implementation 'com.soundcloud.android:android-crop:1.0.1@aar' // used for profile and group avatar selection in Android SDK<19
|
||||
implementation 'com.github.amulyakhare:TextDrawable:558677ea31' // number of unread messages,
|
||||
// the one-letter circle for the contacts (when there is not avatar) and a white background.
|
||||
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
|
||||
@@ -240,7 +258,7 @@ dependencies {
|
||||
// <https://github.com/cketti/SafeContentResolver>
|
||||
implementation 'de.cketti.safecontentresolver:safe-content-resolver-v14:1.0.0'
|
||||
|
||||
gplayImplementation('com.google.firebase:firebase-messaging:24.0.0') { // for PUSH notifications
|
||||
gplayImplementation('com.google.firebase:firebase-messaging:24.1.0') { // for PUSH notifications
|
||||
exclude group: 'com.google.firebase', module: 'firebase-core'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-analytics'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
|
||||
@@ -254,7 +272,7 @@ dependencies {
|
||||
testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1'
|
||||
testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1'
|
||||
|
||||
androidTestImplementation 'androidx.test:runner:1.6.1'
|
||||
androidTestImplementation 'androidx.test:runner:1.6.2'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.6.1'
|
||||
androidTestImplementation 'androidx.test:rules:1.6.1'
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
pkgs = import nixpkgs { inherit system overlays; };
|
||||
android-sdk = android.sdk.${system} (sdkPkgs:
|
||||
with sdkPkgs; [
|
||||
build-tools-33-0-1
|
||||
build-tools-34-0-0
|
||||
cmdline-tools-latest
|
||||
platform-tools
|
||||
platforms-android-34
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:6f54e2c4e49405673e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.delta.lite.beta"
|
||||
"package_name": "com.github.arcanechat.beta"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
@@ -47,7 +47,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:aff82fbc40c8172e3e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "chat.delta.lite"
|
||||
"package_name": "com.github.arcanechat"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
@@ -66,7 +66,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:92b4cf12669cc2083e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "com.github.arcanechat"
|
||||
"package_name": "chat.delta.lite"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
@@ -85,7 +85,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:922391085500:android:228a205b8aa2bacc3e2bb9",
|
||||
"android_client_info": {
|
||||
"package_name": "com.github.arcanechat.beta"
|
||||
"package_name": "chat.delta.lite.beta"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=ff7bf6a86f09b9b2c40bb8f48b25fc19cf2b2664fd1d220cd7ab833ec758d0d7
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
|
||||
distributionSha256Sum=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
networkTimeout=10000
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -1667,6 +1667,18 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getPOILocation(JNIEnv *env, jobj
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcMsg_setFileAndDeduplicate(JNIEnv *env, jobject obj, jstring file, jstring name, jstring filemime)
|
||||
{
|
||||
CHAR_REF(file);
|
||||
CHAR_REF(name);
|
||||
CHAR_REF(filemime);
|
||||
dc_msg_set_file_and_deduplicate(get_dc_msg(env, obj), filePtr, namePtr, filemimePtr);
|
||||
CHAR_UNREF(filemime);
|
||||
CHAR_UNREF(name);
|
||||
CHAR_UNREF(file);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_DcMsg_setDimension(JNIEnv *env, jobject obj, int width, int height)
|
||||
{
|
||||
dc_msg_set_dimension(get_dc_msg(env, obj), width, height);
|
||||
|
||||
+1
-1
Submodule jni/deltachat-core-rust updated: 7da0662be0...e98f6a2c9b
+4
-4
@@ -126,7 +126,7 @@ if test -z $1 || test $1 = armeabi-v7a; then
|
||||
TARGET_CC="$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi --features jsonrpc
|
||||
cargo build $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi
|
||||
cp $CARGO_TARGET_DIR/armv7-linux-androideabi/$RELEASE/libdeltachat.a $jnidir/armeabi-v7a
|
||||
fi
|
||||
|
||||
@@ -135,7 +135,7 @@ if test -z $1 || test $1 = arm64-v8a; then
|
||||
TARGET_CC="$TOOLCHAIN/bin/aarch64-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi --features jsonrpc
|
||||
cargo build $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi
|
||||
cp $CARGO_TARGET_DIR/aarch64-linux-android/$RELEASE/libdeltachat.a $jnidir/arm64-v8a
|
||||
fi
|
||||
|
||||
@@ -144,7 +144,7 @@ if test -z $1 || test $1 = x86; then
|
||||
TARGET_CC="$TOOLCHAIN/bin/i686-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target i686-linux-android -p deltachat_ffi --features jsonrpc
|
||||
cargo build $RELEASEFLAG --target i686-linux-android -p deltachat_ffi
|
||||
cp $CARGO_TARGET_DIR/i686-linux-android/$RELEASE/libdeltachat.a $jnidir/x86
|
||||
fi
|
||||
|
||||
@@ -153,7 +153,7 @@ fi
|
||||
TARGET_CC="$TOOLCHAIN/bin/x86_64-linux-android21-clang" \
|
||||
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
|
||||
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
||||
cargo build $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi --features jsonrpc
|
||||
cargo build $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi
|
||||
cp $CARGO_TARGET_DIR/x86_64-linux-android/$RELEASE/libdeltachat.a $jnidir/x86_64
|
||||
fi
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ echo ""
|
||||
echo "and now: here is Delta Chat $VERSION - choose your flavour and mind your backups:"
|
||||
echo "- 🍋 https://download.delta.chat/android/beta/deltachat-gplay-release-$VERSION.apk (google play candidate, overwrites existing installs, should keep data)"
|
||||
echo "- 🍉 https://download.delta.chat/android/beta/deltachat-foss-debug-$VERSION.apk (f-droid candidate, can be installed beside google play)"
|
||||
echo "- 🍏 https://testflight.apple.com/join/uEMc1NxS (ios, update to $VERSION may take a day or so)"
|
||||
echo ""
|
||||
echo "what to test: PLEASE_FILL_OUT"
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ public class SharingTest {
|
||||
}
|
||||
}
|
||||
Uri uri = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + Uri.encode(pngImage));
|
||||
DcHelper.sharedFiles.put("/" + pngImage, 1);
|
||||
DcHelper.sharedFiles.put(pngImage, 1);
|
||||
|
||||
Intent i = new Intent(Intent.ACTION_SEND);
|
||||
i.setType("image/png");
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
@@ -329,8 +328,6 @@
|
||||
android:theme="@style/TextSecure.ScribbleTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name="com.soundcloud.android.crop.CropImageActivity" />
|
||||
|
||||
<activity android:name=".InstantOnboardingActivity"
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:windowSoftInputMode="stateHidden|adjustResize"
|
||||
|
||||
@@ -599,16 +599,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -621,14 +621,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
@@ -557,16 +557,15 @@ an irgendein System, das an der Zustellung von Push-Benachrichtigungen beteiligt
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Eine Delta-Chat-Anwendung erhält lokal ein „Geräte-Token“ (eine zufällige Zahl) und speichert es
|
||||
<p>Eine Delta-Chat-Anwendung erhält lokal ein „Geräte-Token“, verschlüsselt und speichert es
|
||||
auf dem <a href="https://delta.chat/chatmail">Chatmail</a>-Server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wenn ein <a href="https://delta.chat/chatmail">Chatmail</a>-Server eine E-Mail für einen Delta-Chat-Benutzer erhält
|
||||
erhält, leitet er den „Geräte-Token“ an den zentralen Delta-Chat-Benachrichtigungs-Proxy weiter.</p>
|
||||
erhält, leitet er das verschlüsselte Geräte-Token an den zentralen Delta-Chat-Benachrichtigungs-Proxy weiter.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Der zentrale Delta-Chat-Benachrichtigungs-Proxy leitet
|
||||
das „Geräte-Token“ an den jeweiligen Push-Dienst (Apple, Google, etc.) weiter,
|
||||
<p>Der zentrale Delta-Chat-Benachrichtigungs-Proxy entschlüsselt das Geräte-Token und leitet es an den jeweiligen Push-Dienst (Apple, Google, etc.) weiter,
|
||||
ohne jemals die IP- oder E-Mail-Adresse des Delta-Chat-Benutzers zu kennen.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -578,14 +577,15 @@ und auch nie den Inhalt einer Nachricht (auch nicht in verschlüsselter Form).</
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Stand Mai 2024 kennen die Chatmail-Server die Geräte-Token,
|
||||
aber wir planen, diese Informationen an den Benachrichtigungs-Proxy zu verschlüsseln
|
||||
zu verschlüsseln, so dass der Chatmail-Server niemals das „Geräte-Token“ erfährt.</p>
|
||||
|
||||
<p>Der zentrale Delta-Chat-Benachrichtigungs-Proxy <a href="https://github.com/deltachat/notifiers">ist klein und vollständig in Rust implementiert</a>
|
||||
und vergisst die Geräte-Token, sobald Apple/Google/etc. sie verarbeitet hat,
|
||||
normalerweise innerhalb weniger Millisekunden.</p>
|
||||
|
||||
<p>Beachten Sie, dass das Geräte-Token zwischen Anwendungen und dem Benachrichtigungs-Proxy verschlüsselt,
|
||||
aber nicht signiert ist.
|
||||
Der Benachrichtigungs-Proxy sieht also niemals E-Mail-Adressen, IP-Adressen oder
|
||||
irgendwelche kryptografischen Identitätsinformationen, die mit dem Gerät oder dem Geräte-Token eines Nutzers verbunden sind.</p>
|
||||
|
||||
<p>Aufgrund dieses umfassenden Datenschutzkonzepts würde sogar die Beschlagnahmung eines Chatmail-Servers,
|
||||
oder die vollständige Beschlagnahmung des zentralen Delta-Chat-Benachrichtigungsproxys
|
||||
keine privaten Informationen preisgeben, die den zentralen Push-Diensten nicht bereits vorliegen.</p>
|
||||
|
||||
@@ -603,16 +603,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -625,14 +625,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
@@ -597,16 +597,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -619,14 +619,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<li><a href="#delta-chat-prend-il-en-charge-les-images-vidéos-et-autres-pièces-jointes-">Delta Chat prend-il en charge les images, vidéos et autres pièces jointes ?</a></li>
|
||||
<li><a href="#multiple-accounts">What are profiles? How can I switch between them?</a></li>
|
||||
<li><a href="#qui-peut-voir-ma-photo-de-profil-">Qui peut voir ma photo de profil ?</a></li>
|
||||
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li>
|
||||
<li><a href="#signature">Puis-je afficher une Bio/Signature ou un Status/Motto avec Delta Chat?</a></li>
|
||||
<li><a href="#que-signifient-épingler-sourdine-et-archiver-">Que signifient “épingler”, “sourdine” et “archiver” ?</a></li>
|
||||
<li><a href="#que-signifie-le-point-vert-">Que signifie le point vert ?</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
@@ -115,14 +115,14 @@
|
||||
|
||||
</h2>
|
||||
|
||||
<p>Delta Chat is a reliable, decentralized and secure messaging app,
|
||||
available for mobile and desktop platforms.</p>
|
||||
<p>Delta Chat est une application de messagerie fiable, décentralisée et sécurisée,
|
||||
Disponible pour les plateformes smartphone et ordinateurs de bureau.</p>
|
||||
|
||||
<p>Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app.
|
||||
You can signup anonymously to a variety of <a href="https://delta.chat/chatmail">interoperable chatmail servers</a>
|
||||
which are minimal e-mail servers optimized for fast and secure operations.
|
||||
Or you may use classic e-mail servers and an existing e-mail account
|
||||
in which case Delta Chat acts as an e-mail app.</p>
|
||||
<p>Delta Chat ressemble à Whatsapp ou Telegram mais vous pouvez aussi l’utiliser et la considérer comme une application e-mail.
|
||||
Vous pouvez vous inscrire anonymement à une variété <a href="https://delta.chat/chatmail">de serveurs chatmail interéopérables</a>
|
||||
Qui sont des serveurs e-mails minimalistes optimisés pour des opérations rapides et sécurisées.
|
||||
Ou vous pouvez utiliser des serveurs e-mail classiques et utiliser votre compte e-mail
|
||||
dans ce cas Delta Chat agit comme une application de courriel.</p>
|
||||
|
||||
<p><img style="float:right; width:50%; max-width:360%; margin:1em;" src="../delta-what-optim.png" /></p>
|
||||
|
||||
@@ -134,15 +134,15 @@ in which case Delta Chat acts as an e-mail app.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>To securely setup contact with others <a href="#howtoe2ee">scan an invite QR code
|
||||
or share an invite link</a>.
|
||||
This is required when using a (default) chatmail-based chat profile
|
||||
because chatmail servers reject un-encrypted outgoing messages.</p>
|
||||
<p>Pour établir un contact en toute sécurité avec d’autres personnes <a href="#howtoe2ee">scanner un code QR d’invitation
|
||||
ou partager un lien d’invitation</a>.
|
||||
Cette opération est nécessaire lors de l’utilisation d’un profil de discussion basé sur le chatmail (par défaut).
|
||||
car les serveurs de chatmail rejettent les messages sortants non chiffrés.</p>
|
||||
|
||||
<p>If you create a chat profile with a classic e-mail address
|
||||
you may manually create a contact if you know their e-mail address
|
||||
and then write a message to them
|
||||
even if the recipient is not using Delta Chat.</p>
|
||||
<p>Si vous créez un profil discussion avec une adresse courriel classique
|
||||
vous pouvez créer manuellement un contact si vous connaissez son adresse courriel
|
||||
et lui écrire un message
|
||||
même si le destinataire n’utilise pas Delta Chat.</p>
|
||||
|
||||
<h3 id="quels-sont-les-avantages-de-delta-chat-par-rapport-aux-autres-messageries-">
|
||||
|
||||
@@ -154,23 +154,23 @@ even if the recipient is not using Delta Chat.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Anonymous chat profiles with fast, secure and interoperable <a href="https://delta.chat/chatmail">chatmail servers</a>
|
||||
which offer instant Push Notifications for iOS and Android devices.</p>
|
||||
<p>Profils anonymes de discussion avec des <a href="https://delta.chat/chatmail">serveurs de chatmail</a> rapides, sécurisés et interopérables
|
||||
qui offrent des notifications push instantanées pour les appareils iOS et Android.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Pervasive <a href="#multiple-accounts">multi-profile</a> and multi-device support on all platforms.</p>
|
||||
<p>Fonctionnalités de <a href="#multiple-accounts">multi-profil</a> et de multi-appareil supportées sur toutes les plateformes.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Interactive <a href="https://webxdc.org/apps">web apps in chats</a> for gaming and collaboration</p>
|
||||
<p><a href="https://webxdc.org/apps">web apps dans les chats</a> interactifs pour le gaming et la collaboration</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="#security-audits">Audited end-to-end encryption</a>
|
||||
safe against network and server attacks.</p>
|
||||
<p><a href="#security-audits">Chiffrement de bout en bout audité</a>
|
||||
contre les attaques ciblées sur le réseau et les serveurs.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Free and Open Source software, both app and server side.
|
||||
Built on <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/standards.md">E-mail and Web Internet Standards</a>,
|
||||
<a href="https://xkcd.com/927/">to avoid “yet another standard syndrome (xkcd 927)”</a></p>
|
||||
<p>Logiciel libre et open source, à la fois appli et côté serveur.
|
||||
Construit sur des <a href="https://github.com/deltachat/deltachat-core-rust/blob/master/standards.md">Standards d’Internet et d’e-mail</a>,
|
||||
<a href="https://xkcd.com/927/">pour éviter le syndrome du “standard de plus” (xkcd 927)</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -256,16 +256,16 @@ that tend to cause unsolicited messages (“spam”) sooner or later.</p>
|
||||
<h3 id="signature">
|
||||
|
||||
|
||||
Can I set a Bio/Signature/Status/Motto with Delta Chat? <a href="#signature" class="anchor"></a>
|
||||
Puis-je afficher une Bio/Signature ou un Status/Motto avec Delta Chat? <a href="#signature" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes,
|
||||
you can do so under <strong>Settings → Profile → Bio</strong>.
|
||||
Your contacts who use Delta Chat will see it
|
||||
when they view your contact details.
|
||||
Moreover, it will appear as a classic e-mail signature.</p>
|
||||
<p>Oui,
|
||||
vous pouvez le faire sous <strong>Paramètres → Profil → Bio</strong>.
|
||||
Vos contacts qui utilisent Delta Chat le verront
|
||||
lorsqu’ils consulteront vos coordonnées.
|
||||
De plus, elle apparaîtra sous la forme d’une signature classique sur vos courriels.</p>
|
||||
|
||||
<h3 id="que-signifient-épingler-sourdine-et-archiver-">
|
||||
|
||||
@@ -578,16 +578,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -600,14 +600,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
@@ -603,16 +603,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -625,14 +625,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
@@ -597,17 +597,17 @@ a qualsiasi sistema coinvolto nella consegna di Notifiche Push.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Un’app Delta Chat ottiene un “gettone del dispositivo” localmente e lo memorizza
|
||||
sul server <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Quando un server <a href="https://delta.chat/chatmail">chatmail</a> riceve un’e-mail per un utente Delta Chat
|
||||
inoltra il “gettone del dispositivo” al proxy di notifica centrale di Delta Chat.</p>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Il proxy di notifica centrale di Delta Chat inoltra
|
||||
il “gettone del dispositivo” al rispettivo servizio Push (Apple, Google, ecc.),
|
||||
senza mai conoscere l’IP o l’indirizzo e-mail degli utenti Delta Chat.</p>
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Il Servizio Push centrale (Apple, Google, ecc.)
|
||||
@@ -619,14 +619,15 @@ e inoltre non vedono mai il contenuto del messaggio (anche non in forma crittogr
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>A partire da Maggio 2024, i server chatmail conoscono i “gettoni del dispositivo”
|
||||
ma prevediamo di crittografare queste informazioni nel proxy di notifica
|
||||
in modo tale che il server chatmail non apprenda mai il gettone del dispositivo.</p>
|
||||
|
||||
<p>Il proxy di notifica centrale di Delta Chat <a href="https://github.com/deltachat/notifiers">è piccolo e completamente implementato in Rust</a>
|
||||
e si dimentica dei gettoni del dispositivo non appena Apple/Google/ecc li elabora,
|
||||
di solito nel giro di pochi millisecondi.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Come risultato di questo disegno complessivo sulla riservatezza, anche il sequestro di un server chatmail,
|
||||
o il sequestro totale del proxy di notifica centrale di Delta Chat
|
||||
non rivelerebbe informazioni private che i servizi Push non abbiano già.</p>
|
||||
|
||||
@@ -597,16 +597,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -619,14 +619,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
@@ -494,23 +494,23 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Aplikacja Delta Chat uzyskuje lokalnie „token urządzenia” i przechowuje go na serwerze <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
<p>Aplikacja Delta Chat uzyskuje lokalnie „token urządzenia”, szyfruje i przechowuje go na serwerze <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Kiedy serwer <a href="https://delta.chat/chatmail">chatmail</a> odbierze wiadomość e-mail od użytkownika Delta Chat, przekazuje „token urządzenia” do centralnego serwera proxy powiadomień Delta Chat.</p>
|
||||
<p>Kiedy serwer <a href="https://delta.chat/chatmail">chatmail</a> odbierze wiadomość e-mail od użytkownika Delta Chat, przekazuje zaszyfrowany token urządzenia do centralnego serwera proxy powiadomień Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Centralny serwer proxy powiadomień Delta Chat przekazuje „token urządzenia” do odpowiedniej usługi Push (Apple, Google itp.), nie znając nawet adresu IP ani adresu e-mail użytkowników Delta Chat.</p>
|
||||
<p>Centralny serwer proxy powiadomień Delta Chat deszyfruje token urządzenia i przekazuje go do odpowiedniej usługi Push (Apple, Google itp.), nie znając nawet adresu IP ani adresu e-mail użytkowników Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Centralna usługa Push (Apple, Google itp.) budzi aplikację Delta Chat na twoim urządzeniu, aby sprawdzić w tle nowe wiadomości. Nie zna chatmaila ani adresu e-mail urządzenia, na którym się budzi. Centralne usługi push Apple/Google nigdy nie widzą adresu e-mail (nadawcy ani odbiorcy), a także nigdy nie widzą treści wiadomości (również w formie zaszyfrowanej).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Od maja 2024 r. serwery chatmail znają „tokeny urządzenia”, ale planujemy szyfrować te informacje na serwerze proxy powiadomień, tak aby serwer chatmail nigdy nie poznał tokena urządzenia.</p>
|
||||
|
||||
<p>Centralny serwer proxy powiadomień Delta Chat <a href="https://github.com/deltachat/notifiers">jest mały i w pełni zaimplementowany w Rust</a> i zapomina o tokenach urządzeń zaraz po ich przetworzeniu przez Apple/Google/itp, zwykle w ciągu kilku milisekund.</p>
|
||||
|
||||
<p>Pamiętaj, że token urządzenia jest szyfrowany między aplikacjami a serwerem proxy powiadomień, ale nie jest podpisany. Serwer proxy powiadomień nigdy nie widzi adresów e-mail, adresów IP ani żadnych kryptograficznych informacji identyfikujących powiązanych z urządzeniem użytkownika (tokenem).</p>
|
||||
|
||||
<p>W wyniku tego ogólnego projektu ochrony prywatności nawet przejęcie serwera chatmail lub pełne przejęcie centralnego serwera proxy powiadomień Delta Chat nie spowodowałoby ujawnienia prywatnych informacji, których usługi Push jeszcze nie posiadają.</p>
|
||||
|
||||
<h3 id="dlaczego-delta-chat-integruje-się-ze-scentralizowanymi-zastrzeżonymi-usługami-push-applegoogle">
|
||||
@@ -945,7 +945,7 @@ W przypadku innych programów można znaleźć rozwiązanie online.</p>
|
||||
<p>W systemie <strong>iOS</strong> upewnij się, że jest przydzielony dostęp do opcji „Ustawienia » Aplikacje » Delta Chat » <strong>Sieć lokalna</strong>”</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>W systemie <strong>macOS</strong> włącz „Ustawienia systemowe » Prywatność i bezpieczeństwo » <strong>Sieć lokalna</strong> » Delta Chat”</p>
|
||||
<p>W systemie <strong>macOS</strong> włącz „Preferencje systemowe » Ochrona i prywatność » <strong>Sieć lokalna</strong> » Delta Chat”</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Twój system może mieć „zaporę ogniową”, o której wiadomo, że powoduje problemy (szczególnie w systemie Windows).
|
||||
|
||||
@@ -597,16 +597,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -619,14 +619,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
@@ -600,16 +600,16 @@ Push-уведомления недоступны.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Приложение Delta Chat локально получает “токен устройства” и сохраняет его
|
||||
<p>Приложение Delta Chat локально получает “токен устройства” шифрует его и сохраняет
|
||||
на сервере <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Когда сервер <a href="https://delta.chat/chatmail">chatmail</a> получает электронную почту для пользователя Delta Chat
|
||||
он пересылает “токен устройства” центральному прокси-серверу уведомлений Delta Chat.</p>
|
||||
он пересылает “зашифрованный токен устройства” центральному прокси-серверу уведомлений Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Центральный прокси-сервер уведомлений Delta Chat пересылает
|
||||
“токен устройства” в соответствующую службу Push (Apple, Google и т. д.),
|
||||
<p>Центральный прокси-сервер уведомлений Delta Chat расшифровывает “токен устройства” и
|
||||
пересылает его в соответствующую службу Push (Apple, Google и т. д.),
|
||||
даже не зная IP-адрес или адрес электронной почты пользователей Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -622,14 +622,15 @@ Push-уведомления недоступны.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>По состоянию на май 2024 года серверы chatmail знают о “токенах устройства”,
|
||||
но мы планируем зашифровать эту информацию для прокси-сервера уведомлений
|
||||
так, чтобы сервер chatmail не смог получить доступ к токену устройства.</p>
|
||||
|
||||
<p>Центральный прокси-сервер уведомлений Delta Chat <a href="https://github.com/deltachat/notifiers">небольшой и полностью реализован на Rust</a>
|
||||
забывает о токенах устройств, как только Apple/Google/и т. д. обработали их,
|
||||
обычно за несколько миллисекунд.</p>
|
||||
|
||||
<p>Обратите внимание, что токен устройства шифруется между приложениями и прокси-сервером уведомлений,
|
||||
но не подписывается.
|
||||
Прокси-сервер уведомлений не получает доступ к адресам электронной почты, IP-адресам
|
||||
или криптографическим идентификационным данным устройства пользователя (токену).</p>
|
||||
|
||||
<p>В результате такого общего подхода к обеспечению конфиденциальности, даже захват почтового сервера chatmail,
|
||||
или полный захват центрального прокси-сервера уведомлений Delta Chat
|
||||
не раскроет конфиденциальную информацию, которой сервисы Push уже не обладают.</p>
|
||||
|
||||
@@ -603,16 +603,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -625,14 +625,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
@@ -605,16 +605,16 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>A Delta Chat app obtains a “device token” locally and stores it
|
||||
<p>A Delta Chat app obtains a “device token” locally, encrypts it and stores it
|
||||
on the <a href="https://delta.chat/chatmail">chatmail</a> server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives an e-mail for a Delta Chat user
|
||||
it forwards the “device token” to the central Delta Chat notification proxy.</p>
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy forwards
|
||||
the “device token” to the respective Push service (Apple, Google, etc.),
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or e-mail address of Delta Chat users.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -627,14 +627,15 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>As of May 2024, chatmail servers know about “device tokens”
|
||||
but we plan to encrypt this information to the notification proxy
|
||||
such that the chatmail server never learns the device token.</p>
|
||||
|
||||
<p>The central Delta Chat notification proxy <a href="https://github.com/deltachat/notifiers">is small and fully implemented in Rust</a>
|
||||
and forgets about device-tokens as soon as Apple/Google/etc processed them,
|
||||
usually in a matter of milliseconds.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees e-mail addresses, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
|
||||
<p>Resulting from this overall privacy design, even the seizure of a chatmail server,
|
||||
or the full seizure of the central Delta Chat notification proxy
|
||||
would not reveal private information that Push services do not already have.</p>
|
||||
|
||||
@@ -498,23 +498,23 @@ Push-сповіщення автоматично активуються для
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Додаток Delta Chat отримує “токен пристрою” локально і зберігає його на сервері <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
<p>Додаток Delta Chat отримує “токен пристрою” локально, шифрує його і зберігає на сервері <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Коли <a href="https://delta.chat/chatmail">chatmail</a>-сервер отримує електронний лист від користувача Delta Chat він пересилає “токен пристрою” до центрального проксі-сповіщення Delta Chat.</p>
|
||||
<p>Коли сервер <a href="https://delta.chat/chatmail">chatmail</a> отримує електронний лист від користувача Delta Chat він пересилає зашифрований токен пристрою до центрального проксі-сервера сповіщень Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Центральний проксі-сервер сповіщень Delta Chat пересилає “токен пристрою” до відповідного Push-сервісу (Apple, Google тощо), навіть не знаючи IP-адреси чи електронної пошти користувачів Delta Chat.</p>
|
||||
<p>Центральний проксі-сервер сповіщень Delta Chat розшифровує токен пристрою і пересилає його до відповідного Push-сервісу (Apple, Google тощо), навіть не знаючи IP-адреси або електронної пошти користувачів Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Центральний Push-сервіс (Apple, Google тощо) запускає додаток Delta Chat на вашому пристрої щоб перевірити наявність нових повідомлень у фоновому режимі. Він не знає про пошту чату або адресу електронної пошти пристрою, який він пробуджує. Центральні служби Apple/Google Push ніколи не бачать адресу електронної пошти (відправника або одержувача) а також ніколи не бачать жодного вмісту повідомлення (навіть в зашифрованому вигляді).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Станом на травень 2024 року chatmail-сервери знають про “токени пристроїв” але ми плануємо зашифрувати цю інформацію для проксі-сповіщень таким чином, щоб сервер чату ніколи не дізнався токен пристрою.</p>
|
||||
|
||||
<p>Центральний проксі для сповіщень Delta Chat <a href="https://github.com/deltachat/notifiers">невеликий і повністю реалізований на Rust</a> забуває про токени пристроїв, як тільки Apple/Google/etc обробили їх, зазвичай за лічені мілісекунди.</p>
|
||||
|
||||
<p>Зверніть увагу, що токен пристрою шифрується між програмами та проксі-сповіщеннями але не підписується. Таким чином, проксі-служба сповіщень ніколи не бачить адреси електронної пошти, IP-адреси або будь-яку криптографічну ідентифікаційну інформацію, пов’язану з пристроєм користувача (токеном).</p>
|
||||
|
||||
<p>В результаті цього загального дизайну конфіденційності, навіть захоплення chatmail-сервера, або повне вилучення центрального проксі-сервера повідомлень Delta Chat не призведе до розкриття приватної інформації, якої ще не мають Push-сервіси.</p>
|
||||
|
||||
<h3 id="чому-delta-chat-інтегрується-з-централізованими-пропрієтарними-push-сервісами-applegoogle">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -161,6 +161,7 @@ public class DcMsg {
|
||||
public native void setHtml (String text);
|
||||
public native void setFile (String file, String filemime);
|
||||
public native void forceSticker ();
|
||||
public native void setFileAndDeduplicate(String file, String name, String filemime);
|
||||
public native void setDimension (int width, int height);
|
||||
public native void setDuration (int duration);
|
||||
public native void setLocation (float latitude, float longitude);
|
||||
|
||||
@@ -120,7 +120,6 @@ import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener;
|
||||
import org.thoughtcrime.securesms.util.guava.Optional;
|
||||
import org.thoughtcrime.securesms.util.views.ProgressDialog;
|
||||
import org.thoughtcrime.securesms.util.views.Stub;
|
||||
import org.thoughtcrime.securesms.video.recode.VideoRecoder;
|
||||
import org.thoughtcrime.securesms.videochat.VideochatUtil;
|
||||
|
||||
@@ -740,8 +739,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
handleReplyMessage(quote);
|
||||
}
|
||||
|
||||
String filename = draft.getFile();
|
||||
if (filename.isEmpty() || !new File(filename).exists()) {
|
||||
String file = draft.getFile();
|
||||
if (file.isEmpty() || !new File(file).exists()) {
|
||||
future.set(!text.isEmpty());
|
||||
updateToggleButtonState();
|
||||
return future;
|
||||
@@ -761,26 +760,21 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
};
|
||||
|
||||
File file = new File(filename);
|
||||
Uri uri = Uri.fromFile(file);
|
||||
switch (draft.getType()) {
|
||||
case DcMsg.DC_MSG_IMAGE:
|
||||
setMedia(uri, MediaType.IMAGE).addListener(listener);
|
||||
setMedia(draft, MediaType.IMAGE).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_GIF:
|
||||
setMedia(uri, MediaType.GIF).addListener(listener);
|
||||
setMedia(draft, MediaType.GIF).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_AUDIO:
|
||||
setMedia(uri, MediaType.AUDIO).addListener(listener);
|
||||
setMedia(draft, MediaType.AUDIO).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_VIDEO:
|
||||
setMedia(uri, MediaType.VIDEO).addListener(listener);
|
||||
break;
|
||||
case DcMsg.DC_MSG_WEBXDC:
|
||||
setMedia(draft, MediaType.DOCUMENT).addListener(listener);
|
||||
setMedia(draft, MediaType.VIDEO).addListener(listener);
|
||||
break;
|
||||
default:
|
||||
setMedia(uri, MediaType.DOCUMENT).addListener(listener);
|
||||
setMedia(draft, MediaType.DOCUMENT).addListener(listener);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1034,7 +1028,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
msg = new DcMsg(dcContext, DcMsg.DC_MSG_FILE);
|
||||
}
|
||||
String path = attachment.getRealPath(this);
|
||||
msg.setFile(path, null);
|
||||
msg.setFileAndDeduplicate(path, attachment.getFileName(), null);
|
||||
}
|
||||
}
|
||||
msg.setText(body);
|
||||
@@ -1287,7 +1281,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
if (quote.isPresent()) {
|
||||
msg.setQuote(quote.get().getQuotedMsg());
|
||||
}
|
||||
msg.setFile(path, null);
|
||||
msg.setFileAndDeduplicate(path, null, null);
|
||||
msg.forceSticker();
|
||||
dcContext.sendMsg(chatId, msg);
|
||||
}
|
||||
|
||||
@@ -704,7 +704,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
index++;
|
||||
}
|
||||
}
|
||||
dcContext.markseenMsgs(ids);
|
||||
Util.runOnAnyBackgroundThread(() -> dcContext.markseenMsgs(ids));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -89,7 +89,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
public static final String CLEAR_NOTIFICATIONS = "clear_notifications";
|
||||
public static final String ACCOUNT_ID_EXTRA = "account_id";
|
||||
public static final String FROM_WELCOME = "from_welcome";
|
||||
public static final String WARN_CANNOT_ENCRYPT = "warn_cannot_encrypt";
|
||||
|
||||
private ConversationListFragment conversationListFragment;
|
||||
public TextView title;
|
||||
@@ -278,11 +277,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
AccountManager.getInstance().switchAccountAndStartActivity(this, accountId);
|
||||
}
|
||||
|
||||
String warnAddr = getIntent().getStringExtra(WARN_CANNOT_ENCRYPT);
|
||||
if (!TextUtils.isEmpty(warnAddr)) {
|
||||
DcHelper.showEncryptionRequiredDialog(this, warnAddr);
|
||||
}
|
||||
|
||||
refreshAvatar();
|
||||
refreshUnreadIndicator();
|
||||
refreshTitle();
|
||||
@@ -463,7 +457,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
startActivity(new Intent(this, ProfileActivity.class));
|
||||
return true;
|
||||
case R.id.menu_public_bots:
|
||||
handleShowBot("puente@buzon.uy", "OPENPGP4FPR:4B41E5AFAF78A0C71DB56138D5BEFED00A45F97A#a=puente%40buzon.uy&n=Public%20Bots&i=ZC_oaJtuvJP&s=5SE96rRovsK");
|
||||
handleShowBot("botsindex@arcanechat.me", "https://i.delta.chat/#67889B0362BEDBFEE05ACD92C1D737FA632A9582&a=botsindex%40arcanechat.me&n=Public%20Bots&i=336MTEz38EH-RJxM9OKWygYK&s=TpVVGK6C4KrJmRG0bwHLalXt");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.request.target.SimpleTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
import com.soundcloud.android.crop.Crop;
|
||||
|
||||
import org.thoughtcrime.securesms.components.AvatarSelector;
|
||||
import org.thoughtcrime.securesms.components.InputAwareLayout;
|
||||
@@ -147,10 +146,6 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
case ScribbleActivity.SCRIBBLE_REQUEST_CODE:
|
||||
setAvatarView(data.getData());
|
||||
break;
|
||||
|
||||
case Crop.REQUEST_CROP:
|
||||
setAvatarView(Crop.getOutput(data));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
|
||||
import com.b44t.messenger.DcChat;
|
||||
@@ -26,7 +25,6 @@ import com.b44t.messenger.DcContext;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
import com.bumptech.glide.request.target.SimpleTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.soundcloud.android.crop.Crop;
|
||||
|
||||
import org.thoughtcrime.securesms.components.AvatarSelector;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
@@ -221,22 +219,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||
updateGroup(groupName);
|
||||
} else {
|
||||
verified = !broadcast && allMembersVerified();
|
||||
if (verified && getAdapter().getContacts().size() == 1) {
|
||||
new AlertDialog.Builder(this)
|
||||
.setMessage(R.string.create_verified_group_ask)
|
||||
.setNeutralButton(R.string.learn_more, (d, w) -> DcHelper.openHelp(this, "#e2eeguarantee"))
|
||||
.setPositiveButton(R.string.yes, (d, w) -> {
|
||||
createGroup(groupName);
|
||||
})
|
||||
.setNegativeButton(R.string.no, (d, w) -> {
|
||||
verified = false;
|
||||
createGroup(groupName);
|
||||
})
|
||||
.setCancelable(true)
|
||||
.show();
|
||||
} else {
|
||||
createGroup(groupName);
|
||||
}
|
||||
createGroup(groupName);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -360,10 +343,6 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||
case ScribbleActivity.SCRIBBLE_REQUEST_CODE:
|
||||
setAvatarView(data.getData());
|
||||
break;
|
||||
|
||||
case Crop.REQUEST_CROP:
|
||||
setAvatarView(Crop.getOutput(data));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.google.zxing.integration.android.IntentIntegrator;
|
||||
import com.google.zxing.integration.android.IntentResult;
|
||||
import com.soundcloud.android.crop.Crop;
|
||||
|
||||
import org.thoughtcrime.securesms.components.AvatarSelector;
|
||||
import org.thoughtcrime.securesms.connect.AccountManager;
|
||||
@@ -56,6 +55,7 @@ import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints;
|
||||
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
|
||||
import org.thoughtcrime.securesms.qr.RegistrationQrActivity;
|
||||
import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.views.ProgressDialog;
|
||||
@@ -71,7 +71,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
private static final String DCACCOUNT = "dcaccount";
|
||||
private static final String DCLOGIN = "dclogin";
|
||||
private static final String INSTANCES_URL = "https://delta.chat/chatmail";
|
||||
private static final String DEFAULT_CHATMAIL_HOST = "nine.testrun.org";
|
||||
private static final String DEFAULT_CHATMAIL_HOST = "arcanechat.me";
|
||||
|
||||
public static final String QR_ACCOUNT_EXTRA = "qr_account_extra";
|
||||
public static final String FROM_WELCOME = "from_welcome";
|
||||
@@ -191,10 +191,6 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
setAvatarView(data.getData());
|
||||
break;
|
||||
|
||||
case Crop.REQUEST_CROP:
|
||||
setAvatarView(Crop.getOutput(data));
|
||||
break;
|
||||
|
||||
case IntentIntegrator.REQUEST_CODE:
|
||||
String qrRaw = data.getStringExtra(RegistrationQrActivity.QRDATA_EXTRA);
|
||||
if (qrRaw == null) {
|
||||
@@ -333,14 +329,14 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
|
||||
privacyPolicyBtn.setOnClickListener(view -> {
|
||||
if (!isDcLogin) {
|
||||
WebViewActivity.openUrlInBrowser(this, "https://" + providerHost + "/privacy.html");
|
||||
IntentUtils.showInBrowser(this, "https://" + providerHost + "/privacy.html");
|
||||
}
|
||||
});
|
||||
|
||||
signUpBtn.setOnClickListener(view -> createProfile());
|
||||
|
||||
findViewById(R.id.use_other_server).setOnClickListener((v) -> {
|
||||
WebViewActivity.openUrlInBrowser(this, INSTANCES_URL);
|
||||
IntentUtils.showInBrowser(this, INSTANCES_URL);
|
||||
});
|
||||
findViewById(R.id.login_button).setOnClickListener((v) -> {
|
||||
startRegistrationActivity();
|
||||
|
||||
@@ -62,16 +62,16 @@ public class LocalHelpActivity extends WebViewActivity
|
||||
webView.scrollTo(0, 0);
|
||||
return true;
|
||||
case R.id.learn_more:
|
||||
openOnlineUrl("https://delta.chat");
|
||||
openOnlineUrl("https://arcanechat.me");
|
||||
return true;
|
||||
case R.id.privacy_policy:
|
||||
openOnlineUrl("https://delta.chat/gdpr");
|
||||
openOnlineUrl("https://arcanechat.me/privacy.html");
|
||||
return true;
|
||||
case R.id.contribute:
|
||||
openOnlineUrl("https://github.com/deltachat/deltachat-android");
|
||||
openOnlineUrl("https://arcanechat.me/#contribute");
|
||||
return true;
|
||||
case R.id.report_issue:
|
||||
openOnlineUrl("https://github.com/deltachat/deltachat-android/issues");
|
||||
openOnlineUrl("https://github.com/ArcaneChat/android/issues");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -207,7 +207,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
messageRecord = null;
|
||||
long date = getIntent().getLongExtra(DATE_EXTRA, 0);
|
||||
long size = getIntent().getLongExtra(SIZE_EXTRA, 0);
|
||||
initialMedia = new MediaItem(null, getIntent().getData(), getIntent().getType(),
|
||||
initialMedia = new MediaItem(null, getIntent().getData(), null, getIntent().getType(),
|
||||
DcMsg.DC_MSG_NO_ID, date, size, false);
|
||||
|
||||
if (address != null) {
|
||||
@@ -218,7 +218,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
} else {
|
||||
messageRecord = dcContext.getMsg(msgId);
|
||||
initialMedia = new MediaItem(Recipient.fromChat(context, msgId), Uri.fromFile(messageRecord.getFileAsFile()),
|
||||
messageRecord.getFilemime(), messageRecord.getId(), messageRecord.getDateReceived(),
|
||||
messageRecord.getFilename(), messageRecord.getFilemime(), messageRecord.getId(), messageRecord.getDateReceived(),
|
||||
messageRecord.getFilebytes(), messageRecord.isOutgoing());
|
||||
conversationRecipient = Recipient.fromChat(context, msgId);
|
||||
}
|
||||
@@ -232,12 +232,11 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
// if you search for the place where the media are loaded, go to 'onCreateLoader'.
|
||||
|
||||
Log.w(TAG, "Loading Part URI: " + initialMedia);
|
||||
|
||||
if (messageRecord != null) {
|
||||
getSupportLoaderManager().restartLoader(0, null, this);
|
||||
} else {
|
||||
mediaPager.setAdapter(new SingleItemPagerAdapter(this, GlideApp.with(this),
|
||||
getWindow(), initialMedia.uri, initialMedia.type, initialMedia.size));
|
||||
getWindow(), initialMedia.uri, initialMedia.name, initialMedia.type, initialMedia.size));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,7 +312,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
private void performSavetoDisk(@NonNull MediaItem mediaItem) {
|
||||
SaveAttachmentTask saveTask = new SaveAttachmentTask(MediaPreviewActivity.this);
|
||||
long saveDate = (mediaItem.date > 0) ? mediaItem.date : System.currentTimeMillis();
|
||||
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Attachment(mediaItem.uri, mediaItem.type, saveDate, null));
|
||||
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Attachment(mediaItem.uri, mediaItem.type, saveDate, mediaItem.name));
|
||||
}
|
||||
|
||||
private void showInChat() {
|
||||
@@ -473,9 +472,12 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
MediaItemAdapter adapter = (MediaItemAdapter)mediaPager.getAdapter();
|
||||
|
||||
if (adapter != null) {
|
||||
MediaItem item = adapter.getMediaItemFor(position);
|
||||
if (item.recipient != null) item.recipient.removeListener(MediaPreviewActivity.this);
|
||||
|
||||
try {
|
||||
MediaItem item = adapter.getMediaItemFor(position);
|
||||
if (item.recipient != null) item.recipient.removeListener(MediaPreviewActivity.this);
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.w(TAG, "Ignoring invalid position index");
|
||||
}
|
||||
adapter.pause(position);
|
||||
}
|
||||
}
|
||||
@@ -486,18 +488,20 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
private final GlideRequests glideRequests;
|
||||
private final Window window;
|
||||
private final Uri uri;
|
||||
private final String name;
|
||||
private final String mediaType;
|
||||
private final long size;
|
||||
|
||||
private final LayoutInflater inflater;
|
||||
|
||||
SingleItemPagerAdapter(@NonNull Context context, @NonNull GlideRequests glideRequests,
|
||||
@NonNull Window window, @NonNull Uri uri, @NonNull String mediaType,
|
||||
@NonNull Window window, @NonNull Uri uri, @Nullable String name, @NonNull String mediaType,
|
||||
long size)
|
||||
{
|
||||
this.glideRequests = glideRequests;
|
||||
this.window = window;
|
||||
this.uri = uri;
|
||||
this.name = name;
|
||||
this.mediaType = mediaType;
|
||||
this.size = size;
|
||||
this.inflater = LayoutInflater.from(context);
|
||||
@@ -519,7 +523,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
MediaView mediaView = itemView.findViewById(R.id.media_view);
|
||||
|
||||
try {
|
||||
mediaView.set(glideRequests, window, uri, mediaType, size, true);
|
||||
mediaView.set(glideRequests, window, uri, name, mediaType, size, true);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
@@ -539,7 +543,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
@Override
|
||||
public MediaItem getMediaItemFor(int position) {
|
||||
return new MediaItem(null, uri, mediaType, DcMsg.DC_MSG_NO_ID, -1, -1, true);
|
||||
return new MediaItem(null, uri, name, mediaType, DcMsg.DC_MSG_NO_ID, -1, -1, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -604,7 +608,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
try {
|
||||
//noinspection ConstantConditions
|
||||
mediaView.set(glideRequests, window, Uri.fromFile(msg.getFileAsFile()),
|
||||
mediaView.set(glideRequests, window, Uri.fromFile(msg.getFileAsFile()), msg.getFilename(),
|
||||
msg.getFilemime(), msg.getFilebytes(), autoplay);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, e);
|
||||
@@ -633,6 +637,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
return new MediaItem(Recipient.fromChat(context, msg.getId()),
|
||||
Uri.fromFile(msg.getFileAsFile()),
|
||||
msg.getFilename(),
|
||||
msg.getFilemime(),
|
||||
msg.getId(),
|
||||
msg.getDateReceived(),
|
||||
@@ -655,6 +660,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
private static class MediaItem {
|
||||
private final @Nullable Recipient recipient;
|
||||
private final @NonNull Uri uri;
|
||||
private final @Nullable String name;
|
||||
private final @NonNull String type;
|
||||
private final int msgId;
|
||||
private final long date;
|
||||
@@ -663,6 +669,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
private MediaItem(@Nullable Recipient recipient,
|
||||
@NonNull Uri uri,
|
||||
@Nullable String name,
|
||||
@NonNull String type,
|
||||
int msgId,
|
||||
long date,
|
||||
@@ -671,6 +678,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
{
|
||||
this.recipient = recipient;
|
||||
this.uri = uri;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
this.msgId = msgId;
|
||||
this.date = date;
|
||||
|
||||
@@ -111,8 +111,6 @@ public class NewConversationActivity extends ContactSelectionActivity {
|
||||
int contactId = dcContext.lookupContactIdByAddr(addr);
|
||||
if (contactId!=0 && dcContext.getChatIdByContactId(contactId)!=0) {
|
||||
openConversation(dcContext.getChatIdByContactId(contactId));
|
||||
} else if (contactId == 0 && dcContext.isChatmail()) {
|
||||
DcHelper.showEncryptionRequiredDialog(this, addr);
|
||||
} else {
|
||||
String nameNAddr = contactId == 0 ? addr : dcContext.getContact(contactId).getNameNAddr();
|
||||
new AlertDialog.Builder(this)
|
||||
|
||||
@@ -122,7 +122,13 @@ public class ProfileDocumentsFragment
|
||||
|
||||
noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE);
|
||||
if (chatId == DC_CHAT_NO_CHAT) {
|
||||
noMedia.setText(R.string.tab_all_media_empty_hint);
|
||||
if (showWebxdc) {
|
||||
noMedia.setText(R.string.all_apps_empty_hint);
|
||||
} else if (!showAudio){
|
||||
noMedia.setText(R.string.all_files_empty_hint);
|
||||
} else {
|
||||
noMedia.setText(R.string.tab_all_media_empty_hint);
|
||||
}
|
||||
} else if (showAudio) {
|
||||
noMedia.setText(R.string.tab_audio_empty_hint);
|
||||
} else if (showWebxdc) {
|
||||
|
||||
@@ -16,7 +16,6 @@ import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.getContext;
|
||||
import static org.thoughtcrime.securesms.service.IPCAddAccountsService.ACCOUNT_DATA;
|
||||
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
@@ -438,7 +437,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
|
||||
.setPositiveButton(R.string.perm_continue, (dialog, which)-> {
|
||||
// pass control to browser, we'll be back in business at (**)
|
||||
activity.oauth2Requested = System.currentTimeMillis();
|
||||
IntentUtils.showBrowserIntent(activity, oauth2url);
|
||||
IntentUtils.showInBrowser(activity, oauth2url);
|
||||
oauth2started.set(true);
|
||||
})
|
||||
.setCancelable(false)
|
||||
@@ -493,11 +492,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
|
||||
if (provider!=null) {
|
||||
String url = provider.getOverviewPage();
|
||||
if(!url.isEmpty()) {
|
||||
try {
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(this, R.string.no_browser_installed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
IntentUtils.showInBrowser(this, url);
|
||||
} else {
|
||||
// this should normally not happen
|
||||
Toast.makeText(this, "ErrProviderWithoutUrl", Toast.LENGTH_LONG).show();
|
||||
|
||||
@@ -58,6 +58,7 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity implement
|
||||
{
|
||||
private static final String TAG = ShareActivity.class.getSimpleName();
|
||||
|
||||
public static final String EXTRA_ACC_ID = "acc_id";
|
||||
public static final String EXTRA_CHAT_ID = "chat_id";
|
||||
public static final String EXTRA_MSG_TYPE = "msg_type";
|
||||
public static final String EXTRA_MSG_SUBJECT = "msg_subject";
|
||||
@@ -213,14 +214,10 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity implement
|
||||
}
|
||||
|
||||
private void handleResolvedMedia(Intent intent) {
|
||||
int accId = intent.getIntExtra(EXTRA_ACC_ID, -1);
|
||||
int chatId = intent.getIntExtra(EXTRA_CHAT_ID, -1);
|
||||
String msgType = intent.getStringExtra(EXTRA_MSG_TYPE);
|
||||
|
||||
String shortcutId = intent.getStringExtra(ShortcutManagerCompat.EXTRA_SHORTCUT_ID);
|
||||
if (chatId == -1 && shortcutId != null) {
|
||||
chatId = Integer.parseInt(shortcutId);
|
||||
}
|
||||
|
||||
String[] extraEmail = getIntent().getStringArrayExtra(Intent.EXTRA_EMAIL);
|
||||
/*
|
||||
usually, external app will try to start "e-mail sharing" intent, providing it:
|
||||
@@ -259,28 +256,21 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity implement
|
||||
}
|
||||
*/
|
||||
|
||||
String addr = null;
|
||||
if(chatId == -1 && extraEmail != null && extraEmail.length > 0) {
|
||||
addr = extraEmail[0];
|
||||
final String addr = extraEmail[0];
|
||||
int contactId = dcContext.lookupContactIdByAddr(addr);
|
||||
|
||||
if(contactId != 0 || !dcContext.isChatmail()) {
|
||||
if(contactId == 0) {
|
||||
contactId = dcContext.createContact(null, addr);
|
||||
}
|
||||
|
||||
chatId = dcContext.createChatByContactId(contactId);
|
||||
addr = null;
|
||||
if(contactId == 0) {
|
||||
contactId = dcContext.createContact(null, addr);
|
||||
}
|
||||
|
||||
chatId = dcContext.createChatByContactId(contactId);
|
||||
}
|
||||
Intent composeIntent;
|
||||
if (addr != null) {
|
||||
composeIntent = new Intent(this, ConversationListActivity.class);
|
||||
composeIntent.putExtra(ConversationListActivity.WARN_CANNOT_ENCRYPT, addr);
|
||||
startActivity(composeIntent);
|
||||
} else if (chatId != -1) {
|
||||
if (accId != -1 && chatId != -1) {
|
||||
composeIntent = getBaseShareIntent(ConversationActivity.class);
|
||||
composeIntent.putExtra(ConversationActivity.CHAT_ID_EXTRA, chatId);
|
||||
composeIntent.putExtra(ConversationActivity.ACCOUNT_ID_EXTRA, accId);
|
||||
RelayUtil.setSharedType(composeIntent, msgType);
|
||||
RelayUtil.setSharedUris(composeIntent, resolvedExtras);
|
||||
startActivity(composeIntent);
|
||||
|
||||
@@ -26,6 +26,7 @@ import androidx.webkit.ProxyController;
|
||||
import androidx.webkit.ProxyConfig;
|
||||
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
|
||||
public class WebViewActivity extends PassphraseRequiredActionBarActivity
|
||||
implements SearchView.OnQueryTextListener,
|
||||
@@ -278,16 +279,8 @@ public class WebViewActivity extends PassphraseRequiredActionBarActivity
|
||||
// onBackPressed() can be overwritten by derived classes as needed.
|
||||
// the default behavior (close the activity) is just fine eg. for Webxdc, Connectivity, HTML-mails
|
||||
|
||||
public static void openUrlInBrowser(Context context, String url) {
|
||||
try {
|
||||
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(context, R.string.no_browser_installed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean openOnlineUrl(String url) {
|
||||
openUrlInBrowser(this, url);
|
||||
IntentUtils.showInBrowser(this, url);
|
||||
// returning `true` causes the WebView to abort loading
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Base64;
|
||||
@@ -46,6 +45,7 @@ import org.json.JSONObject;
|
||||
import org.thoughtcrime.securesms.connect.AccountManager;
|
||||
import org.thoughtcrime.securesms.connect.DcEventCenter;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.JsonUtils;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
@@ -294,7 +294,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE
|
||||
addToHomeScreen(this, dcAppMsg.getId());
|
||||
return true;
|
||||
case R.id.source_code:
|
||||
openUrlInBrowser(this, sourceCodeUrl);
|
||||
IntentUtils.showInBrowser(this, sourceCodeUrl);
|
||||
return true;
|
||||
case R.id.show_in_chat:
|
||||
showInChat();
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.b44t.messenger.rpc.RpcException;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
@@ -68,7 +69,7 @@ public class WebxdcStoreActivity extends PassphraseRequiredActionBarActivity {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
WebViewActivity.openUrlInBrowser(WebxdcStoreActivity.this, url);
|
||||
IntentUtils.showInBrowser(WebxdcStoreActivity.this, url);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
|
||||
boolean canGoBack = AccountManager.getInstance().canRollbackAccountCreation(this);
|
||||
supportActionBar.setDisplayHomeAsUpEnabled(canGoBack);
|
||||
getSupportActionBar().setTitle(canGoBack? R.string.add_account : R.string.welcome_desktop);
|
||||
getSupportActionBar().setTitle(canGoBack? R.string.add_account : R.string.app_name);
|
||||
}
|
||||
|
||||
private void registerForEvents() {
|
||||
|
||||
@@ -48,7 +48,7 @@ public class AudioRecorder {
|
||||
ParcelFileDescriptor fds[] = ParcelFileDescriptor.createPipe();
|
||||
|
||||
captureUri = blobProvider.create(context, new ParcelFileDescriptor.AutoCloseInputStream(fds[0]),
|
||||
MediaUtil.AUDIO_AAC, null, null);
|
||||
MediaUtil.AUDIO_AAC, "voice.aac", null);
|
||||
audioCodec = new AudioCodec(context);
|
||||
|
||||
audioCodec.start(new ParcelFileDescriptor.AutoCloseOutputStream(fds[1]));
|
||||
|
||||
@@ -87,11 +87,14 @@ public class AudioSlidePlayer {
|
||||
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
|
||||
if (playbackState == Player.STATE_READY) {
|
||||
Util.runOnMain(() -> {
|
||||
Log.d(TAG, "request duration " + durationCalculator.getDuration());
|
||||
getListener().onReceivedDuration(Long.valueOf(durationCalculator.getDuration()).intValue());
|
||||
durationCalculator.release();
|
||||
durationCalculator.removeListener(this);
|
||||
durationCalculator = null;
|
||||
synchronized (AudioSlidePlayer.this) {
|
||||
if (durationCalculator == null) return;
|
||||
Log.d(TAG, "request duration " + durationCalculator.getDuration());
|
||||
getListener().onReceivedDuration(Long.valueOf(durationCalculator.getDuration()).intValue());
|
||||
durationCalculator.release();
|
||||
durationCalculator.removeListener(this);
|
||||
durationCalculator = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,10 +3,8 @@ package org.thoughtcrime.securesms.components;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
@@ -55,6 +53,7 @@ public class MediaView extends FrameLayout {
|
||||
public void set(@NonNull GlideRequests glideRequests,
|
||||
@NonNull Window window,
|
||||
@NonNull Uri source,
|
||||
@Nullable String fileName,
|
||||
@NonNull String mediaType,
|
||||
long size,
|
||||
boolean autoplay)
|
||||
@@ -68,7 +67,7 @@ public class MediaView extends FrameLayout {
|
||||
imageView.setVisibility(View.GONE);
|
||||
videoView.get().setVisibility(View.VISIBLE);
|
||||
videoView.get().setWindow(window);
|
||||
videoView.get().setVideoSource(new VideoSlide(getContext(), source, size), autoplay);
|
||||
videoView.get().setVideoSource(new VideoSlide(getContext(), source, fileName, size), autoplay);
|
||||
} else {
|
||||
throw new IOException("Unsupported media type: " + mediaType);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,12 @@ public class AttachmentsContentProvider extends ContentProvider {
|
||||
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
|
||||
DcContext dcContext = DcHelper.getContext(getContext());
|
||||
|
||||
String path = uri.getPath();
|
||||
// `uri` originally comes from DcHelper.openForViewOrShare() and
|
||||
// looks like `content://chat.delta.attachments/ef39a39/text.txt`
|
||||
// where ef39a39 is the file in the blob directory
|
||||
// and text.txt is the original name of the file, as returned by `msg.getFilename()`.
|
||||
// `uri.getPathSegments()` returns ["ef39a39", "text.txt"] in this example.
|
||||
String path = uri.getPathSegments().get(0);
|
||||
if (!DcHelper.sharedFiles.containsKey(path)) {
|
||||
throw new FileNotFoundException("File was not shared before.");
|
||||
}
|
||||
|
||||
@@ -284,6 +284,7 @@ public class DcHelper {
|
||||
|
||||
DcMsg msg = dcContext.getMsg(msg_id);
|
||||
String path = msg.getFile();
|
||||
String filename = msg.getFilename();
|
||||
String mimeType = msg.getFilemime();
|
||||
try {
|
||||
File file = new File(path);
|
||||
@@ -294,8 +295,11 @@ public class DcHelper {
|
||||
|
||||
Uri uri;
|
||||
if (path.startsWith(dcContext.getBlobdir())) {
|
||||
uri = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + Uri.encode(file.getName()));
|
||||
sharedFiles.put("/" + file.getName(), 1); // as different Android version handle uris in putExtra differently, we also check them on our own
|
||||
// Build a Uri that will later be passed to AttachmentsContentProvider.openFile().
|
||||
// The last part needs to be `filename`, i.e. the original, user-visible name of the file,
|
||||
// so that the external apps show the name of the file correctly.
|
||||
uri = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + Uri.encode(file.getName()) + "/" + Uri.encode(filename));
|
||||
sharedFiles.put(file.getName(), 1); // as different Android version handle uris in putExtra differently, we also check them on our own
|
||||
} else {
|
||||
if (Build.VERSION.SDK_INT >= 24) {
|
||||
uri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".fileprovider", file);
|
||||
@@ -305,7 +309,7 @@ public class DcHelper {
|
||||
}
|
||||
|
||||
if (cmd.equals(Intent.ACTION_VIEW)) {
|
||||
mimeType = checkMime(path, mimeType);
|
||||
mimeType = checkMime(filename, mimeType);
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setDataAndType(uri, mimeType);
|
||||
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
@@ -377,6 +381,13 @@ public class DcHelper {
|
||||
return mimeType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the path of a not-yet-existing file in the blobdir with roughly the given filename
|
||||
* and the given extension.
|
||||
* In many cases, since we're using setFileAndDeduplicate now, this wouldn't be necessary anymore
|
||||
* and we could just create a file with a random filename,
|
||||
* but there are a few usages that still need the current behavior (like `openMaps()`).
|
||||
*/
|
||||
public static String getBlobdirFile(DcContext dcContext, String filename, String ext) {
|
||||
filename = FileUtils.sanitizeFilename(filename);
|
||||
ext = FileUtils.sanitizeFilename(ext);
|
||||
@@ -494,16 +505,6 @@ public class DcHelper {
|
||||
.show();
|
||||
}
|
||||
|
||||
public static void showEncryptionRequiredDialog(Context context, String addr) {
|
||||
new AlertDialog.Builder(context)
|
||||
.setMessage(context.getString(R.string.encryption_required_for_new_contact, addr))
|
||||
.setNeutralButton(R.string.learn_more, (d, w) -> openHelp(context, "#howtoe2ee"))
|
||||
.setNegativeButton(R.string.qrscan_title, (d, w) -> context.startActivity(new Intent(context, QrActivity.class)))
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.setCancelable(true)
|
||||
.show();
|
||||
}
|
||||
|
||||
public static void openWebxdc(Context context, DcMsg dcMsg) {
|
||||
JSONObject info = dcMsg.getWebxdcInfo();
|
||||
if (JsonUtils.optBoolean(info, "community")) {
|
||||
|
||||
@@ -125,6 +125,7 @@ public class DirectShareUtil {
|
||||
|
||||
Intent intent = new Intent(context, ShareActivity.class);
|
||||
intent.setAction(Intent.ACTION_SEND);
|
||||
intent.putExtra(ShareActivity.EXTRA_ACC_ID, dcContext.getAccountId());
|
||||
intent.putExtra(ShareActivity.EXTRA_CHAT_ID, chat.getId());
|
||||
|
||||
Recipient recipient = new Recipient(context, chat);
|
||||
|
||||
@@ -23,7 +23,6 @@ import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
@@ -67,7 +66,6 @@ import org.thoughtcrime.securesms.permissions.Permissions;
|
||||
import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
|
||||
import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.guava.Optional;
|
||||
import org.thoughtcrime.securesms.util.views.Stub;
|
||||
@@ -256,11 +254,11 @@ public class AttachmentManager {
|
||||
return new DocumentSlide(context, msg);
|
||||
}
|
||||
else if (PartAuthority.isLocalUri(uri)) {
|
||||
return getManuallyCalculatedSlideInfo(uri, width, height);
|
||||
return getManuallyCalculatedSlideInfo(uri, width, height, msg);
|
||||
} else {
|
||||
Slide result = getContentResolverSlideInfo(uri, width, height, chatId);
|
||||
|
||||
if (result == null) return getManuallyCalculatedSlideInfo(uri, width, height);
|
||||
if (result == null) return getManuallyCalculatedSlideInfo(uri, width, height, msg);
|
||||
else return result;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@@ -361,16 +359,21 @@ public class AttachmentManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
private @NonNull Slide getManuallyCalculatedSlideInfo(Uri uri, int width, int height) throws IOException {
|
||||
private @NonNull Slide getManuallyCalculatedSlideInfo(Uri uri, int width, int height, @Nullable DcMsg msg) throws IOException {
|
||||
long start = System.currentTimeMillis();
|
||||
Long mediaSize = null;
|
||||
String fileName = null;
|
||||
String mimeType = null;
|
||||
|
||||
if (msg != null) {
|
||||
fileName = msg.getFilename();
|
||||
mimeType = msg.getFilemime();
|
||||
}
|
||||
|
||||
if (PartAuthority.isLocalUri(uri)) {
|
||||
mediaSize = PartAuthority.getAttachmentSize(context, uri);
|
||||
fileName = PartAuthority.getAttachmentFileName(context, uri);
|
||||
mimeType = PartAuthority.getAttachmentContentType(context, uri);
|
||||
if (fileName == null) fileName = PartAuthority.getAttachmentFileName(context, uri);
|
||||
if (mimeType == null) mimeType = PartAuthority.getAttachmentContentType(context, uri);
|
||||
}
|
||||
|
||||
if (mediaSize == null) {
|
||||
@@ -675,10 +678,10 @@ public class AttachmentManager {
|
||||
}
|
||||
|
||||
switch (this) {
|
||||
case IMAGE: return new ImageSlide(context, uri, dataSize, width, height);
|
||||
case GIF: return new GifSlide(context, uri, dataSize, width, height);
|
||||
case IMAGE: return new ImageSlide(context, uri, fileName, dataSize, width, height);
|
||||
case GIF: return new GifSlide(context, uri, fileName, dataSize, width, height);
|
||||
case AUDIO: return new AudioSlide(context, uri, dataSize, false, fileName);
|
||||
case VIDEO: return new VideoSlide(context, uri, dataSize);
|
||||
case VIDEO: return new VideoSlide(context, uri, fileName, dataSize);
|
||||
case DOCUMENT:
|
||||
// We have to special-case Webxdc slides: The user can interact with them as soon as a draft
|
||||
// is set. Therefore we need to create a DcMsg already now.
|
||||
@@ -687,7 +690,7 @@ public class AttachmentManager {
|
||||
DcMsg msg = new DcMsg(dcContext, DcMsg.DC_MSG_WEBXDC);
|
||||
Attachment attachment = new UriAttachment(uri, null, MediaUtil.WEBXDC, AttachmentDatabase.TRANSFER_PROGRESS_STARTED, 0, 0, 0, fileName, null, false);
|
||||
String path = attachment.getRealPath(context);
|
||||
msg.setFile(path, MediaUtil.WEBXDC);
|
||||
msg.setFileAndDeduplicate(path, fileName, MediaUtil.WEBXDC);
|
||||
dcContext.setDraft(chatId, msg);
|
||||
return new DocumentSlide(context, msg);
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ public class GifSlide extends ImageSlide {
|
||||
super(context, dcMsg);
|
||||
}
|
||||
|
||||
public GifSlide(Context context, Uri uri, long size, int width, int height) {
|
||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_GIF, size, width, height, uri, null, false));
|
||||
public GifSlide(Context context, Uri uri, String fileName, long size, int width, int height) {
|
||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_GIF, size, width, height, uri, fileName, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -39,8 +39,8 @@ public class ImageSlide extends Slide {
|
||||
super(context, attachment);
|
||||
}
|
||||
|
||||
public ImageSlide(Context context, Uri uri, long size, int width, int height) {
|
||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_JPEG, size, width, height, uri, null, false));
|
||||
public ImageSlide(Context context, Uri uri, String fileName, long size, int width, int height) {
|
||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_JPEG, size, width, height, uri, fileName, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,8 +15,6 @@ import com.bumptech.glide.Registry;
|
||||
import com.bumptech.glide.annotation.GlideModule;
|
||||
import com.bumptech.glide.load.model.UnitModelLoader;
|
||||
import com.bumptech.glide.module.AppGlideModule;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.github.penfeizhou.animation.glide.AnimationDecoderOption;
|
||||
|
||||
import com.caverock.androidsvg.SVG;
|
||||
|
||||
@@ -42,7 +40,6 @@ public class SignalGlideModule extends AppGlideModule {
|
||||
@Override
|
||||
public void applyOptions(Context context, GlideBuilder builder) {
|
||||
builder.setLogLevel(Log.ERROR);
|
||||
builder.setDefaultRequestOptions(new RequestOptions().set(AnimationDecoderOption.DISABLE_ANIMATION_APNG_DECODER, true));
|
||||
// builder.setDiskCache(new NoopDiskCacheFactory());
|
||||
}
|
||||
|
||||
|
||||
@@ -30,16 +30,16 @@ import java.io.File;
|
||||
|
||||
public class VideoSlide extends Slide {
|
||||
|
||||
private static Attachment constructVideoAttachment(Context context, Uri uri, long dataSize)
|
||||
private static Attachment constructVideoAttachment(Context context, Uri uri, String fileName, long dataSize)
|
||||
{
|
||||
Uri thumbnailUri = Uri.fromFile(new File(DcHelper.getBlobdirFile(DcHelper.getContext(context), "temp-preview.jpg")));
|
||||
MediaUtil.ThumbnailSize retWh = new MediaUtil.ThumbnailSize(0, 0);
|
||||
MediaUtil.createVideoThumbnailIfNeeded(context, uri, thumbnailUri, retWh);
|
||||
return constructAttachmentFromUri(context, uri, MediaUtil.VIDEO_UNSPECIFIED, dataSize, retWh.width, retWh.height, thumbnailUri, null, false);
|
||||
return constructAttachmentFromUri(context, uri, MediaUtil.VIDEO_UNSPECIFIED, dataSize, retWh.width, retWh.height, thumbnailUri, fileName, false);
|
||||
}
|
||||
|
||||
public VideoSlide(Context context, Uri uri, long dataSize) {
|
||||
super(context, constructVideoAttachment(context, uri, dataSize));
|
||||
public VideoSlide(Context context, Uri uri, String fileName, long dataSize) {
|
||||
super(context, constructVideoAttachment(context, uri, fileName, dataSize));
|
||||
}
|
||||
|
||||
public VideoSlide(Context context, DcMsg dcMsg) {
|
||||
|
||||
@@ -12,7 +12,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.soundcloud.android.crop.Crop;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
|
||||
|
||||
@@ -72,6 +72,9 @@ public class PersistentBlobProvider {
|
||||
@Nullable String fileName)
|
||||
{
|
||||
final long id = System.currentTimeMillis();
|
||||
if (fileName == null) {
|
||||
fileName = "file." + MediaUtil.getExtensionFromMimeType(mimeType);
|
||||
}
|
||||
return create(context, new ByteArrayInputStream(blobBytes), id, mimeType, fileName, (long) blobBytes.length);
|
||||
}
|
||||
|
||||
@@ -81,6 +84,9 @@ public class PersistentBlobProvider {
|
||||
@Nullable String fileName,
|
||||
@Nullable Long fileSize)
|
||||
{
|
||||
if (fileName == null) {
|
||||
fileName = "file." + MediaUtil.getExtensionFromMimeType(mimeType);
|
||||
}
|
||||
return create(context, input, System.currentTimeMillis(), mimeType, fileName, fileSize);
|
||||
}
|
||||
|
||||
|
||||
@@ -113,9 +113,12 @@ public class QrActivity extends BaseActionBarActivity implements View.OnClickLis
|
||||
menu.clear();
|
||||
getMenuInflater().inflate(R.menu.qr_show, menu);
|
||||
menu.findItem(R.id.new_classic_contact).setVisible(!DcHelper.getContext(this).isChatmail());
|
||||
|
||||
Util.redMenuItem(menu, R.id.withdraw);
|
||||
if(tabLayout.getSelectedTabPosition() == TAB_SCAN) {
|
||||
menu.findItem(R.id.withdraw).setVisible(false);
|
||||
}
|
||||
|
||||
return super.onPrepareOptionsMenu(menu);
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ public class QrCodeHandler {
|
||||
showDoneToast(activity);
|
||||
});
|
||||
if (rawString.toLowerCase().startsWith("http")) {
|
||||
builder.setNeutralButton(R.string.open, (d, b) -> IntentUtils.showBrowserIntent(activity, rawString));
|
||||
builder.setNeutralButton(R.string.open, (d, b) -> IntentUtils.showInBrowser(activity, rawString));
|
||||
}
|
||||
builder.setNegativeButton(R.string.cancel, null);
|
||||
builder.setCancelable(false);
|
||||
@@ -115,35 +115,27 @@ public class QrCodeHandler {
|
||||
break;
|
||||
|
||||
case DcContext.DC_QR_WITHDRAW_VERIFYCONTACT:
|
||||
builder.setMessage(activity.getString(R.string.withdraw_verifycontact_explain));
|
||||
builder.setPositiveButton(R.string.withdraw_qr_code, (dialog, which) -> {
|
||||
case DcContext.DC_QR_WITHDRAW_VERIFYGROUP:
|
||||
String message = qrParsed.getState() == DcContext.DC_QR_WITHDRAW_VERIFYCONTACT ? activity.getString(R.string.withdraw_verifycontact_explain)
|
||||
: activity.getString(R.string.withdraw_verifygroup_explain, qrParsed.getText1());
|
||||
builder.setTitle(R.string.qrshow_title);
|
||||
builder.setMessage(message);
|
||||
builder.setNeutralButton(R.string.reset, (dialog, which) -> {
|
||||
dcContext.setConfigFromQr(rawString);
|
||||
});
|
||||
builder.setNegativeButton(R.string.cancel, null);
|
||||
break;
|
||||
builder.setPositiveButton(R.string.ok, null);
|
||||
AlertDialog withdrawDialog = builder.show();
|
||||
Util.redButton(withdrawDialog, AlertDialog.BUTTON_NEUTRAL);
|
||||
return;
|
||||
|
||||
case DcContext.DC_QR_REVIVE_VERIFYCONTACT:
|
||||
builder.setMessage(activity.getString(R.string.revive_verifycontact_explain));
|
||||
builder.setPositiveButton(R.string.revive_qr_code, (dialog, which) -> {
|
||||
dcContext.setConfigFromQr(rawString);
|
||||
});
|
||||
builder.setNegativeButton(R.string.cancel, null);
|
||||
break;
|
||||
|
||||
case DcContext.DC_QR_WITHDRAW_VERIFYGROUP:
|
||||
builder.setMessage(activity.getString(R.string.withdraw_verifygroup_explain, qrParsed.getText1()));
|
||||
builder.setPositiveButton(R.string.withdraw_qr_code, (dialog, which) -> {
|
||||
dcContext.setConfigFromQr(rawString);
|
||||
});
|
||||
builder.setNegativeButton(R.string.cancel, null);
|
||||
break;
|
||||
|
||||
case DcContext.DC_QR_REVIVE_VERIFYGROUP:
|
||||
builder.setMessage(activity.getString(R.string.revive_verifygroup_explain, qrParsed.getText1()));
|
||||
builder.setPositiveButton(R.string.revive_qr_code, (dialog, which) -> {
|
||||
builder.setTitle(R.string.qrshow_title);
|
||||
builder.setMessage(activity.getString(R.string.revive_verifycontact_explain));
|
||||
builder.setNeutralButton(R.string.revive_qr_code, (dialog, which) -> {
|
||||
dcContext.setConfigFromQr(rawString);
|
||||
});
|
||||
builder.setNegativeButton(R.string.cancel, null);
|
||||
builder.setPositiveButton(R.string.ok, null);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -182,7 +174,7 @@ public class QrCodeHandler {
|
||||
final String url = qrParsed.getText1();
|
||||
String msg = String.format(activity.getString(R.string.qrscan_contains_url), url);
|
||||
builder.setMessage(msg);
|
||||
builder.setPositiveButton(R.string.open, (dialog, which) -> IntentUtils.showBrowserIntent(activity, url));
|
||||
builder.setPositiveButton(R.string.open, (dialog, which) -> IntentUtils.showInBrowser(activity, url));
|
||||
builder.setNegativeButton(android.R.string.cancel, null);
|
||||
builder.setNeutralButton(R.string.menu_copy_to_clipboard, (dialog, which) -> {
|
||||
Util.writeTextToClipboard(activity, url);
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.connect.DcEventCenter;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
|
||||
public class QrShowActivity extends AppCompatActivity {
|
||||
|
||||
@@ -68,6 +69,7 @@ public class QrShowActivity extends AppCompatActivity {
|
||||
menu.findItem(R.id.new_classic_contact).setVisible(false);
|
||||
menu.findItem(R.id.paste).setVisible(false);
|
||||
menu.findItem(R.id.load_from_image).setVisible(false);
|
||||
Util.redMenuItem(menu, R.id.withdraw);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
|
||||
@@ -139,15 +139,19 @@ public class QrShowFragment extends Fragment implements DcEventCenter.DcEventDel
|
||||
|
||||
public void withdrawQr() {
|
||||
Activity activity = getActivity();
|
||||
String message = chatId == 0 ? activity.getString(R.string.withdraw_verifycontact_explain)
|
||||
: activity.getString(R.string.withdraw_verifygroup_explain, dcContext.getChat(chatId).getName());
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||
builder.setMessage(activity.getString(R.string.withdraw_verifycontact_explain));
|
||||
builder.setPositiveButton(R.string.withdraw_qr_code, (dialog, which) -> {
|
||||
builder.setTitle(R.string.withdraw_qr_code);
|
||||
builder.setMessage(message);
|
||||
builder.setPositiveButton(R.string.reset, (dialog, which) -> {
|
||||
DcContext dcContext = DcHelper.getContext(activity);
|
||||
dcContext.setConfigFromQr(dcContext.getSecurejoinQr(chatId));
|
||||
activity.finish();
|
||||
});
|
||||
builder.setNegativeButton(R.string.cancel, null);
|
||||
builder.create().show();
|
||||
AlertDialog dialog = builder.show();
|
||||
Util.redPositiveButton(dialog);
|
||||
}
|
||||
|
||||
public void showInviteLinkDialog() {
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcMsg;
|
||||
import com.b44t.messenger.rpc.Reactions;
|
||||
import com.b44t.messenger.rpc.Rpc;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
@@ -124,12 +125,14 @@ public class AddReactionView extends LinearLayout {
|
||||
String result = null;
|
||||
try {
|
||||
final Reactions reactions = rpc.getMsgReactions(dcContext.getAccountId(), msgToReactTo.getId());
|
||||
final Map<Integer, String[]> reactionsByContact = reactions.getReactionsByContact();
|
||||
final String [] selfReactions = reactionsByContact.get(DcContact.DC_CONTACT_ID_SELF);
|
||||
if (selfReactions != null && selfReactions.length > 0) {
|
||||
result = selfReactions[0];
|
||||
if (reactions != null) {
|
||||
final Map<Integer, String[]> reactionsByContact = reactions.getReactionsByContact();
|
||||
final String [] selfReactions = reactionsByContact.get(DcContact.DC_CONTACT_ID_SELF);
|
||||
if (selfReactions != null && selfReactions.length > 0) {
|
||||
result = selfReactions[0];
|
||||
}
|
||||
}
|
||||
} catch(Exception e) {
|
||||
} catch(RpcException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -16,6 +16,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.b44t.messenger.DcContact;
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
import com.b44t.messenger.rpc.Reactions;
|
||||
import com.b44t.messenger.rpc.RpcException;
|
||||
|
||||
import org.thoughtcrime.securesms.ProfileActivity;
|
||||
@@ -85,17 +86,20 @@ public class ReactionsDetailsFragment extends DialogFragment implements DcEventC
|
||||
|
||||
int accId = DcHelper.getContext(requireActivity()).getAccountId();
|
||||
try {
|
||||
Map<Integer, String[]> reactionsByContact = DcHelper.getRpc(requireActivity()).getMsgReactions(accId, msgId).getReactionsByContact();
|
||||
final Reactions reactions = DcHelper.getRpc(requireActivity()).getMsgReactions(accId, msgId);
|
||||
ArrayList<Pair<Integer, String>> contactsReactions = new ArrayList<>();
|
||||
String[] selfReactions = reactionsByContact.remove(DcContact.DC_CONTACT_ID_SELF);
|
||||
for (Integer contact: reactionsByContact.keySet()) {
|
||||
for (String reaction: reactionsByContact.get(contact)) {
|
||||
contactsReactions.add(new Pair<>(contact, reaction));
|
||||
if (reactions != null) {
|
||||
Map<Integer, String[]> reactionsByContact = reactions.getReactionsByContact();
|
||||
String[] selfReactions = reactionsByContact.remove(DcContact.DC_CONTACT_ID_SELF);
|
||||
for (Integer contact: reactionsByContact.keySet()) {
|
||||
for (String reaction: reactionsByContact.get(contact)) {
|
||||
contactsReactions.add(new Pair<>(contact, reaction));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (selfReactions != null) {
|
||||
for (String reaction: selfReactions) {
|
||||
contactsReactions.add(new Pair<>(DcContact.DC_CONTACT_ID_SELF, reaction));
|
||||
if (selfReactions != null) {
|
||||
for (String reaction: selfReactions) {
|
||||
contactsReactions.add(new Pair<>(DcContact.DC_CONTACT_ID_SELF, reaction));
|
||||
}
|
||||
}
|
||||
}
|
||||
adapter.changeData(contactsReactions);
|
||||
|
||||
@@ -49,12 +49,14 @@ public final class FetchForegroundService extends Service {
|
||||
// The background fetch was successful, but we need to wait until all events were processed.
|
||||
// After all events were processed, we will get DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE,
|
||||
// and stop() will be called.
|
||||
while (fetchingSynchronously) {
|
||||
try {
|
||||
// The `wait()` needs to be enclosed in a while loop because there may be
|
||||
// "spurious wake-ups", i.e. `wait()` may return even though `notifyAll()` wasn't called.
|
||||
STOP_NOTIFIER.wait();
|
||||
} catch (InterruptedException ex) { }
|
||||
synchronized (STOP_NOTIFIER) {
|
||||
while (fetchingSynchronously) {
|
||||
try {
|
||||
// The `wait()` needs to be enclosed in a while loop because there may be
|
||||
// "spurious wake-ups", i.e. `wait()` may return even though `notifyAll()` wasn't called.
|
||||
STOP_NOTIFIER.wait();
|
||||
} catch (InterruptedException ex) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -63,7 +65,9 @@ public final class FetchForegroundService extends Service {
|
||||
public static void stop(Context context) {
|
||||
if (fetchingSynchronously) {
|
||||
fetchingSynchronously = false;
|
||||
STOP_NOTIFIER.notifyAll();
|
||||
synchronized (STOP_NOTIFIER) {
|
||||
STOP_NOTIFIER.notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
synchronized (SERVICE_LOCK) {
|
||||
|
||||
@@ -2,14 +2,18 @@ package org.thoughtcrime.securesms.util;
|
||||
|
||||
|
||||
import android.app.PendingIntent;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class IntentUtils {
|
||||
@@ -19,9 +23,13 @@ public class IntentUtils {
|
||||
return resolveInfoList != null && resolveInfoList.size() > 1;
|
||||
}
|
||||
|
||||
public static void showBrowserIntent(Context context, String url) {
|
||||
public static void showInBrowser(Context context, String url) {
|
||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||
context.startActivity(browserIntent);
|
||||
try {
|
||||
context.startActivity(browserIntent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(context, R.string.no_browser_installed, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
public static int FLAG_MUTABLE() {
|
||||
|
||||
@@ -58,18 +58,14 @@ public class LongClickCopySpan extends ClickableSpan {
|
||||
String addr = prepareUrl(url);
|
||||
Activity activity = (Activity) widget.getContext();
|
||||
DcContext dcContext = DcHelper.getContext(activity);
|
||||
int contactId = dcContext.lookupContactIdByAddr(addr);
|
||||
DcContact contact = (contactId != 0)? dcContext.getContact(contactId) : null;
|
||||
if (contact != null && !contact.isBlocked() && dcContext.getChatIdByContactId(contactId) != 0) {
|
||||
DcContact contact = dcContext.getContact(dcContext.createContact(null, addr));
|
||||
if (contact.getId() != 0 && !contact.isBlocked() && dcContext.getChatIdByContactId(contact.getId()) != 0) {
|
||||
openChat(activity, contact);
|
||||
} else if (contact == null && dcContext.isChatmail()) {
|
||||
DcHelper.showEncryptionRequiredDialog(activity, addr);
|
||||
} else {
|
||||
String nameNAddr = contact != null ? contact.getNameNAddr() : addr;
|
||||
new AlertDialog.Builder(activity)
|
||||
.setMessage(activity.getString(R.string.ask_start_chat_with, nameNAddr))
|
||||
.setMessage(activity.getString(R.string.ask_start_chat_with, contact.getNameNAddr()))
|
||||
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||
openChat(activity, contact == null? dcContext.getContact(dcContext.createContact(null, addr)) : contact);
|
||||
openChat(activity, contact);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show();
|
||||
@@ -87,7 +83,7 @@ public class LongClickCopySpan extends ClickableSpan {
|
||||
QrCodeHandler qrCodeHandler = new QrCodeHandler(activity);
|
||||
qrCodeHandler.handleQrData(url);
|
||||
} else {
|
||||
IntentUtils.showBrowserIntent(widget.getContext(), url);
|
||||
IntentUtils.showInBrowser(widget.getContext(), url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ public class Prefs {
|
||||
}
|
||||
|
||||
public static boolean isLocationStreamingEnabled(Context context) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isDeveloperModeEnabled(Context context) {
|
||||
|
||||
@@ -122,7 +122,7 @@ public class SendRelayedMessageUtil {
|
||||
}
|
||||
|
||||
if (uri != null) {
|
||||
message.setFile(getRealPathFromUri(context, uri), mimeType);
|
||||
setFileFromUri(context, uri, message, mimeType);
|
||||
}
|
||||
if (html != null) {
|
||||
message.setHtml(html);
|
||||
@@ -136,11 +136,12 @@ public class SendRelayedMessageUtil {
|
||||
return message;
|
||||
}
|
||||
|
||||
private static String getRealPathFromUri(Context context, Uri uri) throws NullPointerException {
|
||||
private static void setFileFromUri(Context context, Uri uri, DcMsg message, String mimeType) {
|
||||
String path;
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
String filename = "cannot-resolve.jpg"; // best guess, this still leads to most images being workable if OS does weird things
|
||||
try {
|
||||
|
||||
String filename = "cannot-resolve.jpg"; // best guess, this still leads to most images being workable if OS does weird things
|
||||
if (PartAuthority.isLocalUri(uri)) {
|
||||
filename = uri.getPathSegments().get(PersistentBlobProvider.FILENAME_PATH_SEGMENT);
|
||||
} else if (uri.getScheme().equals("content")) {
|
||||
@@ -158,14 +159,7 @@ public class SendRelayedMessageUtil {
|
||||
}
|
||||
}
|
||||
|
||||
String ext = "";
|
||||
int i = filename.lastIndexOf(".");
|
||||
if (i >= 0) {
|
||||
ext = filename.substring(i);
|
||||
filename = filename.substring(0, i);
|
||||
}
|
||||
|
||||
String path = DcHelper.getBlobdirFile(dcContext, filename, ext);
|
||||
path = DcHelper.getBlobdirFile(dcContext, filename, "temp");
|
||||
|
||||
// copy content to this file
|
||||
if (path != null) {
|
||||
@@ -173,12 +167,11 @@ public class SendRelayedMessageUtil {
|
||||
OutputStream outputStream = new FileOutputStream(path);
|
||||
Util.copy(inputStream, outputStream);
|
||||
}
|
||||
|
||||
return path;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
path = null;
|
||||
}
|
||||
message.setFileAndDeduplicate(path, filename, mimeType);
|
||||
}
|
||||
|
||||
private static String getHtml(Context context, Uri uri) {
|
||||
|
||||
@@ -108,8 +108,12 @@ public class Util {
|
||||
}
|
||||
|
||||
public static void redPositiveButton(AlertDialog dialog) {
|
||||
redButton(dialog, AlertDialog.BUTTON_POSITIVE);
|
||||
}
|
||||
|
||||
public static void redButton(AlertDialog dialog, int whichButton) {
|
||||
try {
|
||||
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(redDestructiveColor);
|
||||
dialog.getButton(whichButton).setTextColor(redDestructiveColor);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -640,10 +640,7 @@ public class VideoRecoder {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!Util.moveFile(tempPath, inPath)) {
|
||||
alert(context, String.format("Recoding failed for %s: cannot move temporary file %s", inPath, tempPath));
|
||||
return false;
|
||||
}
|
||||
msg.setFileAndDeduplicate(tempPath, msg.getFilename(), msg.getFilemime());
|
||||
|
||||
Log.i(TAG, String.format("recoding for %s done", inPath));
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public class VideochatUtil {
|
||||
DcContext dcContext = DcHelper.getContext(activity);
|
||||
DcMsg dcMsg = dcContext.getMsg(msgId);
|
||||
String videochatUrl = dcMsg.getVideochatUrl();
|
||||
IntentUtils.showBrowserIntent(activity, videochatUrl);
|
||||
IntentUtils.showInBrowser(activity, videochatUrl);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle" >
|
||||
|
||||
<gradient
|
||||
android:angle="0"
|
||||
android:startColor="@color/gray50"
|
||||
android:endColor="@color/transparent"
|
||||
android:type="linear" />
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,10 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle" >
|
||||
|
||||
<gradient
|
||||
android:angle="0"
|
||||
android:startColor="@color/transparent"
|
||||
android:endColor="@color/gray50"
|
||||
android:type="linear" />
|
||||
|
||||
</shape>
|
||||
@@ -161,6 +161,30 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<org.thoughtcrime.securesms.components.CircleColorImageView
|
||||
android:id="@+id/invite_video_chat_button"
|
||||
android:layout_width="53dp"
|
||||
android:layout_height="53dp"
|
||||
android:src="@drawable/baseline_call_24"
|
||||
android:scaleType="center"
|
||||
android:contentDescription="@string/videochat"
|
||||
app:circleColor="@color/audio_icon"/>
|
||||
|
||||
<TextView android:layout_marginTop="10dp"
|
||||
android:id="@+id/invite_video_chat_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/AttachmentTypeLabel"
|
||||
android:text="@string/videochat"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:id="@+id/location_linear_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -188,30 +212,6 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<org.thoughtcrime.securesms.components.CircleColorImageView
|
||||
android:id="@+id/invite_video_chat_button"
|
||||
android:layout_width="53dp"
|
||||
android:layout_height="53dp"
|
||||
android:src="@drawable/baseline_call_24"
|
||||
android:scaleType="center"
|
||||
android:contentDescription="@string/videochat"
|
||||
app:circleColor="@color/audio_icon"/>
|
||||
|
||||
<TextView android:layout_marginTop="10dp"
|
||||
android:id="@+id/invite_video_chat_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/AttachmentTypeLabel"
|
||||
android:text="@string/videochat"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<!-- fill the gap -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentBottom="true">
|
||||
android:layout_alignBottom="@id/body_bubble">
|
||||
|
||||
<org.thoughtcrime.securesms.components.AvatarImageView
|
||||
android:id="@+id/contact_photo"
|
||||
|
||||
@@ -68,6 +68,41 @@
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="@string/instant_onboarding_create"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/or_divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="30dp"
|
||||
android:paddingBottom="30dp"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<View
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="1dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/divider_start"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:layout_marginRight="5dp"
|
||||
android:layout_weight="0"
|
||||
android:gravity="center"
|
||||
android:text="@string/or_separator"
|
||||
android:textSize="14sp"
|
||||
android:fontFamily="sans-serif"
|
||||
android:textColor="@color/gray50"/>
|
||||
|
||||
<View
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="1dp"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/divider_end"/>
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
style="@style/ButtonSecondary"
|
||||
android:id="@+id/use_other_server"
|
||||
@@ -75,7 +110,6 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:text="@string/instant_onboarding_other_server"/>
|
||||
|
||||
<Button
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
android:layout_width="128dp"
|
||||
android:layout_height="128dp"
|
||||
android:scaleType="centerCrop"
|
||||
app:strokeColor="@null"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.App.CornerSize10Percent" />
|
||||
|
||||
<TextView android:id="@+id/webxdc_app_name"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<item android:title="@string/menu_scroll_to_top"
|
||||
android:id="@+id/log_scroll_up" />
|
||||
|
||||
<item android:title="@string/global_menu_help_learn_desktop"
|
||||
<item android:title="@string/delta_chat_homepage"
|
||||
android:id="@+id/learn_more"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
android:id="@+id/privacy_policy"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item android:title="@string/global_menu_help_contribute_desktop"
|
||||
<item android:title="@string/contribute"
|
||||
android:id="@+id/contribute"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">موافق</string>
|
||||
<string name="cancel">إلغاء</string>
|
||||
<string name="yes">نعم</string>
|
||||
<string name="yes">نعم</string>
|
||||
<string name="no">لا</string>
|
||||
<string name="on">يعمل</string>
|
||||
<string name="off">معطّل</string>
|
||||
@@ -194,14 +194,13 @@
|
||||
<string name="pref_app_access">دخول البرنامج</string>
|
||||
<string name="pref_chats">المحادثات</string>
|
||||
<string name="pref_in_chat_sounds">أصوات خلال الدردش</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">حجم الخط في الرسائل</string>
|
||||
<string name="pref_other">أخرى</string>
|
||||
<!-- No need to translate "Wallpaper" literally. Chose what is common in your language for a "Wallpaper" or a "Background". Avoid adding the term "image" here, as the "Wallpaper" may also be just a single color. -->
|
||||
<string name="pref_background">الخلفية</string>
|
||||
<string name="pref_show_emails_all">كلها</string>
|
||||
<string name="autocrypt_continue_transfer_retry">أعد المحاولة</string>
|
||||
<string name="qrscan_fingerprint_label">البصمة</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">رد</string>
|
||||
<string name="notify_new_message">رسالة جديدة</string>
|
||||
<string name="notify_priority_high">عالي</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Imtina</string>
|
||||
<string name="yes">Bəli</string>
|
||||
<string name="yes">Bəli</string>
|
||||
<string name="no">Xeyir</string>
|
||||
<string name="on">Açıq</string>
|
||||
<string name="off">Bağlı</string>
|
||||
@@ -332,8 +332,6 @@
|
||||
<string name="pref_app_access">Daxil oldu</string>
|
||||
<string name="pref_chats">Çatlar</string>
|
||||
<string name="pref_in_chat_sounds">Çatda olan səslər</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Mətnin ölçüsü</string>
|
||||
<string name="pref_view_log">Log-a bax</string>
|
||||
<string name="pref_saved_log">Loqi Yükləmələr qovluğuna saxlanıldı</string>
|
||||
<string name="pref_save_log_failed">Loqu saxlaya bilmədi</string>
|
||||
@@ -428,6 +426,7 @@
|
||||
<string name="contact_not_verified">%1$sDoğrula bilmir</string>
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">%1$süçün quraşdırma dəyişdirildi</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Cavab ver</string>
|
||||
<string name="notify_new_message">Yeni mesaj</string>
|
||||
<string name="notify_background_connection_enabled">Arxa fon əlaqəsi aktivdir</string>
|
||||
@@ -460,6 +459,7 @@
|
||||
<string name="global_menu_view_developer_desktop">İnkişaf etdirici</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">İnkişaf etdirici alətləri</string>
|
||||
<string name="global_menu_help_desktop">Kömək</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">GitHub-da kömək et</string>
|
||||
<string name="global_menu_help_report_desktop">Problemi bildirin</string>
|
||||
<string name="no_chat_selected_suggestion_desktop">Bir çat seçin və ya yeni bir çat yaradın</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Отказ</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">или</string>
|
||||
<string name="clear_search">Изчистване на търсенето</string>
|
||||
<string name="yes">Да</string>
|
||||
<string name="no">Не</string>
|
||||
@@ -478,6 +476,7 @@
|
||||
<string name="tab_audio_empty_hint">Аудио файловете и гласовите съобщения, споделени в този чат, ще се появяват тук.</string>
|
||||
<string name="tab_webxdc_empty_hint">Приложенията, споделени в този чат, ще се появяват тук.</string>
|
||||
<string name="tab_all_media_empty_hint">Медийните файлове, споделени в кой да е чат, ще се появяват тук.</string>
|
||||
<string name="all_apps_empty_hint">Приложенията, получени или изпратени в кой да е чат, ще се появяват тук.</string>
|
||||
<string name="media_preview">Предварителен преглед на медия файл</string>
|
||||
<!-- option to show images in the gallery with the correct width/height aspect (instead of square); other gallery apps may be a source of inspiration for translation :) -->
|
||||
<string name="aspect_ratio_grid">Мрежа, запазваща съотношенията</string>
|
||||
@@ -509,10 +508,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Акаунтът е прехвърлен на второто Ви устройство.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Акаунтът се подготвя...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">Изчаква се свързване от получателя...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Получателят е свързан...</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Прехвърляне...</string>
|
||||
<string name="troubleshooting">Отстраняване на проблеми</string>
|
||||
@@ -690,8 +685,6 @@
|
||||
<string name="pref_app_access">Достъп до приложението</string>
|
||||
<string name="pref_chats">Чатове</string>
|
||||
<string name="pref_in_chat_sounds">Звуци в чата</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Размер на шрифта на съобщението</string>
|
||||
<string name="pref_view_log">Разглеждане на дневника</string>
|
||||
<string name="pref_saved_log">Дневникът е записан в папката \"Свалени\"</string>
|
||||
<string name="pref_save_log_failed">Неуспешен запис на дневника</string>
|
||||
@@ -928,9 +921,7 @@
|
||||
<string name="withdraw_verifycontact_explain">Чрез сканиране на този QR код други хора могат да се свързват с Вас.\n\nМожете да деактивирате QR кода тук и повторно да го активирате, като го сканирате отново.</string>
|
||||
<string name="withdraw_verifygroup_explain">Чрез сканиране на този QR код други хора могат да се присъединяват към крупата \"%1$s\".\n\nМожете да деактивирате QR кода тук и повторно да го активирате, като го сканирате отново.</string>
|
||||
<string name="withdraw_qr_code">Деактивиране на QR кода</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifycontact_explain">Чрез сканиране на този QR код други хора могат да се свързват с Вас.\n\nQR кодът не е активен на това устройство.</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifygroup_explain">Този QR код е давал възможност други да се присъединяват към групата \"%1$s\" чрез сканирането му.\n\nQR кодът не е активен на това устройство.</string>
|
||||
<string name="revive_qr_code">Активиране на QR кода</string>
|
||||
<string name="qrshow_title">QR код за покана</string>
|
||||
@@ -974,8 +965,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">Неуспешно декодиране на mailto връзка: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Затваряне</string>
|
||||
<string name="notify_reply_button">Отговор</string>
|
||||
<string name="notify_new_message">Ново съобщение</string>
|
||||
<string name="notify_background_connection_enabled">Връзката във фонов режим е разрешена</string>
|
||||
@@ -1031,7 +1020,9 @@
|
||||
<string name="global_menu_view_developer_desktop">Разработчик</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Инструменти за разработчици</string>
|
||||
<string name="global_menu_help_desktop">Помощ</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">Научете повече за Delta Chat</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Допринесете в GitHub</string>
|
||||
<string name="global_menu_help_report_desktop">Съобщаване за проблем</string>
|
||||
<string name="global_menu_help_about_desktop">Относно Delta Chat</string>
|
||||
@@ -1104,11 +1095,6 @@
|
||||
<string name="notifications_avg_minutes">Средно всеки %1$d минути</string>
|
||||
<string name="notifications_avg_hours">Средно всеки %1$d часа</string>
|
||||
<string name="last_check_at">Проверено на %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Приложенията, получени или изпратени в кой да е чат, ще се появяват тук. \"Файлове\" показва току-що свалените приложения.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Натиснете бутона \"Споделяне\"</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Изберете \"Добавяне към началния екран\", за да добавите приложението към началния екран. </string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Delta Chat използва Вашата камера, за да прави и изпраща снимки и видеоклипове, както и да сканира QR кодове.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Delta Chat използва Вашите контакти, за да показва списък на e-mail адресите, до които можете да пишете. Delta Chat няма собствен сървър, Вашите контакти не се пращат никъде.</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">دلتا چت</string>
|
||||
<string name="ok">خا</string>
|
||||
<string name="cancel">رڌ</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">یا</string>
|
||||
<string name="clear_search">روفتن پیتینیڌن</string>
|
||||
<string name="yes">هری</string>
|
||||
<string name="no">ن</string>
|
||||
@@ -318,8 +316,6 @@
|
||||
<string name="pref_notifications_show">نشۉ داڌن</string>
|
||||
<string name="pref_language">زۉݩ</string>
|
||||
<string name="pref_chats">گوفت ۉ لوفتا</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">هندا هؽلا پیوم</string>
|
||||
<string name="pref_log_header">گوزارش</string>
|
||||
<string name="pref_background_btn_gallery">پسند ز شؽوات مال</string>
|
||||
<string name="pref_show_emails_all">پوی</string>
|
||||
@@ -358,6 +354,7 @@
|
||||
<string name="contact_verified">%1$s تاییڌ وابی.</string>
|
||||
<!-- Shown in contact profile. The placeholder will be replaced by the name of the contact that introduced the contact. -->
|
||||
<string name="verified_by">تاییڌ وابیڌه و دس %1$s</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">ولوم</string>
|
||||
<string name="notify_new_message">پیوم نۊ</string>
|
||||
<string name="notify_name_and_message">نوم وو پیوم</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Cancel·la</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">o</string>
|
||||
<string name="clear_search">Neteja la cerca</string>
|
||||
<!-- a noun, used on a button, short for "show link" -->
|
||||
<string name="link">Enllaç</string>
|
||||
@@ -129,6 +127,10 @@
|
||||
<item quantity="one">%d missatge</item>
|
||||
<item quantity="other">%d missatges</item>
|
||||
</plurals>
|
||||
<plurals name="n_reactions">
|
||||
<item quantity="one">%d reacció</item>
|
||||
<item quantity="other">%d reaccions</item>
|
||||
</plurals>
|
||||
<plurals name="n_members">
|
||||
<item quantity="one">%d membre</item>
|
||||
<item quantity="other">%d membres</item>
|
||||
@@ -580,8 +582,6 @@
|
||||
<string name="pref_app_access">Accés a l\'aplicació</string>
|
||||
<string name="pref_chats">Xats</string>
|
||||
<string name="pref_in_chat_sounds">Sons d\'entrada</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Mida de la font del missatge</string>
|
||||
<string name="pref_view_log">Veure el registre</string>
|
||||
<string name="pref_other">Altres</string>
|
||||
<string name="pref_backup">Còpia de seguretat</string>
|
||||
@@ -609,9 +609,16 @@
|
||||
<string name="pref_show_emails_no">No, només xats</string>
|
||||
<string name="pref_show_emails_accepted_contacts">Per a contactes acceptats</string>
|
||||
<string name="pref_show_emails_all">Tot</string>
|
||||
<string name="pref_edit_profile">Edita el perfil</string>
|
||||
<string name="send_stats_to_devs">Envia estadístiques als desenvolupadors del Delta Chat</string>
|
||||
|
||||
|
||||
<!-- Reactions -->
|
||||
<string name="reactions">Reaccions</string>
|
||||
<!-- Verb, the action of adding a "Reaction" to a message. Used eg. in context menus, similar to "Reply" or "Forward" -->
|
||||
<string name="react">Reacciona</string>
|
||||
<!-- %1$s will be replaced by an emoji. %2$s will be replaced by message summary (the summary is often long and whole string gets truncated; words after %2$s will often not being visible). Eg. 'You reacted 👍 to "Found my suitcase"'. Use less than 20 characters, otherwise the string will be truncated too soon and too few information are shown. Do not try to translate "reacted to" too strict. Depending on the language, "added 👍 to" or "gave 👍 to" or just "👍 to" may be shorter and/or clearer and work as well. -->
|
||||
<string name="reaction_by_you">Heu reaccionat amb %1$s a «%2$s»</string>
|
||||
<!-- autocrypt -->
|
||||
<string name="autocrypt_send_asm_title">Envia el missatge de configuració Autocrypt</string>
|
||||
<string name="autocrypt_send_asm_explain_before">Un \"missatge de configuració Autocrypt\" comparteix de forma segura la vostra configuració d\'extrem a extrem amb altres aplicacions compatibles amb Autocrypt.\n\nLa configuració es xifrarà amb un codi de configuració que es mostrarà aquí i que haureu d\'escriure a l’altre dispositiu.</string>
|
||||
@@ -673,6 +680,7 @@
|
||||
<string name="contact_not_verified">No es pot verificar%1$s</string>
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">Configuració canviada per %1$s</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Respondre</string>
|
||||
<string name="notify_new_message">Missatge nou</string>
|
||||
<string name="notify_background_connection_enabled">Connexió habilitada en segon pla</string>
|
||||
@@ -705,6 +713,7 @@
|
||||
<string name="global_menu_view_developer_desktop">Desenvolupador</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Eines de desenvolupador</string>
|
||||
<string name="global_menu_help_desktop">Ajuda</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Col·labora a GitHub</string>
|
||||
<string name="global_menu_help_report_desktop">Informa d\'un problema</string>
|
||||
<string name="no_chat_selected_suggestion_desktop">Tria un xat o crea\'n un de nou</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">دێڵتا چات</string>
|
||||
<string name="ok">باشە</string>
|
||||
<string name="cancel">وازبێنە</string>
|
||||
<string name="yes">بەڵێ</string>
|
||||
<string name="yes">بەڵێ</string>
|
||||
<string name="no">نا</string>
|
||||
<string name="select">هەڵبژاردن</string>
|
||||
<string name="on">چالاک</string>
|
||||
@@ -420,8 +420,6 @@
|
||||
<string name="pref_app_access">ڕێگەپێدان</string>
|
||||
<string name="pref_chats">وتووێژەکان</string>
|
||||
<string name="pref_in_chat_sounds">دەنگەکانی نێو-وتووێژی</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">قەبارەی فۆنتی پەیامەکان</string>
|
||||
<string name="pref_other">کەسانی دی</string>
|
||||
<string name="pref_backup">یەدەک</string>
|
||||
<string name="pref_backup_explain">یەدەک گرتن لە وتووێژەکان و دانانی لەسەر بیرگەی دەرەکی</string>
|
||||
@@ -524,6 +522,7 @@
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">ڕێکخستن بۆ %1$s گۆڕا.</string>
|
||||
<string name="copy_qr_data_success">ناونیشانی وێبی QRەکە ڕوونووس کرا.</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">وەڵام دانەوە</string>
|
||||
<string name="notify_new_message">پەیامی نوێ</string>
|
||||
<string name="notify_background_connection_enabled">پەیوەندی پشتخان چالاک کرا</string>
|
||||
@@ -556,6 +555,7 @@
|
||||
<string name="global_menu_edit_paste_desktop">لکاندن</string>
|
||||
<string name="global_menu_view_desktop">دیتن</string>
|
||||
<string name="global_menu_help_desktop">یارمەتی</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">زۆرتر سەبارەت بە دێڵتاچات_ەوە بزانە</string>
|
||||
<string name="global_menu_help_report_desktop">کێشەیەک گوزارشت بکە</string>
|
||||
<string name="global_menu_help_about_desktop">سەبارەت بە دێڵتا چات</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">Souhlas</string>
|
||||
<string name="cancel">Zrušit</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">nebo</string>
|
||||
<string name="clear_search">Vyčistit vyhledávání</string>
|
||||
<string name="yes">Ano</string>
|
||||
<string name="no">Ne</string>
|
||||
@@ -446,6 +444,7 @@
|
||||
<string name="tab_audio_empty_hint">Zde se zobrazí zvukové soubory a hlasové zprávy sdílené v tomto chatu.</string>
|
||||
<string name="tab_webxdc_empty_hint">Zde se zobrazí aplikace sdílené v tomto chatu.</string>
|
||||
<string name="tab_all_media_empty_hint">Zde se zobrazí média sdílená v jakémkoli chatu.</string>
|
||||
<string name="all_apps_empty_hint">Zde se zobrazí aplikace přijaté nebo odeslané v libovolném chatu.</string>
|
||||
<string name="media_preview">Náhled multimedia</string>
|
||||
<string name="send_message">Pošli zprávu</string>
|
||||
<string name="multidevice_install_dc_on_other_device">Nainstalujte si Delta Chat do druhého zařízení (https://get.delta.chat)</string>
|
||||
@@ -554,8 +553,6 @@
|
||||
<string name="pref_app_access">Přístup aplikace</string>
|
||||
<string name="pref_chats">Chaty</string>
|
||||
<string name="pref_in_chat_sounds">Zvuky v rámci chatu</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Velikost písma zprávy</string>
|
||||
<string name="pref_view_log">Zobrazit záznam běhu</string>
|
||||
<string name="pref_saved_log">Záznam běhu uložen do složky \"Downloads\"</string>
|
||||
<string name="pref_save_log_failed">Uložení záznamu běhu selhalo</string>
|
||||
@@ -750,6 +747,7 @@
|
||||
<string name="contact_setup_changed">Změněné nastavení pro %1$s.</string>
|
||||
<string name="copy_qr_data_success">URL z QR kódu zkopírováno do mezipaměti</string>
|
||||
<string name="mailto_dialog_header_select_chat">Vyberte chat, kterému chcete zprávu odeslat </string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Odpověď</string>
|
||||
<string name="notify_new_message">Nová zpráva</string>
|
||||
<string name="notify_background_connection_enabled">Spojení na pozadí je zapnuto</string>
|
||||
@@ -793,7 +791,9 @@
|
||||
<string name="global_menu_view_developer_desktop">Vývojář</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Nástroje pro vývojáře</string>
|
||||
<string name="global_menu_help_desktop">Nápověda</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">Víc podrobností o Delta Chatu</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Přispěj na GitHubu</string>
|
||||
<string name="global_menu_help_report_desktop">Nahlaš problém</string>
|
||||
<string name="global_menu_help_about_desktop">O aplikaci Delta Chat</string>
|
||||
@@ -830,8 +830,6 @@
|
||||
<string name="a11y_disappearing_messages_activated">Samomazací zprávy jsou zapnuty</string>
|
||||
|
||||
<string name="import_device_contacts_hint">Chcete-li chatovat s kontakty ze svého zařízení, otevřete Nastavení a povolte „Kontakty“.</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Zde se zobrazí aplikace přijaté nebo odeslané v libovolném chatu. „Soubory“ zobrazuje právě stažené aplikace. </string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Delta Chat využívá kameru k focení, filmování a snímání QR kódů.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Delta Chat používá tvé kontakty k zobrazení e-mailů na které můžeš psát. Delta Chat nemá žádné vlastní servery - tvé kontakty se nikam noposílají.</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Annuller</string>
|
||||
<string name="clear_search">Ryd søgning</string>
|
||||
<string name="clear_search">Ryd søgning</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nej</string>
|
||||
<string name="select">Vælg</string>
|
||||
@@ -488,8 +488,6 @@
|
||||
<string name="pref_app_access">Programadgang</string>
|
||||
<string name="pref_chats">Samtaler</string>
|
||||
<string name="pref_in_chat_sounds">In-chat-lyde</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Besked tekststørrelse</string>
|
||||
<string name="pref_view_log">Visningslog</string>
|
||||
<string name="pref_saved_log">Gem loggen til \"Downloads\" mappen</string>
|
||||
<string name="pref_save_log_failed">Forsøg på at gemme loggen mislykkedes</string>
|
||||
@@ -677,6 +675,7 @@
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">Ændret opsætning for %1$s</string>
|
||||
<string name="copy_qr_data_success">Kopieret QR url til udklipsholder</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Svar</string>
|
||||
<string name="notify_new_message">Ny besked</string>
|
||||
<string name="notify_background_connection_enabled">Baggrundsforbindelse aktiveret</string>
|
||||
@@ -717,7 +716,9 @@
|
||||
<string name="global_menu_view_developer_desktop">Udvikler</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Udvikler værktøj</string>
|
||||
<string name="global_menu_help_desktop">Hjælp</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">Lær mere om Delta Chat</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Bidrag på GitHub</string>
|
||||
<string name="global_menu_help_report_desktop">Rapporter en sag</string>
|
||||
<string name="global_menu_help_about_desktop">Om Delta Chat</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Abbruch</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">oder</string>
|
||||
<string name="clear_search">Suche löschen</string>
|
||||
<!-- a noun, used on a button, short for "show link" -->
|
||||
<string name="link">Link</string>
|
||||
@@ -39,6 +37,7 @@
|
||||
<string name="close_window">Fenster schließen</string>
|
||||
<string name="forward">Weiterleiten</string>
|
||||
<string name="create">Erstellen</string>
|
||||
<string name="reset">Zurücksetzen</string>
|
||||
<string name="later">Später</string>
|
||||
<!-- "Resend" means "Sending the selected message(s) again to the same chat". The string is used in a menu and should be as short as possible. Resending may be needed after failures or to repost old messages to new members. -->
|
||||
<string name="resend">Erneut senden</string>
|
||||
@@ -47,6 +46,7 @@
|
||||
<!-- Verb "to unarchive", as in "remove a chat from the archive", opposite of the previous string -->
|
||||
<string name="unarchive">Dearchivieren</string>
|
||||
<string name="mute">Stumm</string>
|
||||
<string name="muted">Stumm</string>
|
||||
<string name="ephemeral_messages">Verschwindende Nachrichten</string>
|
||||
<string name="ephemeral_messages_hint">Gilt für alle Gruppenmitglieder, die Delta Chat verwenden. Nachrichten können kopiert, gespeichert und weitergeleitet werden oder es können andere E-Mail-Clients verwendet werden.</string>
|
||||
<string name="save">Speichern</string>
|
||||
@@ -186,6 +186,14 @@
|
||||
<string name="webxdc_apps">Apps</string>
|
||||
<string name="webxdc_store_url">App-Picker-URL</string>
|
||||
<string name="webxdc_store_url_explain">Wenn gesetzt, wird diese URL als App-Picker anstelle der Voreinstellung verwendet.</string>
|
||||
<string name="home">Start</string>
|
||||
<string name="games">Spiele</string>
|
||||
<string name="tools">Tools</string>
|
||||
<string name="app_size">Größe</string>
|
||||
<string name="app_date_published">Veröffentlicht</string>
|
||||
<string name="add_to_chat">Zum Chat hinzufügen</string>
|
||||
<!-- short for "Browse through the App Picker/Store/Catalogue"; could also be translated as "Discover" or "Search" -->
|
||||
<string name="browse">Entdecken</string>
|
||||
<string name="unknown">Unbekannt</string>
|
||||
|
||||
<string name="green">Grün</string>
|
||||
@@ -369,8 +377,8 @@
|
||||
<string name="ask_forward">Nachricht weiterleiten an %1$s?</string>
|
||||
<string name="ask_forward_multiple">Nachrichten an %1$d Chats weiterleiten?</string>
|
||||
<string name="ask_export_attachment">Das Exportieren von Anhängen ermöglicht es allen anderen Anwendungen auf Ihrem Gerät, auf diese zuzugreifen.\n\nFortfahren? </string>
|
||||
<string name="ask_block_contact">Diesen Kontakt blockieren? Sie werden keine Nachrichten mehr von diesem Kontakt erhalten.</string>
|
||||
<string name="ask_unblock_contact">Diesen Kontakt nicht mehr blockieren? Nachrichten von diesem Kontakt werden dann wieder angezeigt.</string>
|
||||
<string name="ask_block_contact">Diesen Kontakt blockieren?\n\nDirektnachrichten oder Gruppen, die von blockierten Kontakten erstellt wurden, werden nicht angezeigt.\n\nIn anderen Gruppen mit blockierten Kontakten werden deren Nachrichten weiterhin angezeigt.</string>
|
||||
<string name="ask_unblock_contact">Diesen Kontakt nicht mehr blockieren?</string>
|
||||
<string name="ask_delete_contacts">Kontakte dauerhaft löschen?\n\nKontakte mit laufenden Chats und Kontakte aus dem Adressbuch des Systems können nicht dauerhaft gelöscht werden.</string>
|
||||
<string name="ask_delete_contact">Kontakt %1$s dauerhaft löschen?\n\nKontakte mit laufenden Chats und Kontakte aus dem Adressbuch des Systems können nicht dauerhaft gelöscht werden.</string>
|
||||
<string name="cannot_delete_contacts_in_use">Kontakte mit laufenden Chats können nicht gelöscht werden.</string>
|
||||
@@ -507,6 +515,8 @@
|
||||
<string name="tab_audio_empty_hint">In diesem Chat geteilte Audiodateien und Sprachnachrichten werden hier angezeigt.</string>
|
||||
<string name="tab_webxdc_empty_hint">In diesem Chat geteilte Apps werden hier angezeigt.</string>
|
||||
<string name="tab_all_media_empty_hint">Medien aus allen Chats werden hier angezeigt.</string>
|
||||
<string name="all_files_empty_hint">Dokumente und Dateien aus allen Chats werden hier angezeigt.</string>
|
||||
<string name="all_apps_empty_hint">Apps aus allen Chats werden hier angezeigt.</string>
|
||||
<string name="media_preview">Medien-Vorschau</string>
|
||||
<!-- option to show images in the gallery with the correct width/height aspect (instead of square); other gallery apps may be a source of inspiration for translation :) -->
|
||||
<string name="aspect_ratio_grid">Raster im Seitenverhältnis</string>
|
||||
@@ -538,10 +548,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Profil wurde auf Ihr Zweitgerät übertragen.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Profil vorbereiten…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">Warte auf Empfänger…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Empfänger verbunden…</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Transfer…</string>
|
||||
<string name="troubleshooting">Fehlersuche</string>
|
||||
@@ -581,7 +587,7 @@
|
||||
<!-- Instant onboarding title (there is not more to do than to set name and avatar) -->
|
||||
<string name="instant_onboarding_title">Ihr Profil</string>
|
||||
<!-- The placeholder will be replaced by the default onboarding server -->
|
||||
<string name="instant_onboarding_agree_default2">Datenschutzerklärung für %1$s</string>
|
||||
<string name="instant_onboarding_agree_default2">Nutzungsbedingungen und Datenschutzerklärung für %1$s</string>
|
||||
<!-- The placeholder will be replaced by instance name, the whole text will link to the instance page -->
|
||||
<string name="instant_onboarding_agree_instance">Infos zu Profilen auf %1$s</string>
|
||||
<!-- Confirmation button on the instant onboarding screen -->
|
||||
@@ -660,6 +666,8 @@
|
||||
<string name="profile_tag">Private Bezeichnung</string>
|
||||
<string name="profile_tag_hint">z.B. Familie, Arbeit, Freunde</string>
|
||||
<string name="profile_tag_explain">Die Bezeichnung ist nur für Sie sichtbar um zwischen Profilen zu unterscheiden.</string>
|
||||
<!-- Menu entry to sort an item to the beginning of a list. Only "To Top" may do as well in some translations, if that helps to stay shorter. -->
|
||||
<string name="move_to_top">Nach oben</string>
|
||||
<string name="delete_account">Profil löschen</string>
|
||||
<string name="delete_account_ask">Möchten Sie das Profil und alle Daten wirklich von diesem Gerät löschen?</string>
|
||||
<string name="delete_account_explain_with_name">Alle Daten des Profils \"%s\" werden von diesem Gerät gelöscht, dies schließt Ihre Ende-zu-Ende Autocrypt-Einstellungen, Kontakte, Chats, Nachrichten und Medien mit ein. Diese Aktion kann nicht rückgängig gemacht werden.</string>
|
||||
@@ -724,6 +732,7 @@
|
||||
<string name="pref_appearance">Darstellung</string>
|
||||
<string name="pref_theme">Design</string>
|
||||
<string name="pref_language">Sprache</string>
|
||||
<string name="pref_use_system_ui_font">Systemschrift verwenden</string>
|
||||
<string name="pref_incognito_keyboard">Inkognito-Tastatur</string>
|
||||
<!-- Translators: Must indicate that there is no guarantee as the system may not honor our request. -->
|
||||
<string name="pref_incognito_keyboard_explain">Deaktivierung des personalisierten Lernens der Tastatur anfordern.</string>
|
||||
@@ -741,8 +750,6 @@
|
||||
<string name="pref_app_access">App-Zugriff</string>
|
||||
<string name="pref_chats">Chats</string>
|
||||
<string name="pref_in_chat_sounds">In-Chat-Klänge</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Schriftgröße</string>
|
||||
<string name="pref_view_log">Protokoll anzeigen</string>
|
||||
<string name="pref_saved_log">Die Logdatei wurde im Downloads Ordner gespeichert.</string>
|
||||
<string name="pref_save_log_failed">Logdatei konnte nicht gespeichert werden.</string>
|
||||
@@ -953,6 +960,7 @@
|
||||
<string name="chat_protection_broken_explanation">Die Ende-zu-Ende-Verschlüsselung kann nicht mehr garantiert werden, wahrscheinlich weil %1$s Delta Chat neu installiert oder eine Nachricht von einem anderen Gerät gesendet hat.\n\nSie können sich persönlich treffen und den QR-Code erneut scannen, um die garantierte Ende-zu-Ende-Verschlüsselung wiederherzustellen.</string>
|
||||
<string name="invalid_unencrypted_tap_to_learn_more">⚠️ %1$s verlangt eine Ende-zu-Ende-Verschlüsselung, die für diesen Chat noch nicht hergestellt wurde. Tippen, um mehr zu erfahren.</string>
|
||||
<string name="invalid_unencrypted_explanation">Um eine Ende-zu-Ende-Verschlüsselung herzustellen, können Sie Kontakte persönlich treffen und ihren QR-Code scannen.</string>
|
||||
<!-- deprecated -->
|
||||
<string name="encryption_required_for_new_contact">Ende-zu-Ende-Verschlüsselung ist notwendig, aber für %1$s nicht eingerichtet.\n\nZum Herstellen der Ende-zu-Ende-Verschlüsselung, können Sie Ihren Einladungslink teilen oder den Kontakt persönlich zum QR-Code-Scannen treffen.</string>
|
||||
<string name="learn_more">Mehr erfahren</string>
|
||||
|
||||
@@ -979,13 +987,11 @@
|
||||
<string name="qrscan_contains_text">Gescannter QR-Code text:\n\n%1$s</string>
|
||||
<string name="qrscan_contains_url">Gescannter QR-Code URL:\n\n%1$s</string>
|
||||
<string name="qrscan_fingerprint_label">Fingerabdruck</string>
|
||||
<string name="withdraw_verifycontact_explain">Dieser QR-Code kann von anderen gescannt werden, um Sie zu kontaktieren.\n\n Sie können den QR-Code hier deaktivieren und durch erneutes Scannen wieder aktivieren.</string>
|
||||
<string name="withdraw_verifygroup_explain">Dieser QR-Code kann von anderen gescannt werden, um der Gruppe \"%1$s\" beizutreten.\n\n Sie können den QR-Code hier deaktivieren und durch erneutes Scannen wieder aktivieren.</string>
|
||||
<string name="withdraw_qr_code">QR-Code deaktivieren</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifycontact_explain">Dieser QR-Code konnte von anderen gescannt werden, um Sie zu kontaktieren.\n\nDer QR-Code ist auf diesem Gerät nicht aktiv.</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifygroup_explain">Dieser QR-Code konnte von anderen gescannt werden, um der Gruppe \"%1$s\" bezutreten.\n\nDer QR-Code ist auf diesem Gerät nicht aktiv.</string>
|
||||
<string name="withdraw_verifycontact_explain">Dieser QR-Code kann von anderen gescannt werden, um Sie zu kontaktieren.\n\nSie können den QR-Code zurücksetzen; der bestehende QR-Code oder Einladungslink wird dann nicht mehr funktionieren.</string>
|
||||
<string name="withdraw_verifygroup_explain">Dieser QR-Code kann von anderen gescannt werden, um der Gruppe \"%1$s\" beizutreten.\n\nSie können den QR-Code zurücksetzen; der bestehende QR-Code oder Einladungslink wird dann nicht mehr funktionieren.</string>
|
||||
<string name="withdraw_qr_code">QR-Code zurücksetzen</string>
|
||||
<string name="revive_verifycontact_explain">Dieser QR-Code wurde zurückgesetzt und ist nicht mehr aktiv.</string>
|
||||
<string name="revive_verifygroup_explain">Dieser QR-Code für die Gruppe \"%1$s\" wurde zurückgesetzt und ist nicht mehr aktiv.</string>
|
||||
<string name="revive_qr_code">QR-Code aktivieren</string>
|
||||
<string name="qrshow_title">QR-Einladungscode</string>
|
||||
<string name="qrshow_x_joining">%1$s beigetreten.</string>
|
||||
@@ -1028,8 +1034,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">Mailto-Link konnte nicht dekodiert werden: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Verwerfen</string>
|
||||
<string name="notify_reply_button">Antworten</string>
|
||||
<string name="notify_new_message">Neue Nachricht</string>
|
||||
<string name="notify_background_connection_enabled">Hintergrundverbindung aktiviert</string>
|
||||
@@ -1085,8 +1089,12 @@
|
||||
<string name="global_menu_view_developer_desktop">EntwicklerIn</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Entwicklungswerkzeug</string>
|
||||
<string name="global_menu_help_desktop">Hilfe</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">Mehr über Delta Chat erfahren</string>
|
||||
<string name="delta_chat_homepage">Delta Chat Homepage</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Auf GitHub mitwirken</string>
|
||||
<string name="contribute">Mitwirken</string>
|
||||
<string name="global_menu_help_report_desktop">Ein Problem melden</string>
|
||||
<string name="global_menu_help_about_desktop">Über Delta Chat</string>
|
||||
<string name="global_menu_file_open_desktop">Delta Chat öffnen</string>
|
||||
@@ -1099,6 +1107,8 @@
|
||||
<string name="timestamp_format_m_desktop">D MMM</string>
|
||||
<string name="remove_desktop">Entfernen</string>
|
||||
<string name="save_desktop">Speichern</string>
|
||||
<!-- Opposite of "Save". Undo a "Save" action. Similar to "Unmute", "Unpin". Could also be worded as "Save no longer" or so. -->
|
||||
<string name="unsave">Nicht mehr speichern</string>
|
||||
<string name="name_desktop">Name</string>
|
||||
<string name="select_group_image_desktop">Gruppenbild auswählen</string>
|
||||
<string name="export_backup_desktop">Backup exportieren</string>
|
||||
@@ -1158,11 +1168,18 @@
|
||||
<string name="notifications_avg_minutes">Im Mittel alle %1$d Minuten</string>
|
||||
<string name="notifications_avg_hours">Im Mittel alle %1$d Stunden</string>
|
||||
<string name="last_check_at">Überprüft um %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Empfangene oder gesendete Apps werden hier angezeigt. Unter \"Dateien\" können Sie auf heruntergeladene Apps zugreifen.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">\"Teilen\" anklicken</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">\"Zum Home-Bildschirm\" auswählen, um die App zum Startbildschirm hinzuzufügen</string>
|
||||
<string name="system_settings">Systemeinstellungen</string>
|
||||
<!-- shown below the button "System Settings" on the notification screen. this is a hint about what can be edited on System Settings' Notification page - eg. the notification type (banner, lock screen, notification centre), sound, badges and so on. no need to be exhaustive here, it is only to give the user an idea. -->
|
||||
<string name="system_settings_notify_explain_ios">Töne, Vorschau, Stil und mehr bearbeiten</string>
|
||||
<!-- iOS shortcut widget -->
|
||||
<!-- use the same translation for "Shortcuts" as the system is using, often the term "Shortcut" stays untranslated; check eg. how the "Shortcuts" system app is called in your locale -->
|
||||
<string name="shortcuts_widget_title">Shortcuts</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="shortcuts_widget_description">Delta Chat\'s \"Zum Widget hinzufügen\" fügt Chats hinzu</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="remove_from_widget">Aus Widget entfernen</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="add_to_widget">Zum Widget hinzufügen</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Delta Chat verwendet die Kamera, um Fotos aufzunehmen und zu versenden und um QR-Codes zu scannen.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Delta Chat verwendet die Kontakte, um eine Liste von E-Mail-Adressen anzuzeigen, an die Sie schreiben können. Delta Chat hat keine Server; das Adressbuch wird nicht versandt.</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">Εντάξει</string>
|
||||
<string name="cancel">Ακύρωση</string>
|
||||
<string name="clear_search">Αναζήτηση</string>
|
||||
<string name="clear_search">Αναζήτηση</string>
|
||||
<string name="yes">Ναι</string>
|
||||
<string name="no">Όχι</string>
|
||||
<string name="select">Επιλογή</string>
|
||||
@@ -437,6 +437,7 @@
|
||||
<string name="tab_video_empty_hint">Τα βίντεο που κοινοποιούνται σε αυτήν τη συνομιλία θα εμφανίζονται εδώ.</string>
|
||||
<string name="tab_audio_empty_hint">Τα αρχεία ήχου και τα φωνητικά μηνύματα που κοινοποιούνται σε αυτήν τη συνομιλία θα εμφανίζονται εδώ.</string>
|
||||
<string name="tab_webxdc_empty_hint">Οι ιδιωτικές εφαρμογές που κοινοποιούνται σε αυτήν τη συνομιλία θα εμφανίζονται εδώ.</string>
|
||||
<string name="all_apps_empty_hint">Οι ιδιωτικές εφαρμογές που λαμβάνονται ή αποστέλλονται σε οποιαδήποτε συνομιλία θα εμφανίζονται εδώ.</string>
|
||||
<string name="media_preview">Προεπισκόπιση</string>
|
||||
<string name="send_message">Αποστολή μηνύματος</string>
|
||||
<!-- Placeholder %1$s will be replaced by the name of the contact changing their address. Placeholders %2$s and %3$s will be replaced by old/new email addresses. -->
|
||||
@@ -584,8 +585,6 @@
|
||||
<string name="pref_app_access">Πρόσβαση εφαρμογής</string>
|
||||
<string name="pref_chats">Συνομιλίες</string>
|
||||
<string name="pref_in_chat_sounds">Ήχοι μέσα στη συνομιλία</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Μέγεθος γραμματοσειράς μηνύματος</string>
|
||||
<string name="pref_view_log">Προβολή Αρχείου Καταγραφής</string>
|
||||
<string name="pref_saved_log">ΤΟ αρχείο καταγραφής αποθηκεύτηκε στο φάκελο \"Λήψεις\".</string>
|
||||
<string name="pref_save_log_failed">Αποτυχία αποθήκευσης του αρχείου καταγραφής</string>
|
||||
@@ -790,9 +789,7 @@
|
||||
<string name="withdraw_verifycontact_explain">Αυτός ο κωδικός QR μπορεί να σαρωθεί από άλλους για να επικοινωνήσουν μαζί σας.\n\nΜπορείτε να απενεργοποιήσετε τον κωδικό QR εδώ και να τον ξαναενεργοποιήσετε ξανασαρώνοντάς τον.</string>
|
||||
<string name="withdraw_verifygroup_explain">Αυτός ο κωδικός QR μπορεί να σαρωθεί από άλλους για να συμμετάσχουν στην ομάδα \"%1$s\".\n\nΜπορείτε να απενεργοποιήσετε τον κωδικό QR εδώ και να τον ξαναενεργοποιήσετε ξανασαρώνοντάς τον.</string>
|
||||
<string name="withdraw_qr_code">Απενεργοποίηση του κωδικού QR</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifycontact_explain">Αυτός ο κωδικός QR θα μπορούσε να σαρωθεί από άλλους για να επικοινωνήσουν μαζί σας.\n\nΟ κωδικός QR δεν είναι ενεργός σε αυτήν τη συσκευή.</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifygroup_explain">Αυτός ο κωδικός QR θα μπορούσε να σαρωθεί από άλλους για να συμμετάσχουν στην ομάδα \"%1$s\".\n\nΟ κωδικός QR δεν είναι ενεργός σε αυτήν τη συσκευή.</string>
|
||||
<string name="revive_qr_code">Ενεργοποίηση του κωδικού QR</string>
|
||||
<string name="qrshow_title">Κωδικός Πρόσκλησης QR</string>
|
||||
@@ -828,8 +825,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">Αδυναμία αποκωδικοποίησης του συνδέσμου mailto: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Απόρριψη</string>
|
||||
<string name="notify_reply_button">Απάντηση</string>
|
||||
<string name="notify_new_message">Νέο μήνυμα</string>
|
||||
<string name="notify_background_connection_enabled">Η σύνδεση στο παρασκήνιο ενεργοποιήθηκε</string>
|
||||
@@ -876,7 +871,9 @@
|
||||
<string name="global_menu_view_developer_desktop">Προγραμματιστής</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Εργαλεία Προγραμματιστή</string>
|
||||
<string name="global_menu_help_desktop">Βοήθεια</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">Μάθετε περισσότερα για το Delta Chat</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Συνεισφέρετε στο GitHub</string>
|
||||
<string name="global_menu_help_report_desktop">Αναφέρετε ένα πρόβλημα</string>
|
||||
<string name="global_menu_help_about_desktop">Για το Delta Chat</string>
|
||||
@@ -949,11 +946,6 @@
|
||||
<string name="notifications_avg_minutes">Κατά μέσο όρο κάθε %1$d λεπτά</string>
|
||||
<string name="notifications_avg_hours">Κατά μέσο όρο κάθε %1$d ώρες</string>
|
||||
<string name="last_check_at">Έλεγχος στις %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Οι ιδιωτικές εφαρμογές που λαμβάνονται ή αποστέλλονται σε οποιαδήποτε συνομιλία θα εμφανίζονται εδώ. Το \"Αρχεία\" εμφανίζει ιδιωτικές εφαρμογές που μόλις κατεβάσατε.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Κάντε κλικ στο κουμπί κοινής χρήσης</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Επιλέξτε \"Προσθήκη στην αρχική οθόνη\" για να προσθέσετε την εφαρμογή στην αρχική σας οθόνη.</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Το Delta Chat χρησιμοποιεί την κάμερά σας για λήψη και αποστολή φωτογραφιών και βίντεο και για σάρωση κωδικών QR.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Το Delta Chat χρησιμοποιεί τις επαφές σας για να εμφανίσει μια λίστα με διευθύνσεις e-mail στις οποίες μπορείτε να γράψετε. Το Delta Chat δεν έχει διακομιστή, οι επαφές σας δεν αποστέλλονται πουθενά.</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">Bone</string>
|
||||
<string name="cancel">Nuligi</string>
|
||||
<string name="clear_search">Forviŝi Serĉon</string>
|
||||
<string name="clear_search">Forviŝi Serĉon</string>
|
||||
<string name="yes">Jes</string>
|
||||
<string name="no">Ne</string>
|
||||
<string name="select">Elekti</string>
|
||||
@@ -422,8 +422,6 @@
|
||||
<string name="pref_app_access">Aliro al aplikaĵo</string>
|
||||
<string name="pref_chats">Interparoloj</string>
|
||||
<string name="pref_in_chat_sounds">Sonoj dum interparolado</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Mesaĝa tipargrando</string>
|
||||
<string name="pref_view_log">Vidi protokolon</string>
|
||||
<string name="pref_saved_log">Konservis protokolon al la elŝuta dosierujo</string>
|
||||
<string name="pref_save_log_failed">Malsukcesis konservi protokolon</string>
|
||||
@@ -446,6 +444,7 @@
|
||||
<string name="pref_send_copy_to_self">Sendi kopion al mi mem</string>
|
||||
<string name="pref_show_emails_all">Ĉiuj</string>
|
||||
<string name="autocrypt_prefer_e2ee">Preferi tutvojan ĉifradon</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Respondi</string>
|
||||
<string name="notify_new_message">Nova mesaĝo</string>
|
||||
<string name="notify_priority_high">Alta</string>
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">o</string>
|
||||
<string name="or_separator">o</string>
|
||||
<string name="clear_search">Borrar búsqueda</string>
|
||||
<!-- a noun, used on a button, short for "show link" -->
|
||||
<string name="link">Enlace</string>
|
||||
@@ -43,6 +42,7 @@
|
||||
<string name="close_window">Cerrar ventana</string>
|
||||
<string name="forward">Reenviar</string>
|
||||
<string name="create">Crear</string>
|
||||
<string name="reset">Restablecer</string>
|
||||
<string name="later">Luego</string>
|
||||
<!-- "Resend" means "Sending the selected message(s) again to the same chat". The string is used in a menu and should be as short as possible. Resending may be needed after failures or to repost old messages to new members. -->
|
||||
<string name="resend">Volver a enviar</string>
|
||||
@@ -51,6 +51,7 @@
|
||||
<!-- Verb "to unarchive", as in "remove a chat from the archive", opposite of the previous string -->
|
||||
<string name="unarchive">Des-archivar</string>
|
||||
<string name="mute">Silenciar</string>
|
||||
<string name="muted">Silenciar</string>
|
||||
<string name="ephemeral_messages">Desaparición de mensajes</string>
|
||||
<string name="ephemeral_messages_hint">Estos ajustes se aplican a todos los participantes que usan Delta Chat. Sin embargo, pueden copiar, guardar y reenviar mensajes o usar otros clientes de correo</string>
|
||||
<string name="save">Guardar</string>
|
||||
@@ -198,6 +199,16 @@
|
||||
<string name="webxdc_app">Aplicación</string>
|
||||
<!-- plural of "App"; used to present "Webxdc App" (https://webxdc.org) in a user friendly way. Please stay close to the original term and keep it short (it is used in menus with few screen space). -->
|
||||
<string name="webxdc_apps">Aplicaciones</string>
|
||||
<string name="webxdc_store_url">App Picker URL</string>
|
||||
<string name="webxdc_store_url_explain">Si se establece, la URL se utilizará como App Picker en lugar de la predeterminada</string>
|
||||
<string name="home">Inicio</string>
|
||||
<string name="games">Juegos</string>
|
||||
<string name="tools">Herramientas</string>
|
||||
<string name="app_size">Tamaño</string>
|
||||
<string name="app_date_published">Publicado</string>
|
||||
<string name="add_to_chat">Agregar al chat</string>
|
||||
<!-- short for "Browse through the App Picker/Store/Catalogue"; could also be translated as "Discover" or "Search" -->
|
||||
<string name="browse">Navegar</string>
|
||||
<string name="unknown">Desconocido</string>
|
||||
|
||||
<string name="green">Verde</string>
|
||||
@@ -535,6 +546,7 @@
|
||||
<string name="tab_audio_empty_hint">Los archivos de audio y los mensajes de voz compartidos en este chat se mostrarán aquí.</string>
|
||||
<string name="tab_webxdc_empty_hint">Apps compartidas en este chat se mostrarán aquí</string>
|
||||
<string name="tab_all_media_empty_hint">La multimedia compartida en cualquier chat aparecerá aquí</string>
|
||||
<string name="all_apps_empty_hint">Aplicaciones privadas recibidas o enviadas en cualquier chat aparecerán aquí.</string>
|
||||
<string name="media_preview">Vista previa de multimedia</string>
|
||||
<!-- option to show images in the gallery with the correct width/height aspect (instead of square); other gallery apps may be a source of inspiration for translation :) -->
|
||||
<string name="aspect_ratio_grid">Cuadrícula de relación de aspecto</string>
|
||||
@@ -566,10 +578,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Cuenta transferida a tu otro dispositivo.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Preparando cuenta…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">Esperando por receptor…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Receptor conectado…</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Transfiriendo…</string>
|
||||
<string name="troubleshooting">Solución de problemas</string>
|
||||
@@ -609,7 +617,7 @@
|
||||
<!-- Instant onboarding title (there is not more to do than to set name and avatar) -->
|
||||
<string name="instant_onboarding_title">Tu perfil</string>
|
||||
<!-- The placeholder will be replaced by the default onboarding server -->
|
||||
<string name="instant_onboarding_agree_default2">Política de privacidad para %1$s</string>
|
||||
<string name="instant_onboarding_agree_default2">Términos y política de privacidad para %1$s</string>
|
||||
<!-- The placeholder will be replaced by instance name, the whole text will link to the instance page -->
|
||||
<string name="instant_onboarding_agree_instance">Acerca de los perfiles en %1$s</string>
|
||||
<!-- Confirmation button on the instant onboarding screen -->
|
||||
@@ -688,6 +696,8 @@
|
||||
<string name="profile_tag">Etiqueta privada</string>
|
||||
<string name="profile_tag_hint">ej. Trabajo, Familia</string>
|
||||
<string name="profile_tag_explain">Etiqueta que es visible sólo para ti; útil para diferenciar tus perfiles.</string>
|
||||
<!-- Menu entry to sort an item to the beginning of a list. Only "To Top" may do as well in some translations, if that helps to stay shorter. -->
|
||||
<string name="move_to_top">Mover arriba</string>
|
||||
<string name="delete_account">Eliminar cuenta</string>
|
||||
<string name="delete_account_ask">¿Estás seguro de que quieres eliminar los datos de tu cuenta?</string>
|
||||
<string name="delete_account_explain_with_name">Todos los datos de la cuenta de \"%s\" este dispositivo serán eliminados. Incluyendo la configuración de encriptado punto a punto, contactos, chats, mensajes y multimedia. Esta acción no puede ser deshecha.</string>
|
||||
@@ -733,8 +743,8 @@
|
||||
<string name="pref_screen_security_explain">Solicitar bloqueo de capturas de pantalla en la lista de recientes y dentro de la aplicación</string>
|
||||
<string name="pref_screen_security_please_restart_hint">Para aplicar la configuración de seguridad de la pantalla, reinicie la aplicación.</string>
|
||||
<string name="pref_notifications">Notificaciones </string>
|
||||
<string name="pref_mention_notifications">Notificar menciones</string>
|
||||
<string name="pref_mention_notifications_explain">Notificar mensajes en chats silenciados si están dirigidos a ti, como en respuestas o reacciones a tus mensajes</string>
|
||||
<string name="pref_mention_notifications">Menciones</string>
|
||||
<string name="pref_mention_notifications_explain">En los grupos silenciados, notifica los mensajes dirigidos a ti, como respuestas o reacciones</string>
|
||||
<string name="pref_notifications_show">Mostrar</string>
|
||||
<string name="pref_notifications_priority">Prioridad</string>
|
||||
<string name="pref_notifications_explain">Habilitar las notificaciones del sistema para nuevos mensajes</string>
|
||||
@@ -752,6 +762,7 @@
|
||||
<string name="pref_appearance">Apariencia</string>
|
||||
<string name="pref_theme">Tema</string>
|
||||
<string name="pref_language">Idioma</string>
|
||||
<string name="pref_use_system_ui_font">Usar fuentes del sistema</string>
|
||||
<string name="pref_incognito_keyboard">Teclado incógnito</string>
|
||||
<!-- Translators: Must indicate that there is no guarantee as the system may not honor our request. -->
|
||||
<string name="pref_incognito_keyboard_explain">Solicitar al teclado deshabilitar el aprendizaje personalizado</string>
|
||||
@@ -769,8 +780,6 @@
|
||||
<string name="pref_app_access">Acceso a la aplicación</string>
|
||||
<string name="pref_chats">Chats</string>
|
||||
<string name="pref_in_chat_sounds">Sonidos en el chat</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Tamaño de texto del mensaje</string>
|
||||
<string name="pref_view_log">Ver log</string>
|
||||
<string name="pref_saved_log">El log fue guardado en la carpeta de Descargas</string>
|
||||
<string name="pref_save_log_failed">No se pudo guardar el log</string>
|
||||
@@ -981,6 +990,7 @@
|
||||
<string name="chat_protection_broken_explanation">El cifrado de extremo a extremo ya no se puede garantizar, probablemente porque %1$s reinstaló Delta Chat o envió un mensaje desde otro dispositivo.\n\nPueden encontrarse en persona y escanear su código QR nuevamente para restablecer el cifrado de extremo a extremo garantizado.</string>
|
||||
<string name="invalid_unencrypted_tap_to_learn_more">⚠️ %1$s requiere cifrado de extremo a extremo que aún no está configurado para este chat. Toca para obtener más información.</string>
|
||||
<string name="invalid_unencrypted_explanation">Para establecer un cifrado de extremo a extremo, puede reunirse con los contactos en persona y escanear su código QR.</string>
|
||||
<!-- deprecated -->
|
||||
<string name="encryption_required_for_new_contact">Se requiere cifrado de extremo a extremo, pero aún no está disponible para %1$s.\n\nPuede compartir su enlace de invitación o reunirse en persona y escanear su código QR.</string>
|
||||
<string name="learn_more">Aprender más</string>
|
||||
|
||||
@@ -1010,9 +1020,7 @@
|
||||
<string name="withdraw_verifycontact_explain">Este código QR puede ser escaneado por otras personas para contactarlo.\n\nPuede desactivar el código QR aquí y reactivarlo escaneándolo de nuevo.</string>
|
||||
<string name="withdraw_verifygroup_explain">Este código QR puede ser escaneado por otros para unirse al grupo \"%1$s\".\n\nPuede desactivar el código QR aquí y reactivarlo escaneándolo de nuevo.</string>
|
||||
<string name="withdraw_qr_code">Desactivar código QR</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifycontact_explain">Este código QR puede ser escaneado por otros para contactarlo.\n\nEl código QR no está activo en este dispositivo.</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifygroup_explain">Este código QR puede ser escaneado por otros para unirse al grupo \"%1$s\".\n\nEl código QR no está activo en este dispositivo.</string>
|
||||
<string name="revive_qr_code">Activar código QR</string>
|
||||
<string name="qrshow_title">Código de invitación QR</string>
|
||||
@@ -1049,7 +1057,6 @@
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">Configuración cambiada para %1$s.</string>
|
||||
<string name="verified_contact_required_explain">Para garantizar el cifrado de extremo a extremo, solo puedes añadir contactos con una marca de verificación verde</string>
|
||||
<string name="create_verified_group_ask">¿Quieres crear un grupo protegido que garantiza el cifrado de extremo a extremo?\n\nSolo contactos que tengan una estampilla verde de verificación pueden ser añadidos a un grupo protegido.</string>
|
||||
<string name="copy_qr_data_success">URL del código QR copiado al portapapeles</string>
|
||||
<string name="mailto_dialog_header_select_chat">Seleccione el chat para enviar el mensaje</string>
|
||||
<!-- first placeholder is the name of the chat -->
|
||||
@@ -1057,8 +1064,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">El enlace mailto no se pudo decodificar: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Descartar</string>
|
||||
<string name="notify_reply_button">Responder</string>
|
||||
<string name="notify_new_message">Nuevo mensaje</string>
|
||||
<string name="notify_background_connection_enabled">Conexión en segundo plano habilitada</string>
|
||||
@@ -1114,8 +1119,12 @@
|
||||
<string name="global_menu_view_developer_desktop">Programador</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Herramientas del Programador</string>
|
||||
<string name="global_menu_help_desktop">Ayuda</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">Aprender más sobre Delta Chat</string>
|
||||
<string name="delta_chat_homepage">Página de inicio de Delta Chat</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Contribuir en GitHub</string>
|
||||
<string name="contribute">Contribuir</string>
|
||||
<string name="global_menu_help_report_desktop">Reportar un problema</string>
|
||||
<string name="global_menu_help_about_desktop">Sobre Delta Chat</string>
|
||||
<string name="global_menu_file_open_desktop">Abrir Delta Chat</string>
|
||||
@@ -1128,6 +1137,8 @@
|
||||
<string name="timestamp_format_m_desktop">MMM D</string>
|
||||
<string name="remove_desktop">Eliminar</string>
|
||||
<string name="save_desktop">Guardar</string>
|
||||
<!-- Opposite of "Save". Undo a "Save" action. Similar to "Unmute", "Unpin". Could also be worded as "Save no longer" or so. -->
|
||||
<string name="unsave">Deshacer guardado</string>
|
||||
<string name="name_desktop">Nombre</string>
|
||||
<string name="select_group_image_desktop">Seleccionar imagen de grupo</string>
|
||||
<string name="export_backup_desktop">Exportar copia de respaldo</string>
|
||||
@@ -1187,11 +1198,18 @@
|
||||
<string name="notifications_avg_minutes">Promedio cada %1$d minutos</string>
|
||||
<string name="notifications_avg_hours">Promedio cada %1$d horas</string>
|
||||
<string name="last_check_at">Comprobado en %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Apps recibidas o enviadas en cualquier chat aparecerán aquí. \"Archivos\" muestra apps descargadas.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Presiona el botón de compartir</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Selecciona \"Añadir a la pantalla principal\" para añadir la aplicación a tu pantaña principal.</string>
|
||||
<string name="system_settings">Configuración del sistema</string>
|
||||
<!-- shown below the button "System Settings" on the notification screen. this is a hint about what can be edited on System Settings' Notification page - eg. the notification type (banner, lock screen, notification centre), sound, badges and so on. no need to be exhaustive here, it is only to give the user an idea. -->
|
||||
<string name="system_settings_notify_explain_ios">Editar tipo, insignias, vista previa y más</string>
|
||||
<!-- iOS shortcut widget -->
|
||||
<!-- use the same translation for "Shortcuts" as the system is using, often the term "Shortcut" stays untranslated; check eg. how the "Shortcuts" system app is called in your locale -->
|
||||
<string name="shortcuts_widget_title">Accesos directos</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="shortcuts_widget_description">Utilice «Añadir al widget» de Delta Chat para añadir elementos</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="remove_from_widget">Quitar del widget.</string>
|
||||
<!-- use the same translation for "Widget" as the system is using; often the term "Widget" stays untranslated -->
|
||||
<string name="add_to_widget">Agregar al widget</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Al permitir el acceso a la cámara podrás tomar fotos y videos.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Al permitir acceder a tu libreta de direcciones podrás chatear con los contactos de tu dispositivo.</string>
|
||||
@@ -1200,6 +1218,9 @@
|
||||
<string name="InfoPlist_NSMicrophoneUsageDescription">Al permitir el acceso al micrófono podrás grabar audio.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryUsageDescription">Al permitir el acceso a la galería de fotos podrás subir tus imágenes desde allí.</string>
|
||||
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">Delta Chat quiere guardar imágenes en tu galería</string>
|
||||
<string name="InfoPlist_NSFaceIDUsageDescription">Delta Chat puede utilizar Face ID para proteger su perfil local, la creación de copias de seguridad y la configuración de un segundo dispositivo.</string>
|
||||
|
||||
|
||||
<!-- android specific strings, developers: please take care to remove strings that are no longer used! -->
|
||||
<string name="pref_instant_delivery">Entrega inmediata</string>
|
||||
<string name="pref_background_notifications">Usar conexión en segundo plano</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">Ados</string>
|
||||
<string name="cancel">Utzi</string>
|
||||
<string name="yes">Bai</string>
|
||||
<string name="yes">Bai</string>
|
||||
<string name="no">Ez</string>
|
||||
<string name="on">Bai</string>
|
||||
<string name="off">Ez</string>
|
||||
@@ -365,8 +365,6 @@
|
||||
<string name="pref_app_access">Aplikazio sarbidea</string>
|
||||
<string name="pref_chats">Txatak</string>
|
||||
<string name="pref_in_chat_sounds">Txat bitarteko soinuak</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Mezuen letra tamaina</string>
|
||||
<string name="pref_view_log">Ikusi egunkaria</string>
|
||||
<string name="pref_saved_log">Egunkaria deskargen karpetan gorde da</string>
|
||||
<string name="pref_save_log_failed">Huts egin du egunkaria gordetzean</string>
|
||||
@@ -482,6 +480,7 @@
|
||||
<string name="contact_not_verified">Ezin da %1$s egiaztatu</string>
|
||||
<!-- translators: "setup" is the "encryption setup" here, as in "Autocrypt Setup Message" -->
|
||||
<string name="contact_setup_changed">Aldatu %1$s(r)en ezarpena</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Erantzun</string>
|
||||
<string name="notify_new_message">Mezu berria</string>
|
||||
<string name="notify_background_connection_enabled">Bigarren planoko konexioa gaituta</string>
|
||||
@@ -515,7 +514,9 @@
|
||||
<string name="global_menu_view_developer_desktop">Garatzailea</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Garatzaile-tresnak</string>
|
||||
<string name="global_menu_help_desktop">Laguntza</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">Ikasi gehiago Delta Chat-i buruz</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Hartu parte GitHub-en</string>
|
||||
<string name="global_menu_help_report_desktop">Eman arazo baten berri</string>
|
||||
<string name="global_menu_help_about_desktop">Delta Chat-i buruz</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">دلتاچت</string>
|
||||
<string name="ok">تأیید</string>
|
||||
<string name="cancel">لغو</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">یا</string>
|
||||
<string name="clear_search">پاک کردن جستوجو</string>
|
||||
<!-- a noun, used on a button, short for "show link" -->
|
||||
<string name="link">پیوند</string>
|
||||
@@ -541,10 +539,6 @@ https://meet.jit.si/$ROOM
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ حساب به دستگاه دوم شما منتقل شد.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">در حال آماده سازی حساب…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">در انتظار گیرنده…</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">گیرنده متصل شد…</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">در حال انتقال…</string>
|
||||
<string name="troubleshooting">عیبیابی</string>
|
||||
@@ -743,8 +737,6 @@ https://meet.jit.si/$ROOM
|
||||
<string name="pref_app_access">دسترسی نرمافزار</string>
|
||||
<string name="pref_chats">گپها</string>
|
||||
<string name="pref_in_chat_sounds">صداهای درونگپی</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">اندازه نوشتههای پیام</string>
|
||||
<string name="pref_view_log">نمایش گزارش</string>
|
||||
<string name="pref_saved_log">گزارش را در پوشه\"دانلودها\" ذخیره کن </string>
|
||||
<string name="pref_save_log_failed">ذخیره گزارش ناموفق بود</string>
|
||||
@@ -949,6 +941,7 @@ https://meet.jit.si/$ROOM
|
||||
<string name="chat_protection_enabled_explanation">رمزنگاری سراسری پیامهای این گفتگو اکنون تضمین میشود. رمزنگاری سراسری باعث میشود پیامهایتان بین شما و مخاطبین شما محرمانه بماند. حتی ارائهدهنده رایانامه شما هم نمیتواند آنها را بخواند.</string>
|
||||
<string name="chat_protection_broken_tap_to_learn_more">%1$s پیامی را از دستگاه دیگری ارسال کرد. برای اطلاعات بیشتر ضربه بزنید.</string>
|
||||
<string name="invalid_unencrypted_tap_to_learn_more">⚠️ %1$s به رمزنگاری سراسری نیاز دارد که هنوز برای این گپ پیکرهبندی نشده است. برای یادگیری بیشتر اینجا بزنید.</string>
|
||||
<!-- deprecated -->
|
||||
<string name="encryption_required_for_new_contact">رمزنگاری سراسری لازم است اما برای %1$s هنوز پیکرهبندی نشده است.\n\nمیتوانید پیوند دعوت خود را به مخاطبتان بدهید یا اینکه به صورت حضوری کد QR مخاطب را اسکن کنید.</string>
|
||||
<string name="learn_more">بیشتر بدانید</string>
|
||||
|
||||
@@ -982,9 +975,7 @@ https://meet.jit.si/$ROOM
|
||||
<string name="withdraw_verifycontact_explain">دیگران برای ارتباط با شما میتوانند این کد کیوآر را اسکن کنند. \n\n میتوان کد کیوآر را در اینجا غیر فعال کنید و با اسکن کردن مجدد، آن را فعال کنید. </string>
|
||||
<string name="withdraw_verifygroup_explain">این کد کیوآر میتواند توسط دیگران و برای پیوستن به گروه \"%1$s\" اسکن شود.\n\n شما میتواند این کد کیوآر را در اینجا غیرفعال کنید و با اسکن کردن مجدد، آن را فعال نمایید. </string>
|
||||
<string name="withdraw_qr_code">غیرفعال کردن کد کیوآر</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifycontact_explain">دیگران برای تماس با شما میتوانند این کد کیوآر را اسکن کنند. \n\n این کد کیوآر در این دستگاه فعال نیست. </string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifygroup_explain">دیگران میتوانند برای پیوستن به گروه \"%1$s\" این کد کیوآر را اسکن کنند. این کد کیوآر روی این دستگاه فعال نیست. </string>
|
||||
<string name="revive_qr_code">فعال کردن کد کیوآر</string>
|
||||
<string name="qrshow_title">کد دعوت کیوآر</string>
|
||||
@@ -1030,8 +1021,6 @@ https://meet.jit.si/$ROOM
|
||||
<string name="mailto_link_could_not_be_decoded">امکان کدگشایی پیوند mailto وجود ندارد: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">صرف نظر</string>
|
||||
<string name="notify_reply_button">پاسخ</string>
|
||||
<string name="notify_new_message">پیام جدید</string>
|
||||
<string name="notify_background_connection_enabled">اتصالها پیش زمینه فعال شد</string>
|
||||
@@ -1103,7 +1092,9 @@ GNU GPL ورژن ۳
|
||||
<string name="global_menu_view_developer_desktop">برنامهنویس</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">ابزار برنامه نویس</string>
|
||||
<string name="global_menu_help_desktop">کمک</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">یادگیری بیشتر درمورد دلتاچت</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">کمک به گیتهاب</string>
|
||||
<string name="global_menu_help_report_desktop">گزارش یک مشکل</string>
|
||||
<string name="global_menu_help_about_desktop">درباره دلتاچت</string>
|
||||
@@ -1176,11 +1167,6 @@ GNU GPL ورژن ۳
|
||||
<string name="notifications_avg_minutes">به صورت متوسط هر%1$d دقیقه</string>
|
||||
<string name="notifications_avg_hours">به صورت متوسط هر %1$d ساعت</string>
|
||||
<string name="last_check_at">بررسی شده در %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">برنامههای دریافتشده یا ارسالشده از همه چتها در اینجا نمایش داده میشود. «پروندهها» تنها برنامههای اخیرا دریافتشده را نمایش میدهد.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">روی دکمه اشتراک کلیک کنید</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">برای افزودن برنامه به صفحه اصلی خود، «افزودن به صفحه اصلی» را انتخاب کنید.</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">دلتاچت برای گرفتن و ارسال عکس و فیلم و برای اسکن کردن کیوآر کد از دوربین شما استفاده میکند. </string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">دلتاچت از مخاطبین شما برای نمایش فهرست رایانامههایی که میتوانید برایشان پیام ارسال کنید استفاده میکند. دلتاچت کارساز ندارد، مخاطبین شما به جایی ارسال نمیشوند. </string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Peruuta</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">tai</string>
|
||||
<string name="clear_search">Tyhjennä haku</string>
|
||||
<string name="yes">Kyllä</string>
|
||||
<string name="no">Ei</string>
|
||||
@@ -478,6 +476,7 @@
|
||||
<string name="tab_audio_empty_hint">Tässä keskustelussa jaetut äänitiedostot ja -viestit näkyvät tässä.</string>
|
||||
<string name="tab_webxdc_empty_hint">Keskustelussa jaetut yksityiset sovellukset näkyvät tässä.</string>
|
||||
<string name="tab_all_media_empty_hint">Kun keskusteluissa jaetaan mediaa, se tulee näkymään täällä.</string>
|
||||
<string name="all_apps_empty_hint">Kaikissa keskusteluissa jaetut yksityiset sovellukset näkyvät tässä.</string>
|
||||
<string name="media_preview">Median esikatselu</string>
|
||||
<!-- option to show images in the gallery with the correct width/height aspect (instead of square); other gallery apps may be a source of inspiration for translation :) -->
|
||||
<string name="aspect_ratio_grid">Kuvasuhteen mukainen ruudukko</string>
|
||||
@@ -509,10 +508,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Profiili siirretty toiselle laitteellesi.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Valmistellaan profiilia...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">Odotetaan vastaanottajaa...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Vastaanottaja yhdistetty...</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Siirretään...</string>
|
||||
<string name="troubleshooting">Vianetsintä</string>
|
||||
@@ -690,8 +685,6 @@
|
||||
<string name="pref_app_access">Sovelluksen pääsy</string>
|
||||
<string name="pref_chats">Keskustelut</string>
|
||||
<string name="pref_in_chat_sounds">Keskustelunaikaiset äänet</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Viestin fonttikoko</string>
|
||||
<string name="pref_view_log">Näytä loki</string>
|
||||
<string name="pref_saved_log">Tallenna loki \"Lataukset\" -kansioon</string>
|
||||
<string name="pref_save_log_failed">Lokin tallennus epäonnistui</string>
|
||||
@@ -928,9 +921,7 @@
|
||||
<string name="withdraw_verifycontact_explain">Muut voivat skannata tämän QR-koodin ottaakseen yhteyttä sinuun.\n\nVoit kytkeä QR-koodin pois täällä ja aktivoida sen uudelleen skannaamalla uudestaan.</string>
|
||||
<string name="withdraw_verifygroup_explain">Muut voivat skannata tämän QR-koodin liittyäkseen ryhmään \"%1$s\".\n\nVoit kytkeä QR-koodin pois täällä ja aktivoida sen uudelleen skannaamalla.</string>
|
||||
<string name="withdraw_qr_code">Kytke QR-koodi pois käytöstä</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifycontact_explain">Muut voivat skannata tämän QR-koodin ottaakseen yhteyttä sinuun.\n\nQR-koodi ei ole aktiivinen tällä laitteella.</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifygroup_explain">Muut voivat skannata tämän QR-koodin liittyäkseen ryhmään \"%1$s\".\n\nQR-koodi ei ole aktiivinen tällä laitteella.</string>
|
||||
<string name="revive_qr_code">Aktivoi QR-koodi</string>
|
||||
<string name="qrshow_title">QR-kutsukoodi</string>
|
||||
@@ -974,8 +965,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">mailto-linkkiä ei voitu selvittää: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Hylkää</string>
|
||||
<string name="notify_reply_button">Vastaa</string>
|
||||
<string name="notify_new_message">Uusi viesti</string>
|
||||
<string name="notify_background_connection_enabled">Yhteys käynnissä taustalla</string>
|
||||
@@ -1031,7 +1020,9 @@
|
||||
<string name="global_menu_view_developer_desktop">Kehittäjä</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Kehittäjätyökalut</string>
|
||||
<string name="global_menu_help_desktop">Ohje</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">Lisätietoja Delta Chatista</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Osallistu GitHubissa</string>
|
||||
<string name="global_menu_help_report_desktop">Ilmoita ongelma</string>
|
||||
<string name="global_menu_help_about_desktop">Tietoja Delta Chatista</string>
|
||||
@@ -1104,11 +1095,6 @@
|
||||
<string name="notifications_avg_minutes">Keskimäärin%1$d minuutin välein</string>
|
||||
<string name="notifications_avg_hours">Keskimäärin %1$d tunnin välein</string>
|
||||
<string name="last_check_at">Tarkistettu %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Kaikissa keskusteluissa jaetut yksityiset sovellukset näkyvät tässä. \"Tiedostot\" näyttää ladatut yksityiset sovellukset.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Napauta jakamispainiketta.</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Valitse \"Lisää aloitusnäytölle\" lisätäksesi sovelluksen puhelimesi aloitusnäytölle.</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Delta Chat käyttää kameraa kuvien ja videoiden kuvaamiseen ja lähettämiseen sekä QR-koodien skannaamiseen.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Delta Chat käyttää yhteystietojasi näyttämään listan sähköpostiosoitteista, joihin voit kirjoittaa. Delta Chatilla ei ole palvelimia, eikä yhteystietojasi lähetetä mihinkään.</string>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
<!-- deprecated, the word "or" to separate blocks in the user interface that are mutually exclusive -->
|
||||
<string name="or_separator">ou</string>
|
||||
<string name="clear_search">Effacer la recherche</string>
|
||||
<string name="yes">Oui</string>
|
||||
<string name="no">Non</string>
|
||||
@@ -494,6 +492,7 @@
|
||||
<string name="tab_audio_empty_hint">Les fichiers audio et messages vocaux partagés dans cette discussion seront affichés ici.</string>
|
||||
<string name="tab_webxdc_empty_hint">Les applis partagées dans cette discussion seront affichées ici.</string>
|
||||
<string name="tab_all_media_empty_hint">Les fichiers multimédias partagés dans une discussion apparaissent ici.</string>
|
||||
<string name="all_apps_empty_hint">Les applications envoyées ou reçues dans une discussion apparaissent ici.</string>
|
||||
<string name="media_preview">Prévisualiser le fichier multimédia</string>
|
||||
<!-- option to show images in the gallery with the correct width/height aspect (instead of square); other gallery apps may be a source of inspiration for translation :) -->
|
||||
<string name="aspect_ratio_grid">Grille de proportions</string>
|
||||
@@ -525,10 +524,6 @@
|
||||
<string name="multidevice_transfer_done_devicemsg">ℹ️ Compte transféré sur votre deuxième appareil.</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="preparing_account">Préparation du compte...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="waiting_for_receiver">En attente de l\'appareil...</string>
|
||||
<!-- deprecated, shown beside progress bar, stay short -->
|
||||
<string name="receiver_connected">Appareil connecté...</string>
|
||||
<!-- Shown beside progress bar, stay short -->
|
||||
<string name="transferring">Transfert...</string>
|
||||
<string name="troubleshooting">Dépannage</string>
|
||||
@@ -695,8 +690,6 @@
|
||||
<string name="pref_app_access">Accès à l\'application</string>
|
||||
<string name="pref_chats">Discussions</string>
|
||||
<string name="pref_in_chat_sounds">Sons de messages entrants</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Taille de police des messages</string>
|
||||
<string name="pref_view_log">Voir le journal</string>
|
||||
<string name="pref_saved_log">Journal enregistré dans le dossier \"Téléchargements\"</string>
|
||||
<string name="pref_save_log_failed">Enregistrement du journal échoué</string>
|
||||
@@ -923,9 +916,7 @@
|
||||
<string name="withdraw_verifycontact_explain">Ce code QR pourrait être scanné par d\'autre personnes pour vous contacter.\n\nVous pouvez désactiver le QR code ici et le réactiver en le scannant ici de nouveau.</string>
|
||||
<string name="withdraw_verifygroup_explain">Le code QR peut être scanné par d\'autres personnes pour rejoindre le groupe \"%1$s\".\n\nVous pouvez désactiver le QR code ici et le réactiver en le scannant ici de nouveau.</string>
|
||||
<string name="withdraw_qr_code">Désactiver le QR Code</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifycontact_explain">Ce code QR pourrait être scanné par d\'autre personnes pour vous contacter.\n\nCe code QR n\'est pas actif sur cet appareil.</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifygroup_explain">Ce code QR pourrait être scanné par d\'autre personnes pour rejoindre le groupe \"%1$s\".\n\nLe code QR n\'est pas actif sur cet appareil.</string>
|
||||
<string name="revive_qr_code">Activer le QR Code</string>
|
||||
<string name="qrshow_title">QR Code d\'Invitation</string>
|
||||
@@ -968,8 +959,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">Le lien mailto n\'a pas pu être décodé: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Rejeter</string>
|
||||
<string name="notify_reply_button">Répondre</string>
|
||||
<string name="notify_new_message">Nouveau message</string>
|
||||
<string name="notify_background_connection_enabled">Connexion en arrière-plan activée</string>
|
||||
@@ -1025,7 +1014,9 @@
|
||||
<string name="global_menu_view_developer_desktop">Développeur</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Outils de développement</string>
|
||||
<string name="global_menu_help_desktop">Aide</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">En savoir plus sur Delta Chat</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Contribuer sur Github</string>
|
||||
<string name="global_menu_help_report_desktop">Signaler un problème</string>
|
||||
<string name="global_menu_help_about_desktop">À propos de Delta Chat</string>
|
||||
@@ -1098,11 +1089,6 @@
|
||||
<string name="notifications_avg_minutes">Toutes les %1$d minutes en moyenne</string>
|
||||
<string name="notifications_avg_hours">Toutes les %1$d heures en moyenne</string>
|
||||
<string name="last_check_at">Dernièrement vu à %1$s</string>
|
||||
<!-- iOS webxdc selector -->
|
||||
<string name="webxdc_selector_empty_hint">Les applications envoyées ou reçues dans une discussion apparaissent ici. « Fichiers » affiche les applis que vous venez de télécharger.</string>
|
||||
<!-- iOS webxdc shortcut page -->
|
||||
<string name="shortcut_step1_tap_share_btn">Cliquer sur le bouton « Partager ».</string>
|
||||
<string name="shortcut_step2_tap_add_to_home_screen">Sélectionner « Ajouter à l\'écran d\'accueil » pour ajouter l\'appli à votre écran d\'accueil.</string>
|
||||
<!-- iOS permissions, copy from "deltachat-ios/Info.plist", which is used on missing translations in "deltachat-ios/LANG.lproj/InfoPlist.strings" -->
|
||||
<string name="InfoPlist_NSCameraUsageDescription">Delta Chat utilise votre appareil photo pour prendre des photos et des vidéos et les envoyer, ainsi que pour scanner des QR codes.</string>
|
||||
<string name="InfoPlist_NSContactsUsageDescription">Delta Chat utilise vos contacts pour montrer une liste d\'adresses de courriel auxquels vous pouvez écrire. Delta Chat n\'a pas de serveur, vos contacts ne sont envoyés nulle part.</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
<string name="clear_search">Eliminar busca</string>
|
||||
<string name="clear_search">Eliminar busca</string>
|
||||
<string name="yes">Si</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="select">Seleccionar</string>
|
||||
@@ -591,8 +591,6 @@
|
||||
<string name="pref_app_access">Acceso a app</string>
|
||||
<string name="pref_chats">Conversas</string>
|
||||
<string name="pref_in_chat_sounds">Sons na conversa</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Tamaño da letra na mensaxe</string>
|
||||
<string name="pref_view_log">Ver rexistro</string>
|
||||
<string name="pref_saved_log">Gardouse o rexistro no cartafol \"Descargas\"</string>
|
||||
<string name="pref_save_log_failed">Non se puido gardar o rexistro</string>
|
||||
@@ -770,9 +768,7 @@
|
||||
<string name="withdraw_verifycontact_explain">Este código QR permite que outras persoas contacten contigo.\n\nPodes desactivar o código QR aquí e reactivalo volvéndoo a escanear.</string>
|
||||
<string name="withdraw_verifygroup_explain">Este código QR permite que outras persoas se unan ao grupo \"%1$s\".\n\nPodes desactivar aquí o código QR e reactivalo volvéndoo a escanear.</string>
|
||||
<string name="withdraw_qr_code">Desactivar código QR</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifycontact_explain">Este código QR podía ser escaneado por outras persoas para contactar contigo.\n\nO código QR non está activo neste dispositio.</string>
|
||||
<!-- "could" in the meaning of "possible at some point in the past, but no longer possible today" -->
|
||||
<string name="revive_verifygroup_explain">O código QR podía ser escaneado por outras persoas para unirse ao grupo \"%1$s\".\n\nO código QR non está activo neste dispositivo.</string>
|
||||
<string name="revive_qr_code">Activar código QR</string>
|
||||
<string name="qrshow_title">Código QR de convite</string>
|
||||
@@ -804,8 +800,6 @@
|
||||
<string name="mailto_link_could_not_be_decoded">a ligazón mailto non se puido descodificar: %1$s</string>
|
||||
|
||||
<!-- notifications -->
|
||||
<!-- deprecated, use mark_as_read or mark_as_read_short -->
|
||||
<string name="notify_dismiss">Desbotar</string>
|
||||
<string name="notify_reply_button">Responder</string>
|
||||
<string name="notify_new_message">Nova mensaxe</string>
|
||||
<string name="notify_background_connection_enabled">Conexión en segundo plano establecida</string>
|
||||
@@ -852,7 +846,9 @@
|
||||
<string name="global_menu_view_developer_desktop">Desenvolvedora</string>
|
||||
<string name="global_menu_view_developer_tools_desktop">Ferramentas de desenvolvedora</string>
|
||||
<string name="global_menu_help_desktop">Axuda</string>
|
||||
<!-- deprecated, use delta_chat_homepage instead -->
|
||||
<string name="global_menu_help_learn_desktop">Coñece máis sobre Delta Chat</string>
|
||||
<!-- deprecated, use contribute instead -->
|
||||
<string name="global_menu_help_contribute_desktop">Contribúe en GitHub</string>
|
||||
<string name="global_menu_help_report_desktop">Informa dun fallo</string>
|
||||
<string name="global_menu_help_about_desktop">Acerca de Delta Chat</string>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<string name="app_name">Delta Chat</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="cancel">Otkaži</string>
|
||||
<string name="yes">Da</string>
|
||||
<string name="yes">Da</string>
|
||||
<string name="no">Ne</string>
|
||||
<string name="on">Uključeno</string>
|
||||
<string name="off">Isključeno</string>
|
||||
@@ -211,8 +211,6 @@
|
||||
<string name="pref_app_access">Pristup aplikaciji</string>
|
||||
<string name="pref_chats">Razgovori</string>
|
||||
<string name="pref_in_chat_sounds">Zvuk unutar razgovora</string>
|
||||
<!-- deprecated -->
|
||||
<string name="pref_message_text_size">Veličina fonta poruke</string>
|
||||
<string name="pref_other">Ostalo</string>
|
||||
<string name="pref_backup">Sigurnosna kopija</string>
|
||||
<!-- No need to translate "Wallpaper" literally. Chose what is common in your language for a "Wallpaper" or a "Background". Avoid adding the term "image" here, as the "Wallpaper" may also be just a single color. -->
|
||||
@@ -224,6 +222,7 @@
|
||||
<!-- qr code stuff -->
|
||||
<string name="qr_code">QR kod</string>
|
||||
<string name="qrscan_fingerprint_label">Otisak prsta</string>
|
||||
<!-- notifications -->
|
||||
<string name="notify_reply_button">Odgovori</string>
|
||||
<string name="notify_new_message">Nova poruka</string>
|
||||
<string name="notify_priority_high">Visoko</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user