diff --git a/.github/workflows/preview-apk.yml b/.github/workflows/preview-apk.yml index cefab2c9b..e2a5c1eb1 100644 --- a/.github/workflows/preview-apk.yml +++ b/.github/workflows/preview-apk.yml @@ -40,8 +40,11 @@ jobs: env: ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }} run: | - export PATH="${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/:${ANDROID_NDK_ROOT}" - ./scripts/install-toolchains.sh && ./ndk-make.sh + export PATH="${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/" + scripts/install-toolchains.sh && scripts/ndk-make.sh + + - name: Validate Gradle Wrapper + uses: gradle/wrapper-validation-action@v1 - name: Build APK run: ./gradlew --no-daemon assembleGplayDebug diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 661e0759b..2175d7421 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -27,6 +27,7 @@ + @@ -283,7 +284,8 @@ + android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" + android:exported="true"> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum -warn ( ) { +warn () { echo "$*" -} +} >&2 -die ( ) { +die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -89,84 +140,101 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save ( ) { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done fi +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index e95643d6a..53a6b238d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,4 +1,20 @@ -@if "%DEBUG%" == "" @echo off +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -9,19 +25,22 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,38 +64,26 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/jni/dc_wrapper.c b/jni/dc_wrapper.c index d05ce2c52..b24d4aaad 100644 --- a/jni/dc_wrapper.c +++ b/jni/dc_wrapper.c @@ -1289,6 +1289,15 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcChat_getName(JNIEnv *env, jobject ob } +JNIEXPORT jstring Java_com_b44t_messenger_DcChat_getMailinglistAddr(JNIEnv *env, jobject obj) +{ + char* temp = dc_chat_get_mailinglist_addr(get_dc_chat(env, obj)); + jstring ret = JSTRING_NEW(temp); + dc_str_unref(temp); + return ret; +} + + JNIEXPORT jstring Java_com_b44t_messenger_DcChat_getProfileImage(JNIEnv *env, jobject obj) { char* temp = dc_chat_get_profile_image(get_dc_chat(env, obj)); diff --git a/jni/deltachat-core-rust b/jni/deltachat-core-rust index b3e2e3dfe..9cb0fa7d5 160000 --- a/jni/deltachat-core-rust +++ b/jni/deltachat-core-rust @@ -1 +1 @@ -Subproject commit b3e2e3dfe5409902b05aeaecff48f8b999a0a6d7 +Subproject commit 9cb0fa7d58411b1e1afc2677d589d2c8a42226de diff --git a/res/menu/conversation_context.xml b/res/menu/conversation_context.xml index 401b2050a..4731628a6 100644 --- a/res/menu/conversation_context.xml +++ b/res/menu/conversation_context.xml @@ -20,6 +20,11 @@ android:icon="@drawable/ic_share_white_24dp" app:showAsAction="always" /> + + + + diff --git a/res/menu/webxdc.xml b/res/menu/webxdc.xml index d119a5c72..20bd61f0c 100644 --- a/res/menu/webxdc.xml +++ b/res/menu/webxdc.xml @@ -2,6 +2,8 @@ + diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index b0015c23d..7812e96e3 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -422,7 +422,6 @@ Документите, музикалните файлове и други файлове, споделени в този чат, ще се показват тук. Предварителен преглед на медия Изпращане на съобщение - Входящи съобщения diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 0fd8b6ba4..1685c707b 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -430,7 +430,6 @@ Mapa Previsualització multimèdia Envia el missatge - Missatges entrants diff --git a/res/values-ckb/strings.xml b/res/values-ckb/strings.xml index 8bdddf76a..e0ca6bf64 100644 --- a/res/values-ckb/strings.xml +++ b/res/values-ckb/strings.xml @@ -341,7 +341,6 @@ بەڵگە و مۆسیقا و هەموو پەڕگە هاوبەشکراوەکانی نێو ئەم وتووێژە، لێرەدا پیشان دەدرێن. پێشدیتنی ڕەنگاڵە پەیام بنێرە - بچۆ ژوورەوە بچۆ ژوورەوە بۆ سێرڤێرەکەی خۆت بچۆ ژوورەوە بە ناونیشانی ئیمەیلێکەوە diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 0a0ccc12c..9aa7b152c 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -374,7 +374,6 @@ Documenty, hudba a další soubory sdílené v tomto hovoru budou zobrazeny zde. Náhled multimedia Pošli zprávu - Messenger s nejširší základnou na světě. Svobodný a nezávislý. Přihlaš se Přihlaš se na váš server diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 7ef7dab93..4f0103616 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -365,7 +365,6 @@ Dokumenter, musik og andre filer delt i denne samtale vises her. Medie forhåndsvisning Send besked - Indkommende beskeder diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index a799fdc37..5d6164c6c 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -39,7 +39,7 @@ Dearchivieren Stumm Verschwindende Nachrichten - Diese Einstellungen gelten für alle Gruppenmitglieder, die Delta Chat verwenden. Nachrichten können jedoch kopiert, gespeichert und weitergeleitet werden oder es können andere E-Mail-Clients verwenden werden. + 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. Speichern Chat Medien @@ -131,7 +131,7 @@ Bild Antwort - Gif + GIF Sticker Bilder @@ -293,7 +293,7 @@ Videochat-Instanz Videochat-Instanz Beispiele: https://meet.jit.si/$ROOM oder basicwebrtc:https://your-server - Wenn Videochat eingeschaltet ist, können Sie einen Videochat von jedem Chat aus starten. Videochats erfordern beidseitig eine kompatible App oder einen kompatiblen Browser. + Wenn aktiv, können Sie einen Videochat aus jedem Chat starten. Videochats erfordern beidseitig eine kompatible App oder einen kompatiblen Browser. \"%1$s\" verwenden, um andere zu Videochats einzuladen?\n\nWenn Sie diese Einstellung vornehmen, können Sie von jedem Chat aus einen Videochat starten. Dies überschreibt, falls vorhanden, die bisherige Einstellung zu Videochats. Videochat-Einladung Sie sind zu einem Videochat eingeladen, klicken Sie auf %1$s , um teilzunehmen. @@ -368,8 +368,8 @@ Archiviert Anfrage Keine Nachrichten. - Nachrichten, die ich mir selber geschickt habe - Wenn Sie Chats archivieren, werden diese hier angezeigt. + Nachrichten an mich selbst + Archivierte Chats werden hier angezeigt. Gespeicherte Nachrichten • Nachrichten zum Merken hierher weiterleiten\n\n• Notizen oder Sprachmemos machen\n\n• Medien zum Speichern einfügen @@ -439,13 +439,17 @@ Links Karte In diesem Chat geteilte Bilder und Videos werden hier angezeigt. - In diesem Chat geteilte Dokumente, Musik und Dateien werden hier angezeigt. + In diesem Chat geteilte Dokumente und Dateien werden hier angezeigt. In diesem Chat geteilte Bilder werden hier angezeigt. In diesem Chat geteilte Videos werden hier angezeigt. In diesem Chat geteilte Audiodateien und Sprachnachrichten werden hier angezeigt. In diesem Chat geteilte Webxdc werden hier angezeigt. Medien-Vorschau Nachricht senden + + %1$s hat die E-Mail-Adresse von %2$s nach %3$s geändert + + Sie haben Ihre E-Mail-Adresse von %1$s auf %2$s geändert.\n\nWenn Sie jetzt eine Nachricht an eine verifizierte Gruppe senden, wird dort automatisch die alte durch die neue Adresse ersetzt.\n\nEs wird dringend empfohlen, Ihren alten E-Mail-Anbieter so einzurichten, dass er alle E-Mails an Ihre neue E-Mail-Adresse weiterleitet. Andernfalls könnten Sie Nachrichten von Kontakten verpassen, die Ihre neue E-Mail-Adresse noch nicht erhalten haben. diff --git a/res/values-eo/strings.xml b/res/values-eo/strings.xml index aba2b97fc..cf1d98006 100644 --- a/res/values-eo/strings.xml +++ b/res/values-eo/strings.xml @@ -268,7 +268,6 @@ Mapo Aŭdvida antaŭrigardo Sendi mesaĝon - Ensaluti Ensaluti al via servilo Ricevujo diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index cd36b967d..f2719a777 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -427,7 +427,7 @@ ¿Estás seguro de que quieres visitar %1$s? - Siguió un enlace que podría estar tergiversando caracteres al usar caracteres de diferentes alfabetos con un aspecto similar. Seguir el enlace etiquetado %1$s conducirá a %2$s, que es normal para caracteres no latinos. Si no esperaba tales caracteres, este enlace podría ser dañino + Siguió un enlace que podría estar tergiversando caracteres al usar caracteres de diferentes alfabetos con un aspecto similar. Seguir el enlace etiquetado %1$s conducirá a %2$s, que es normal para caracteres no latinos. Si no esperaba tales caracteres, este enlace podría ser dañino. @@ -461,6 +461,10 @@ El contenido de Webxdc compartido en este chat se mostrará aquí. Vista previa de multimedia Enviar mensaje + + %1$s cambió su dirección de %2$s a %3$s + + Has cambiado tu dirección de correo electrónico de %1$s a %2$s.\n\nSi ahora envías un mensaje a un grupo verificado, los contactos de éste sustituirán automáticamente la antigua por tu nueva dirección.\n\nEs muy recomendable que configures tu antiguo proveedor de correo electrónico para que reenvíe todos los mensajes a tu nueva dirección. De lo contrario, podrías perderte los mensajes de los contactos que aún no han recibido tu nueva dirección. diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 41d5e4310..753383156 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -281,7 +281,6 @@ Txat honetan partekatutako dokumentuak, musika, eta bestelako fitxategiak agertuko dira hemen Multimediaren aurrebista Bidali mezua - Munduan erabiltzaile gehien dituen mezularitza aplikazioa. Librea eta independentea. Hasi saioa Hasi saioa zure zerbitzarian diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 371b08467..c1c120207 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -31,6 +31,8 @@ بازگشت بستن هدایت + + ارسال مجدد بایگانی @@ -118,6 +120,12 @@ %d گیرنده %d گیرنده‌ + + + تعداد %d انتخاب شده است + تعداد %dانتخاب شده است + + من پیش‌نویس تصویر @@ -256,6 +264,8 @@ سنجاق برداری پیام اصلی یافت نشد پاسخ دادن به صورت خصوصی + کد منبع + ساکت کردن به مدت۱ ساعت ساکت کردن به مدت ۲ ساعت ساکت کردن به مدت ۱ روز @@ -283,6 +293,11 @@ برای باز کردن ضربه بزنید. جلسه تماس تصویری جلسه تماس تصویری شما + مثال‌ها: +https://meet.jit.si/$ROOM +یا + basicwebrtc:https://your-server + در صورت فعال‌سازی می‌توانید یک مکالمه تصویری را در هر گفتگو شروع کنید. نیازمند نرم‌افزار مورد نیاز یا مرورگر در هر دو طرف است. می‌خواهید از \"%1$s\" برای دعوت دیگران به گفتگوی تصویری استفاده کنید؟/n/n وقتی تعیین شد، می‌توانید در هر گفتگوی فرد به فرد یک مکالمه تصویری شروع کنید. این کار، تنظیمات قبلی تماس تصویری(در صورت وجود تنظیمات قبلی) را تغییر می‌دهد. دعوت به مکالمه تصویری. شما به مکالمه تصویری دعوت شده اید برای پیوستن%1$s را بزنید. @@ -364,6 +379,7 @@ برای دسترسی راحت‌تر پیام‌ها را به اینجا هدایت کنید\n\n• می‌توانید یادداشت متنی یا صوتی تهیه کنید\n\n• برای ذخیره رسانه‌ آن را ضمیمه کنید. ذخیره شد + ذخیره به عنوان برای ارسال پیام دوباره تلاش کنید. نمی‌توانید بنویسید چرا که در این گروه نیستید. برای عضو شدن از یکی از اعضا درخواست کنید. @@ -429,8 +445,18 @@ نقشه عکس‌ها و فیلم‌هایی که در این گفتگو به اشتراک گذاشته شده‌اند در اینجا نمایش داده خواهد شد. اسناد، آهنگ‌ها و دیگر فایل‌هایی که در این گفتگو به اشتراک گذاشته شده باشند در اینجا نمایش داده خواهند شد. + تصاوری که در این گفتگو اشتراک گذاری شده‌ باشند در اینجا نمایش داده می‌شوند. + فیلم‌هایی که در این گفتگو اشتراک گذاری شده باشند در اینجا نمایش داده می‌شوند. + فایل‌ها و پیام‌های صوتی که در این گفتگو اشتراک گذاری شده‌‌اند در اینجا نمایش داده می‌شوند. + محتوای Webxdc اشتراک گذاری شده در این گفتگو در اینجا نمایش داده می‌شود. نمایش رسانه ارسال پیام + + مخاطب %1$s نشانی خود را از %2$s به %3$s تغییر داده است. + + شما نشانی رایانامه خود را از %1$s به %2$s تغییر داده‌اید. +اگر به گروه‌های تایید شده یا مخاطبین خود پیامی ارسال کنید؛ به صورت خودکار نشانی جدید را جایگزین نشانی پیشین می‌کنند. +به شدت توصیه می‌شود که نشانی رایانامه پیشین خود را به نحوی تنظیم کنید که همه رایانامه‌ها را به نشانی جدید شما هدایت کند؛ در غیر این صورت ممکن است پیام‌های مخاطبینی که از تغییر نشانی شما مطلع نشده‌اند را از دست بدهید. @@ -457,6 +483,9 @@ مقدار %1$s از %2$s استفاده شده است. + + گفتگو از طریق رایانامه + اسکن کردن کد دعوت پیام‌رسانی با وسیع‌ترین طیف مخاطبین در جهان. آزاد و مستقل. ورود به سرور خود وارد شوید @@ -517,7 +546,7 @@ هدایت به... - ارسال %1$dفابل به گفتگوی انتخاب شده؟ n/n/ فایل‌ها بدون تغییر و در اندازه اصلی ارسال شده و تصاویر و فیلم ها فشرده نمی‌شوند. + ارسال %1$dفایل به گفتگوی انتخاب شده؟ n/n/ فایل‌ها بدون تغییر و در اندازه اصلی ارسال شده و تصاویر و فیلم ها فشرده نمی‌شوند. ارسال %1$dفایل به %2$d گفتگو؟n/n/ فایل‌(ها) بدون تغییر ارسال می‌شوند به این معنا که تصاویر و فیلم‌ها فشرده نمی‌شوند. ارسال این متن به %1$d گفتگو؟n/n/ \"%2$s\" اشتراک گذاری به دلیل نبود مجوز‌ها متوقف شد. @@ -604,6 +633,7 @@ اگر این گزینه را غیر فعال می‌کنید از اینکه سرور شما و حساب‌هایتان هم بر این اساس تنظیم شده باشند.\n\n در غیر این صورت ممکن است هیچ چیز کار نکند. پوشه ارسال شده‌ها را نگاه کن ارسال رونوشت به خودم + درصورت استفاده از این حساب در چند دستگاه مورد نیاز است. انتقال خودکار به پوشه دلتاچت گفتگوها برای جلوگیری از پر شدن صندوق ورودی جابجا شده‌اند فقط پوشه دلتاچت را بررسی کن @@ -729,9 +759,9 @@ شما گفتگوی «پیام‌های ذخیره شده» را پاک کردید. ℹ️ برای استفاده مجدد از «پیام‌های ذخیره شده» کافی است یک گفتگوی جدید با خودتان درست کنید. - هشدار⚠️، میزان حجم در دسترس ارایه‌دهنده شما در حال تمام شدن است. %1$s از %% استفاده شده است. -اگر ۱۰۰%% استفاده شود ممکن است دیگر نتوانید پیامی دریافت کنید. -👉 لطفا پیام‌های قدیمی در رایانامه خود را از طریق نسخه وب رایانامه پاک کنید. همچنین می‌توانید گزینه پاک کردن پیام‌های قدیمی در دلتا چت را فعال نمایید. هروقت خواستید می‌توانید حجم در دسترس را از تنظیمات/اتصالات بررسی کنید. + هشدار⚠️، میزان فضای در دسترس ارایه‌دهنده شما در حال تمام شدن است. %1$s از %% استفاده شده است. +اگر فضای ذخیره کاملا پر شده باشد دیگر امکان دریافت پیام را نخواهید داشت. +👉 لطفا پیام‌های قدیمی در رایانامه خود را از طریق نسخه وب رایانامه پاک کنید. همچنین می‌توانید گزینه پاک کردن پیام‌های قدیمی در دلتا چت را فعال نمایید. هروقت خواستید می‌توانید فضای در دسترس را از تنظیمات/اتصالات بررسی کنید. هشدار⚠️ به نظر می‌رسد زمان و تاریخ دستگاه شما دقیق نیست(%1$s). ساعت دستگاه خود را تنظیم کنید ⏰🔧 تا پیام‌ها به درستی دریافت شوند. @@ -774,7 +804,8 @@ برای ارتباط با %1$s این را اسکن کنید. اتصال اینترنت نیست. نمیتوان نصب کد کیوآر را انجام داد. ایجاد ایمیل جدید روی \"%1$s\" و ورود در آن‌جا؟ - ایجاد آدرس ایمیل جدید روی \"%1$s\" وارد شدن به آن؟/n/n حساب فعلی شما پاک نمی‌شود. از بخش \"تغییر حساب کاربری\" برای جابجایی بین حساب‌ها استفاده کنید + نشانی جدید رایانامه روی «%1$s» ایجاد شده و به آن وارد شود؟ + حساب فعلی شما پاک نمی‌شود. از بخش «تغییر حساب کاربری» برای جابجایی بین حساب‌ها استفاده کنید ورود موفق—آدرس ایمیل شما %1$sاست.\n\n اگر دوست دارید می‌توانید اکنون یک اسم وارد کرده و تصویر نمایه‌ای که هنگام نوشتن برای دیگران نشان داده می‌شود را انتخاب نمایید. این کد کیوآر اسکن شده را نمی‌توان برای راه اندازی اکانت جدید استفاده کرد. کد کیوآر اسکن شده برای راه اندازی یک اکانت جدید است. می‌توانید در حال تنظیم یک دلتاچت تازه نصب شده کیوآر را اسکن کنید. @@ -906,6 +937,17 @@ GNU GPL ورژن ۳ نمایش پنجره پشتیبانی از قابلیت SOCKS5 هنوز آزمایشی است. لطفا در صورت استفاده،‌خطرات را بپذیرید. اگر یک آدرس را در بخش رایانامه وارد کنید همچنان DNS lookup  رخ می‌دهد که ممکن است از طریق SOCKS5 صورت نگیرد. + + کلیدهای میانبر + جابجا شدن میان گفتگوها + حرکت کردن میان پیام‌ها + + تمرکز نشانگر بر بخش جستجو + + تمرکز نشانگر بر بخش پیام + تازه کردن اجباری شبکه + افزودن خط جدید + وضعیت ارسال: خطا قفل رمزگذاری @@ -918,9 +960,33 @@ GNU GPL ورژن ۳ نمایش پس زمینه پیام‌های ناپدید شونده فعال شدند + + توقف اشتراک موقعیت مکانی + پس از ضبط کردن برای ارسال دوبار ضربه بزنید. برای حذف و رد ضبط کردن با دو انگشت خود بکشید. + برای مشاهده اطلاعات اتصال دوبار ضربه بزنید + بدون اتصال اینترنت. ورود ناموفق + حساب تنظیم نشده است + امکان پخش کردن فایل صوتی وجود ندارد + + برای عکس یا فیلم گرفتن یا اسکن کردن کد کیو آر، وارد تنظیمات سیستم شده و دسترسی به دوربین را فعال کنید. + تنظیمات را باز کنید + + وارد کردن مخاطبین + برای شروع گفتگو با مخاطبین دستگاه خود، تنظیمات را باز کرده و دسترسی به مخاطبین را روشن کنید. + + در دلتاچت غیر فعال شده است. + در تنظیمات سیستم غیر فعال شده است. + گزینه «Background App Refresh» در تنظیمات سیستم غیر فعال شده است. + + دارای تاخیر + به صورت متوسط هر%1$d دقیقه + به صورت متوسط هر %1$d ساعت + بررسی شده در %1$s دلتاچت برای گرفتن و ارسال عکس و فیلم و برای اسکن کردن کیوآر کد از دوربین شما استفاده می‌کند. دلتاچت از مخاطبین شما برای نمایش لیست ایمیل‌هایی که می‌توانید برایشان پیام ارسال کنید استفاده می‌کند. دلتاچت سرور ندارد مخاطبین شما به جایی ارسال نمی‌شوند. + دلتا چت برای اشتراک موقعیت مکانی شما در زمانی که اشتراک موقعیت مکانی را فعال کرده باشید به مجوز نیاز دارد. + دلتا چت برای اشتراک موقعیت مکانی شما در زمانی که اشتراک موقعیت مکانی را فعال کرده‌ باشید به مجوز نیاز دارد. دلتاچت از میکروفون برای ذخیره و ارسال پیام صوتی یا فیلم دارای صدا استفاده می‌کند. دلتاچت به شما اجازه می دهد تصویر موردنظر برای ارسال را انتخاب کنید. دلتاچت میخواهد تصاویر را در آلبوم شما ذخیره کند. @@ -937,4 +1003,10 @@ GNU GPL ورژن ۳ قبلا اجازه دسترسی به فعالیت در پس زمینه را به دلتاچت داده‌اید. \n\n اگر پیام‌ها هنوز هم در شرایط پس زمینه نمی‌آمد لطفا تنظیمات سیستم را نیز بررسی نمایید. - + + سریع‌تر و پایدارتر + +در نسخه‌های ۱.۳۰ بر سرعت، قابلیت اطمینان و بر طرف کردن ده‌ها اشکال تمرکز کرده‌ایم. اگر می‌خواهید ببینید یکی از مشکلات شما رفع شده است به شرح تغییرات مراجعه کنید: +https://get.delta.chat/#changelogs 🚀 + + diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index bca4f113d..08ad3700d 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -446,6 +446,10 @@ Tässä keskustelussa jaettu webxdc-sisältö näkyy tässä. Median esikatselu Lähetä viesti + + %1$s vaihtui osoitteesta %2$s osoitteeksi %3$s + + Vaihdoit sähköpostiosoitteesi osoitteesta %1$s osoitteeksi %2$s.\n\nJos lähetät viestin vahvistettuun ryhmään, ryhmän jäsenet saavat automaattisesti uuden osoitteesi.\n\nOn suositeltavaa asettaa vanha tilisi välittämään kaikki viestit uuteen osoitteeseesi. Muuten et välttämättä saa viestejä niiltä yhteystiedoiltasi, joilla ei ole uutta osoitettasi. diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index dc67cb924..678d1f054 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -54,7 +54,7 @@ Activer Charger les images distantes - Les images distantes peuvent être utilisées pour vous pister. Ce paramètre autorise également le chargement de polices ou d\'autres contenus. S\'il est désactivé, vous pouvez tout de même voir les images ancrées ou en cache. Souhaitez-vous charger les images distantes ? + Les images distantes peuvent être utilisées pour vous pister. Ce paramètre autorise également le chargement de police d\'écriture ou d\'autres contenus. S\'il est désactivé, vous pouvez tout de même voir les images ancrées ou en cache. Souhaitez-vous charger les images distantes ? Toujours Une fois Afficher le mot de passe @@ -258,7 +258,7 @@ Partager la position avec tous les membres du groupe Messages de l\'appareil Messages générés localement - Les messages dans cette discussion sont générés localement par votre application Delta Chat. Ses créateurs l\'utilise pour informer des mises à jour et problèmes rencontrés lors de l\'utilisation. + Les messages dans cette discussion sont générés localement pour informer à propos des mises à jour et des problèmes rencontrés lors de l\'utilisation. Bienvenue sur Delta Chat ! - Delta Chat ressemble à d\'autres applications de messagerie populaires, mais n\'implique pas un contrôle centralisé, le traçage ou la revente de vos données, de vos amis, collègues ou famille à de grandes organisations. Techniquement, Delta Chat est une application de messagerie électronique avec une interface de tchate moderne. Un courriel retoiletté si vous voulez 👻\n\nUtilisez Delta Chat avec n\'importe qui parmi des milliards de personnes : utilisez simplement leur adresse électronique. Les destinataires n\'ont pas besoin d\'installer Delta Chat, de visiter des sites web ou de s\'inscrire où que ce soit - cependant, bien sûr, s\'ils le souhaitent, vous pouvez les diriger vers 👉 https://get.delta.chat Mettre à jour le contact @@ -296,14 +296,14 @@ Inviter %1$s à une discussion vidéo ? Cela requiert une application compatible ou un navigateur compatible des deux côtés. %1$s est invité à une discussion vidéo. - Vous êtes invité à une discussion vidéo. + Vous avez envoyez une invitation de discussion de vidéo. Appuyez pour rejoindre Appuyez pour ouvrir Instance de discussion vidéo Votre instance de discussion vidéo Exemples : https://meet.jit.si/$ROOM ou basicwebrtc:https://your-server - Si vous avez activé les discussions vidéo, vous pouvez démarrer une conversation vidéo dans chacune de vos discussions. Il faut que chaque participant-e ait une application ou un navigateur compatibles pour pouvoir utiliser cette option. - Utiliser « %1$s » pour inviter les autres à des discussions vidéos ?\n\nUne fois configuré, vous pouvez démarrer une discussion vidéo depuis chaque discussion privée. Ceci va remplacer la précédente configuration pour les discussions vidéos, s\'il y en a une. + Lorsque activé, vous pouvez démarrer une discussion de vidéo dans chacune de vos conversations. Nécessite une application ou un navigateur compatible des deux côtés. + Utiliser « %1$s » pour inviter les autres à des discussions de vidéo ?\n\nUne fois configuré, vous pouvez démarrer une discussion vidéo de chaque discussion privée. Ceci va remplacer la précédente configuration pour les discussions vidéos, s\'il y en a une. Invitation de discussion vidéo Vous êtes invité à une discussion vidéo, cliquez sur %1$s pour la rejoindre. @@ -330,7 +330,7 @@ Exporter une pièce jointe ? L\'exportation des pièces jointes permettra à toute autre application sur votre appareil d\'y accéder. Continuer ? Bloquer ce contact ? Vous ne recevrez plus ses messages. Débloquer ce contact ? Vous recevrez à nouveau ses messages. - Effacer ces contacts? Cela supprimera définitivement les contacts sélectionnés.\n\nLes contacts avec des conversations en cours et ceux venant du carnet d\'adresses du système ne peuvent pas être définitivement effacés. + Effacer ces contacts?\n\nLes contacts avec des conversations en cours et ceux venant du carnet d\'adresses du système ne peuvent pas être définitivement effacés. Supprimer le contact %1$s ?\n\nLes contacts dans les discussions en cours et les contacts du carnet d\'adresses du système ne peuvent pas être supprimés définitivement. Impossible d\'effacer des contacts ayant une discussion active. Discuter avec %1$s ? @@ -393,7 +393,7 @@ Réessayer d\'envoyer le message Vous ne pouvez pas écrire car vous ne faites pas partie de ce groupe. Pour le rejoindre, demandez à un membre. - Cette discussion contient des messages générés localement. Par conséquent, vous ne pouvez pas écrire le moindre message. + Cette discussion contient des messages générés localement. Par conséquent, l\'écriture est désactivée. Envoyer des messages dans des listes de diffusion n\'est pas encore possible Impossible d\'afficher ce type de fichier : %s Échec du chargement de la pièce jointe @@ -427,7 +427,7 @@ Voulez-vous vraiment visiter %1$s ? - Vous avez cliqué sur un lien qui pourait avoir des caractères mal représentés du à l\'utilisation de caractères similaires provenant d\'alphabets différents. Suivre le lien marqué comme %1$s aménera à %2$s qui est le lien avec des caractères latins normaux. Si vous ne vous attendez pas à de tel caractères ce lien est potentiellement dangereux + Ce lien pourait avoir des caractères mal représentés dû à l\'utilisation de caractères similaires des alphabets différents. Suivre le lien marqué %1$s aménera à %2$s qui est normale avec des caractères non-latins. Si vous ne vous attendez pas à de tel caractères ce lien est potentiellement dangereux @@ -461,6 +461,10 @@ Les contenus Webxdc partagés dans cette discussion seront affichés ici. Prévisualiser le fichier multimédia Envoyer message + + %1$s a changé son adresse de %2$s à %3$s + + Vous avez changé votre adresse e-mail de %1$s à %2$s.\n\nSi vous envoyez maintenant un message à un groupe vérifié, les contacts de ce groupe remplaceront automatiquement l\'ancienne adresse par la nouvelle.\n\nIl est fortement conseillé de configurer votre ancien fournisseur d\'e-mail pour qu\'il transfère tous les e-mails à votre nouvelle adresse. Sinon, vous risquez de manquer des messages de contacts qui n\'ont pas encore reçu votre nouvelle adresse. @@ -547,8 +551,8 @@ Transférer à … - Envoyer %1$d fichiers à la discussion sélectionnée ?\n\nLes fichiers sont envoyés sans modification, à leur taille originale, ie. les images et les vidéos ne sont pas réencodées. - Envoyer %1$d fichier(s) à %2$d discussions ?\n\nLes fichiers sont envoyés sans modification, à leur taille originale, ie. les images et les vidéos ne sont pas réencodées. + Envoyer %1$d fichiers à la discussion sélectionnée ?\n\nLes fichiers sont envoyés sans modification, à leur taille originale (ie. les images et les vidéos ne sont pas réencodées). + Envoyer %1$d fichier(s) à %2$d discussions ?\n\nLes fichiers sont envoyés sans modification, à leur taille originale (ie. les images et les vidéos ne sont pas réencodées). Envoyer ce texte à %1$d discussions ?\n\n« %2$s » Partage annulé en raison de permissions manquantes. diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index b273cbb5b..979ec4318 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -446,6 +446,10 @@ Contido Webxdc compartido neste chat será mostrado aquí. Vista previa dos medios Enviar mensaxe + + %1$s cambiou o seu enderezo de %2$s a %3$s + + Cambiaches o teu enderezo de email de %1$s a %2$s.\n\nSe envías unha mensaxe a un grupo verificado os contactos cambiarán automáticamente o enderezo antigo polo novo.\n\nÉ moi recomendable que configures o email antigo para que che reenvíe todo o correo ao novo enderezo. De non facelo poderías perder mensaxes de contactos que aínda non coñezan o teu novo enderezo. diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index fc8e9fc9e..a23f52750 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -331,7 +331,6 @@ Dokumen, musik dan berkas yang dibagikan di obrolan ini akan ditampilkan disini. Tampilan media Kirim pesan - Percakapan dengan pemirsa terluas di dunia. Gratis dan independen. Masuk Masuk ke server Anda diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 752d1584b..14d95833e 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -461,6 +461,10 @@ I contenuti Webxdc condivisi in questa chat saranno visualizzati qui. Anteprima dei Media Invia Messaggio + + %1$s hanno cambiato il loro indirizzo da %2$s a %3$s + + Hai cambiato il tuo indirizzo email da %1$s a %2$s.\n\nSe ora invii un messaggio a un gruppo verificato, i contatti sostituiranno automaticamente il vecchio indirizzo con il tuo nuovo.\n\nSi consiglia vivamente di impostare il tuo vecchio provider email per inoltrare tutte le email al tuo nuovo indirizzo email. Altrimenti potresti perdere i messaggi di contatti che non hanno ancora ricevuto il tuo nuovo indirizzo. diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 080a0578d..e84d68bf9 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -358,7 +358,6 @@ このチャットで共有されたドキュメントや音楽などがここに表示されます。 メディアのプレビュー 送る - 接続性 未接続 diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index a5621ee83..da5fb9f63 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -401,7 +401,6 @@ ឯកសារ និងសំលេងដែលបានចែករំលែកនៅក្នុងការសន្ទនានេះ បង្ហាញនៅទីនេះ។ ការមើលប្រព័ន្ធផ្សព្វផ្សាយជាមុន ផ្ញើ​សារ - សារចូល diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 6aa2b91d2..db59101c4 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -381,7 +381,6 @@ Čia bus rodomi šiame pokalbyje bendrinami dokumentai, muzika ir kiti failai. Medijos peržiūra Siųsti žinutę - Gaunamosios žinutės diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index d79386ac9..10d42af78 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -446,6 +446,10 @@ De in dit gesprek gedeelde webxdc-inhoud verschijnt hier. Mediavoorbeeld Bericht versturen + + %1$s heeft zijn/haar adres veranderd van %2$s naar %3$s + + Je hebt je e-mailadres veranderd van %1$s naar %2$s.\n\nAls je een bericht stuurt aan een goedgekeurde groep, dan zien contactpersonen in de groep je nieuwe adres.\n\nWel raden we aan om bij je oude provider in te stellen dat je e-mails wilt doorsturen naar je nieuwe adres, anders missen sommige contactpersonen mogelijk je berichten. diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index fdd2750e1..da54fd126 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -476,6 +476,10 @@ Tutaj będzie wyświetlona treść Webxdc udostępniona na tym czacie. Podgląd multimediów Wyślij wiadomość + + %1$s zmieniła swój adres z %2$s na %3$s + + Zmieniłeś swój adres e-mail z %1$s na %2$s.\n\nJeśli teraz wyślesz wiadomość do zweryfikowanej grupy, kontakty tam zawarte automatycznie zastąpią stary adres Twoim nowym.\n\nBardzo zalecane jest, aby ustawić swojego starego dostawcę emaila tak, aby przekazywał wszystkie emaile na Twój nowy adres email. W przeciwnym razie możesz przegapić wiadomości od kontaktów, które jeszcze nie dostały Twojego nowego adresu. @@ -857,7 +861,7 @@ Marker Podkreślacz Przytnij - Odwróć + Przełącz Obróć diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index fe6e8e0f7..5eccd42c2 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -461,6 +461,10 @@ O conteúdo Webxdc compartilhado neste chat será exibido aqui. Pré-visualização. Enviar mensagem + + %1$s mudou seu endereço de %2$s para %3$s + + Você mudou seu endereço de e-mail de %1$s para %2$s.\n\nSe você agora enviar uma mensagem para um grupo verificado, os contatos lá substituirão automaticamente o antigo por seu novo endereço.\n\nÉ altamente recomendável configurar seu antigo provedor de e-mail para encaminhar todos os e-mails para seu novo endereço de e-mail. Caso contrário, você pode perder mensagens de contatos que ainda não receberam seu novo endereço. @@ -832,7 +836,7 @@ Continuar O Delta Chat precisa acessar sua câmera para tirar fotos e gravar vídeos, mas o acesso foi negado. Por favor, habilite a câmera nas configurações de permissões do aplicativo. O Delta Chat precisa acessar seu microfone para que você possa enviar mensagens de voz, mas o acesso foi negado. Por favor, habilite o microfone nas configurações de permissões do aplicativo. - O Delta Chat precisa acessar seu armazenamento para que você possa enviar e salvar fotos, vídeos, músicas e outras mídias, mas o acesso foi negado. Por favor, habilite o seu acesso nas configurações de permissões do aplicativo. + Para receber o enviar arquivos, vai nas configurações do aplicativo, escolhe \"Permissões\", e ativar \"Armazenamento\". O Delta Chat precisa acessar sua localização para que você possa enviá-la, mas o acesso foi negado. Por favor, habilite o seu acesso nas configurações de permissões do aplicativo. @@ -951,8 +955,8 @@ Delta Chat usa sua câmera para tirar e enviar fotos e vídeos e para escanear códigos QR. O Delta Chat usa seus contatos para mostrar uma lista de endereços de e-mail para os quais você pode escrever. O Delta Chat não tem servidor, seus contatos não são enviados a lugar nenhum. - O Delta Chat precisa da permissão de localização para compartilhar sua localização durante o período de tempo em que você ativou o compartilhamento de localização. - O Delta Chat precisa de permissão de localização para compartilhar sua localização durante o período em que o compartilhamento de localização estiver ativado. + O Delta Chat precisa da permissão para compartilhar sua localização durante o período de tempo em que você ativou o compartilhamento de localização. + O Delta Chat precisa de permissão para compartilhar sua localização durante o período em que o compartilhamento de localização estiver ativado. O Delta Chat usa seu microfone para gravar e enviar mensagens de voz e vídeos com som. O Delta Chat permite que você escolha fotos de sua biblioteca para enviar. O Delta Chat deseja salvar imagens em sua biblioteca de fotos. diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 4fe1d466d..2c0e7d283 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -476,6 +476,10 @@ Содержимое Webxdc-приложения, размещённые в этом чате, будут отображаться здесь. Предпросмотр медиафайлов Отправить сообщение + + %1$s изменила свой адрес с %2$s на %3$s + + Вы изменили свой адрес электронной почты с %1$s на %2$s.\n\nЕсли теперь вы отправите сообщение в проверенную группу, контакты там автоматически заменят старый адрес на ваш новый.\n\nНастоятельно рекомендуется настроить вашего старого поставщика услуг электронной почты на пересылку всех писем на ваш новый адрес электронной почты. В противном случае вы можете пропустить сообщения контактов, которые еще не получили ваш новый адрес. diff --git a/res/values-sc/strings.xml b/res/values-sc/strings.xml index 41ca197e9..21dafe967 100644 --- a/res/values-sc/strings.xml +++ b/res/values-sc/strings.xml @@ -321,7 +321,6 @@ Sos documentos editàbiles, cussos musicales e totu sas àteras castas de documentos cumpartzidos in custa tzarrada ant a èssere ammustrados inoghe. Anteprima de su documentu multimediale Imbia messàgiu - S\'aplicatzione de messagìstica cun prus impreadores in su mundu. Lìbera e indipendente. Intra Intra in su servidore tuo diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 38fd0af64..9c4bdd211 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -461,7 +461,6 @@ Tu sa zobrazia dokumenty, hudba a ďalšie súbory zdieľané v tejto konverzácii. Ukážka pre médiá Poslať správu - Prichádzajúce Správy diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 4ff30a519..201dec9dd 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -444,6 +444,10 @@ Lëndë Webxdc e dhënë në këtë fjalosje do të shfaqet këtu. Paraparje media Dërgo mesazh + + %1$s ndryshoi adresën e vet nga %2$s në %3$s + + Ndryshuat adresën tuaj nga %1$s në %2$s.\n\nNëse dërgoni tani një mesazh te një grup i verifikuar, kontaktet atje do të zëvendësojnë automatikisht adresën tuaj të vjetër me të renë.\n\nËshtë tejet e këshillueshme të ujdisni shërbimin tuaj të vjetër të email-it të përcjellë krejt email-et te adresa juaj e re email. Përndryshme, mund të humbni mesazhe të kontakteve që s’e kanë marrë ende adresën tuaj të re. diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 70f9b6eef..44dc9f9ec 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -375,7 +375,6 @@ Dokument, musik och andra filer som delas i denna chatt kommer att visas här. Förhandsvisning av media Skicka meddelande - Chattappen med den bredaste publiken i världen. Fri och oberoende. Logga in Logga in på din server diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 181ca5b59..73f5bb24e 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -439,13 +439,17 @@ Bağlantılar Harita Bu sohbette paylaşılan görseller ve videolar burada görünecek. - Bu sohbette paylaşılan belgeler, müzik ve diğer dosyalar burada görünecek. + Bu sohbette paylaşılan belgeler ve diğer dosyalar burada görünecek. Bu sohbette paylaşılan görseller burada görünecek. Bu sohbette paylaşılan videolar burada görünecek. Bu sohbette paylaşılan ses dosyaları ve sesli iletiler burada görünecek. Bu sohbette paylaşılan Webxdc içeriği burada görünecek. Ortam Önizlemesi İleti Gönder + + %1$s, %2$s adresini %3$s olarak değiştirdi + + %1$s e-posta adresinizi %2$s olarak değiştirdiniz.\n\nŞimdi bir doğrulanan gruba ileti gönderirseniz, oradaki kişiler yeni adresinizle eskisini otomatik olarak değiştirecek.\n\nTüm e-postaları yeni e-posta adresinize iletmek için eski e-posta sağlayıcınızı ayarlamanız önemle önerilir. Yoksa henüz yeni adresinizi almamış olan kişilerin iletilerini kaçırabilirsiniz. @@ -479,7 +483,7 @@ Oturum Aç E-Posta Hesabınıza Oturum Açın Varolan bir e-posta hesabıyla oturum açın - Bilinen e-posta sağlayıcıları için ek ayarlar otomatik olarak ayarlanır. Bazen IMAP\'nin web ayarlarından etkinleştirilmesi gerekir. Yardım için e-posta sağlayıcınıza ya da arkadaşlarınıza danışın. + Bilinen e-posta sağlayıcıları için ek ayarlar otomatik olarak ayarlanır. Bazen IMAP\'in web ayarlarından etkinleştirilmesi gerekir. Yardım için e-posta sağlayıcınıza ya da arkadaşlarınıza danışın. Delta Chat sunucuları yoktur; verileriniz aygıtınızda kalır. Gelen Kutusu IMAP Oturum Açma Adı @@ -517,7 +521,7 @@ Geçersiz sertifikaları kabul et Kullanılan ayarlar: - Hesap Değiştir + Hesabı Değiştir Hesap Ekle Hesabı Sil Hesap verilerinizi silmek istediğinizden emin misiniz? @@ -546,7 +550,7 @@ Engellenen Kişiler Engellenen kişiler burada görünecek. Parola ve Hesap - Diğer kullanıcılarla iletişim kurulurken; profil görseliniz, adınız ve imzanız iletilerinizle birlikte gönderilecek. + Profil görseliniz, adınız ve imzanız diğer kullanıcılarla iletişim kurulurken iletilerinizle birlikte gönderilecek. Adınız İmza Metni @@ -620,7 +624,7 @@ DeltaChat Klasörüne Otomatik Olarak Taşı Sohbet görüşmeleri, Gelen Kutusu\'ndaki dağınıklığı önlemek için taşınır Yalnızca DeltaChat Klasöründen Getir - Diğer klasörleri yoksay. Sunucunuzun sohbet iletilerini DeltaChat klasörüne taşımasını gerektirir. + Diğer klasörleri yok sayar. Sunucunuzun sohbet iletilerini DeltaChat klasörüne taşımasını gerektirir. Klasik E-Postaları Göster Hayır, yalnızca sohbetler Kabul edilen kişiler için @@ -706,8 +710,8 @@ - \"%1$s\" grup adı \"%2$s\" olarak değişti. - Grup görseli değişti. + \"%1$s\" grup adı \"%2$s\" olarak değiştirildi. + Grup görseli değiştirildi. Grup görseli silindi. %1$s üyesi eklendi. %1$s üyesi kaldırıldı. @@ -781,7 +785,7 @@ %1$s ile sohbet etmek için bunu tarayın Internet bağlantısı yok; QR kodu ayarlaması gerçekleştirilemiyor. \"%1$s\" üzerinde yeni e-posta adresi oluşturulsun ve oturum açılsın mı? - \"%1$s\" üzerinde yeni e-posta adresi oluşturulsun ve oturum açılsın mı?\n\nVarolan hesabınız silinmeyecek. Hesaplarınız arasında geçiş yapmak için \"Hesap değiştir\" öğesini kullanın. + \"%1$s\" üzerinde yeni e-posta adresi oluşturulsun ve oturum açılsın mı?\n\nVarolan hesabınız silinmeyecek. Hesaplarınız arasında geçiş yapmak için \"Hesabı Değiştir\" öğesini kullanın. Oturum açma başarılı—e-posta adresiniz %1$s\n\nİsterseniz şimdi yazdığınız insanlara görüntülenecek bir ad ve bir profil görseli girebilirsiniz. Taranan QR kodu, yeni bir hesap ayarlamak için kullanılamıyor. Taranan QR kodu, yeni bir hesap ayarlamak içindir. QR kodunu yeni bir Delta Chat kurulumu ayarlanırken tarayabilirsiniz. @@ -792,7 +796,7 @@ %1$s doğrulandı. %1$s doğrulanamıyor. - %1$s için ayarlama değişti. + %1$s için ayarlama değiştirildi. Doğrulanan gruplar (deneysel), etkin saldırılar karşısında güvenlik sağlar. Üyeler, diğer üyeler tarafından ikinci bir etkenle doğrulanır ve iletiler her zaman uçtan uca şifrelenir. QR URL\'si panoya kopyalandı İletiyi göndermek için sohbet seçin @@ -945,8 +949,8 @@ Arka Plan Bildirimleri - Sunucunuza bir arka plan bağlantısı kullanır ve pil iyileştirmelerinin yoksayılmasını gerektirir. - E-posta sunucunuza bağlantıyı sürdürmek ve arka planda iletileri almak için sonraki adımda pil iyileştirmelerini yoksayın.\n\nDelta Chat, kaynakların en azını kullanır ve pilinizi boşaltmamaya özen gösterir. + Sunucunuza bir arka plan bağlantısı kullanır ve pil iyileştirmelerinin yok sayılmasını gerektirir. + E-posta sunucunuza bağlantıyı sürdürmek ve arka planda iletileri almak için sonraki adımda pil iyileştirmelerini yok sayın.\n\nDelta Chat, kaynakların en azını kullanır ve pilinizi boşaltmamaya özen gösterir. Güvenilir Arka Plan Bağlantısı Kalıcı bir bildirim gerektirir diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index bb02953d2..717b81bd4 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -54,7 +54,7 @@ Активувати Завантажувати віддалені зображення - Віддалені зображення можна використовувати для слідкування за вами.\n\nЦе налаштування також дозволяє завантажувати шрифти та інший вміст. Навіть якщо воно вимкнене, ви можете побачити вбудовані або кешовані зображення.\n\nЗавантажувати віддалені зображення? + Віддалені зображення можна використовувати для слідкування за вами.\n\nЦе налаштування також дозволяє завантажувати шрифти та інший вміст. Якщо воно вимкнене, ви можете побачити вбудовані або кешовані зображення.\n\nЗавантажувати віддалені зображення? Завжди Один раз Показати пароль @@ -147,7 +147,7 @@ Зображення Відповідь - Gif + GIF Стікер Зображення @@ -266,7 +266,7 @@ Ділитися геоданими з усіма членами групи Повідомлення пристрою Локально згенеровані повідомлення - Повідомлення у цьому чаті згенеровані локально вашим додатком Delta Chat. Його розробники використовують його для інформування про оновлення додатку та проблеми при використанні. + Повідомлення у цьому чаті згенеровані на вашому пристрої для інформування про оновлення та проблеми при використанні. Вітаємо у Delta Chat! - Delta Chat дуже схожий на інші популярні програми обміну повідомленнями, але не передбачає централізованого контролю, відстеження або продажу вас, друзів, колег чи родини великим організаціям.\n\nТехнічно, Delta Chat - це програма електронної пошти з сучасним інтерфейсом чату. Електронна пошта у новому вбранні, якщо вам забажається 👻\n\nВикористовуйте Delta Chat з будь ким із мільярдів людей: просто використовуйте їхню електронну адресу. Одержувачам не потрібно встановлювати Delta Chat, відвідувати веб-сайти або десь реєструватись - однак, звичайно, ви можете направити їх на 👉 https://get.delta.chat Редагувати контакт @@ -305,13 +305,13 @@ Запросити %1$s у відео чат? Це потребує сумісного додатку або сумісного браузера на обох кінцях. %1$s запрошено у відео чат. - Вас запрошено у відео чат. + Ви надіслали запрошення у відео чат. Торкніться щоб приєднатися Торкніться щоб відкрити Відео чат Ваш відео чат Приклади: https://meet.jit.si/$ROOM або basicwebrtc:https://your-server - Якщо визначено екземпляр відеочату, ви можете розпочати відеочат із кожного індивідуального чату. Для відеочату потрібен сумісний додаток або сумісний браузер з обох кінців. + Якщо ввімкнено, ви можете почати відеочат із кожного чату. Потрібен сумісний додаток або браузер на обох сторонах. Використовуйте \"%1$s\" аби запросити інших у відеочат?\n\nПісля встановлення ви можете розпочати відеочат із кожного індивідуального чату. Це замінить попереднє налаштування для відеочату, якщо воно є. Запрошення до відео чату Вас запрошено у відео-чат, клікніть %1$s аби приєднатися. @@ -339,10 +339,10 @@ Переслати повідомлення %1$s? Пересилати повідомлення у %1$d? - Експортувати вкладення? Експорт вкладень дозволить будь-якому іншому додатку на Вашому пристрої отримати до них доступ.\n\nПродовжити? + Якщо експортувати вкладені файли, інші програми на вашому пристрої отримають до них доступ.\n\nПродовжити? Заблокувати цей контакт? Ви більше не будете отримувати від нього повідомлення. Розблокувати цей контакт? Ви знову зможете отримувати від нього повідомлення. - Видалити контакти? Ця дія назавжди видалить вибрані контакти.\n\nКонтакти з діючих чатів та з адресної книги системи не можна видалити назавжди. + Видалити контакти?\n\nКонтакти з поточними чатами або з системної адресної книги неможливо видалити остаточно. Видалити %1$s?\n\nКонтакти з діючих чатів та з адресної книги системи не можна видалити назавжди. Неможливо видалити контакти, з якими є активні чати. Створити чат з %1$s? @@ -431,9 +431,9 @@ Надіслати точку інтересу - Тут відображатимуться системні повідомлення цього чату + Тут відображатимуться системні повідомлення для цього чату Журнал аудиту чату для %1$s - На цьому екрані відображаються лише системні та інформаційні повідомлення. Корисно для пошуку останніх дій чату без прокрутки багатьох звичайних повідомлень. + На цьому екрані відображаються лише системні та інформаційні повідомлення. Корисно для пошуку останніх дій чату без прокрутки багатьох звичайних повідомлень. @@ -442,7 +442,7 @@ Ви впевнені, що хочете відвідати %1$s? - Ви перейшли за посиланням, яке може спотворювати символи, використовуючи подібні до них символи з різних алфавітів. Перехід за посиланням %1$s приведе до %2$s, що є нормальним для нелатинських символів. Якщо ви не очікували таких символів, це посилання може бути шкідливим + Це посилання може спотворювати символи, використовуючи подібні до них символи з різних алфавітів. Перехід за посиланням %1$s приведе до %2$s, що є нормальним для нелатинських символів. Якщо ви не очікували таких символів, це посилання може бути шкідливим @@ -469,13 +469,17 @@ Посилання Карта Зображення та відео, якими поділилися у цьому чаті, будуть відображатися тут. - Документи, музика та інші файли, якими поділилися у цьому чаті, будуть відображатися тут. + Документи та інші файли, якими поділилися у цьому чаті, будуть відображатися тут. Зображення, якими поділилися у цьому чаті, будуть відображатися тут. Відео, якими поділилися у цьому чаті, будуть відображатися тут. - Аудіозаписи, якими поділилися у цьому чаті, будуть відображатися тут. + Аудіозаписи та голосові повідомлення, якими поділилися у цьому чаті, будуть відображатися тут. Webxdc-контент, яким поділилися у цьому чаті, буде відображатися тут. Попередній перегляд медіа Надіслати повідомлення + + %1$s змінили їх адресу з %2$s на %3$s + + Ви змінили вашу електронну адресу з %1$s на %2$s.\n\nЯкщо зараз ви відправите повідомлення у підтверджену групу, контакти в ній автоматично замінять вашу стару адресу на нову.\n\nНастійно рекомендується налаштувати старий аккаунт електронної пошти на пересилання всіх електронних листів на вашу нову електронну адресу. Інакше ви можете пропустити повідомлення контактів, які ще не отримали вашу нову адресу. @@ -507,7 +511,7 @@ Сканувати код запрошення Мессенджер з найширшою аудиторією у світі. Безкоштовний і незалежний. Увійти - Увійти на свій сервер + Увійдіть до свого облікового запису електронної пошти Увійти з наявним обліковим записом електронної пошти Для відомих провайдерів електронної пошти додаткові налаштування встановлюються автоматично. Іноді IMAP потрібен дозвіл в веб-інтерфейсі. Проконсультуйтеся з Вашим провайдером електронної пошти або друзями для отримання допомоги. У Delta Chat немає серверів, Ваші дані залишаються на Вашому пристрої! @@ -539,7 +543,7 @@ Вкажіть дійсний сервер / IP-адресу Вкажіть дійсний порт (1–65535) Вкажіть вірні адресу електронної пошти та пароль - Імпортувати бекап + Відновити з резервної копії Знайдена резервна копія «%1$s».\n\nВідновити з неї всі дані і параметри? Резервних копій не знайдено.\n\nПомістить резервну копію у папку «%1$s» і спробуйте знову запустити відновлення. Для установлення без відновлення параметрів натисніть «Почати спілкування». @@ -562,8 +566,8 @@ Переслати... - Надіслати %1$d файлів у обраний чат?\n\nФайли надсилаються незмінними в оригінальному розмірі, тобто зображення та відео не перекодовуються. - Надіслати %1$d файлів у %2$d чати?\n\nФайли надсилаються незмінними в оригінальному розмірі, тобто зображення та відео не перекодовуються. + Надіслати %1$d файлів у обраний чат?\n\nФайли надсилаються незмінними в оригінальному розмірі (тобто зображення та відео не перекодовуються). + Надіслати %1$d файлів у %2$d чати?\n\nФайли надсилаються незмінними в оригінальному розмірі (тобто зображення та відео не перекодовуються). Надіслати цей текст у %1$d чат?\n\n\"%2$s\" Надсилання обірване через відсутність дозволів. @@ -643,7 +647,7 @@ Використовувати зображення за замовчуванням Вибрати з галереї Параметри IMAP-папок - У разі вимкнення цього параметру переконайтеся, що сервер і Ваші інші додатки для роботи з електронною поштою налаштовані таким же чином.\n\nУ випадку, якщо параметри відрізняються, все може перестати працювати. + Якщо ви змінюєте цей параметр, переконайтеся, що ваш сервер та інші ваші клієнти налаштовані відповідним чином.\n\nІнакше щось може взагалі не працювати. Стежити за папкою «Надіслані» Відправити копію собі Обов’язковий при використанні цього облікового запису на кількох пристроях. @@ -771,7 +775,7 @@ Ви видалили чат \"Збережені повідомлення\".\n\nℹ️ Аби використовувати функцію \"Збережені повідомлення\" знову, створіть новий чат самі із собою. - ⚠️ Сховище вашого провайдера електронної пошти майже заповнено, вже використовується %1$s%%.\n\nМожливо, ви не зможете отримати повідомлення, коли пам’ять буде використана на 100%%.\n\n👉 Перевірте, чи можна видалити старі дані у веб -інтерфейсі провайдера та включіть \"Налаштування / Видалити старі повідомлення\". Ви можете будь-коли перевірити своє поточне використання сховища в \"Налаштування / Підключення\". + ⚠️ Сховище вашого провайдера електронної пошти майже заповнено, вже використовується %1$s%%.\n\nМожливо, ви не зможете отримати повідомлення, коли сховище буде заповнене.\n\n👉 Перевірте, чи можна видалити старі дані у веб -інтерфейсі провайдера та включіть \"Налаштування / Видалити старі повідомлення\". Ви можете будь-коли перевірити своє поточне використання сховища в \"Налаштування / Підключення\". ⚠️ Дата і час на вашому пристрої видаються неточними (%1$s).\n\nНалаштуйте свій годинник ⏰🔧 для правильного отримання ваших повідомлень. ⚠️ Ваша версія Delta Chat може бути застарілою.\n\nЦе може спричинити проблеми, оскільки ваші співрозмовники в чаті використовують новіші версії, а вам не вистачає найновіших функцій 😳 \nПеревірте оновлення на https://get.delta.chat або у вашому магазині додатків. @@ -847,7 +851,7 @@ Продовжити Для зйомки фотографій або відео додатку потрібен дозвіл на використання камери, але зараз його не надано. Для надання дозволу перейдіть у системне меню налаштувань, у розділі «Додатки» знайдіть Delta Chat і дозвольте доступ до камери. Для надсилання голосових повідомлень додатку потрібен дозвіл на використання мікрофону, але зараз його не надано. Для надання дозволу перейдіть у системне меню налаштувань, у розділі «Додатки» знайдіть Delta Chat і дозвольте доступ до мікрофону. - Для збереження або передавання фотографій та відео додатку потрібен дозвіл на використання сховища, але зараз його не надано. Для надання дозволу перейдіть в системне меню налаштувань, в розділі «Додатки» знайдіть Delta Chat і дозвольте доступ до сховища. + Для збереження або передавання фотографій перейдіть до налаштувань додатку, оберіть \"Дозволи\" та включіть \"Сховище\" Щоб передати місцезнаходження, додатку потрібен доступ до геоданих пристрою, але зараз його не надано. Для надання доступу перейдіть у системне меню налаштувань, у розділі «Додатки» знайдіть Delta Chat, виберіть пункт «Права доступу» і дозвольте доступ до місцезнаходження пристрою. diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 3ba684498..5f4330337 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -431,6 +431,10 @@ 此聊天内分享的 Webxdc 内容将显示在这里 媒体预览 发送消息 + + %1$s 将邮箱从 %2$s 更改为 %3$s + + 你将邮箱从 %1$s 改为了 %2$s。\n\n如果你现在发送一条消息到已验证的群组,那里的联系人将自动用你的新邮箱替换旧邮箱。\n\n我们建议你配置旧邮箱将所有邮件转发到新邮箱。否则,你可能收不到还不知道你新邮箱的联系人发过来的消息。 diff --git a/res/values/strings.xml b/res/values/strings.xml index d9d90cced..cc300fcef 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -264,6 +264,8 @@ Original message not found Reply Privately Source Code + + Add to Home Screen Mute for 1 hour Mute for 2 hours @@ -439,13 +441,17 @@ Links Map Images and videos shared in this chat will appear here. - Documents, music, and other files shared in this chat will appear here. + Documents and other files shared in this chat will appear here. Images shared in this chat will appear here. Videos shared in this chat will appear here. - Audio Files and Voice Messages shared in this chat will appear here. + Audio files and voice messages shared in this chat will appear here. Webxdc content shared in this chat will appear here. Media Preview Send Message + + %1$s changed their address from %2$s to %3$s + + You changed your email address from %1$s to %2$s.\n\nIf you now send a message to a verified group, contacts there will automatically replace the old with your new address.\n\nIt\'s highly advised to set up your old email provider to forward all emails to your new email address. Otherwise you might miss messages of contacts who did not get your new address yet. @@ -781,7 +787,7 @@ Scan to chat with %1$s No internet connection, can\'t perform QR code setup. Create new e-mail address on \"%1$s\" and log in there? - Create new e-mail address on \"%1$s\" and log in there?\n\nYour existing account will not be deleted. Use the \"Switch account\" item to switch between your accounts. + Create new e-mail address on \"%1$s\" and log in there?\n\nYour existing account will not be deleted. Use the \"Switch Account\" item to switch between your accounts. Login successful—your e-mail address is %1$s\n\nIf you like, you can now enter a name and an profile image that will be displayed to people you write to. The scanned QR code cannot be used to set up a new account. The scanned QR code is for setting up a new account. You can scan the QR code when setting up a new Delta Chat installation. diff --git a/scripts/ndk-make.sh b/scripts/ndk-make.sh new file mode 100755 index 000000000..eb03de147 --- /dev/null +++ b/scripts/ndk-make.sh @@ -0,0 +1,159 @@ +#!/bin/sh + +# If you want to speed up compilation, you can run this script with your +# architecture as an argument: +# +# scripts/ndk-make.sh arm64-v8a +# +# Possible values are armeabi-v7a, arm64-v8a, x86 and x86_64. +# You should be able to find out your architecture by running: +# +# adb shell uname -m +# +# Or you just guess your phone's architecture to be arm64-v8a and if you +# guessed wrongly, a warning message will pop up inside the app, telling +# you what the correct one is. +# +# The values in the following lines mean the same: +# +# armeabi-v7a, armv7 and arm +# arm64-v8a, aarch64 and arm64 +# x86 and i686 +# (there are no synonyms for x86_64) +# +# +# If you put this in your .bashrc, then you can directly build and +# deploy DeltaChat from the jni/deltachat-core-rust directory by +# typing `nmake`: +# +# nmake() {(cd ../..; scripts/ndk-make.sh arm64-v8a && ./gradlew installFatDebug; notify-send "install finished")} +# +# +# If anything doesn't work, please open an issue!! + +set -e +echo "starting time: `date`" + +: "${ANDROID_NDK_ROOT:=$ANDROID_NDK_HOME}" +: "${ANDROID_NDK_ROOT:=$ANDROID_NDK}" +if test -z "$ANDROID_NDK_ROOT"; then + echo "ANDROID_NDK_ROOT is not set" + exit 1 +fi + +echo Setting CARGO_TARGET environment variables. + +if test -z "$NDK_HOST_TAG"; then + KERNEL="$(uname -s | tr '[:upper:]' '[:lower:]')" + ARCH="$(uname -m)" + NDK_HOST_TAG="$KERNEL-$ARCH" +fi + +TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$NDK_HOST_TAG" +export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="$TOOLCHAIN/bin/armv7a-linux-androideabi16-clang" +export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/aarch64-linux-android21-clang" +export CARGO_TARGET_I686_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/i686-linux-android16-clang" +export CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/x86_64-linux-android21-clang" + +# Check if the argument is a correct architecture: +if test $1 && echo "armeabi-v7a arm64-v8a x86 x86_64" | grep -vwq $1; then + echo "Architecture '$1' not known, possible values are armeabi-v7a, arm64-v8a, x86 and x86_64." + exit +fi + +cd jni +jnidir=$PWD +rm -f armeabi-v7a/* +rm -f arm64-v8a/* +rm -f x86/* +rm -f x86_64/* +mkdir -p armeabi-v7a +mkdir -p arm64-v8a +mkdir -p x86 +mkdir -p x86_64 + +cd deltachat-core-rust + +# fix build on MacOS Catalina +unset CPATH + +if test -z $1; then + echo Full build + + # According to 1.45.0 changelog in https://github.com/rust-lang/rust/blob/master/RELEASES.md, + # "The recommended way to control LTO is with Cargo profiles, either in Cargo.toml or .cargo/config, or by setting CARGO_PROFILE__LTO in the environment." + export CARGO_PROFILE_RELEASE_LTO=on + RELEASE="release" + RELEASEFLAG="--release" +else + echo Fast, partial, slow debug build. DO NOT UPLOAD THE APK ANYWHERE. + + RELEASE="debug" + RELEASEFLAG= +fi + +# Work around the bug in the build of Rust standard library. +# It is built against r22b NDK toolchains and still requires -lgcc instead of -lunwind used in newer r23 NDK. +# See discussion at +TMPLIB="$(mktemp -d)" +if test -z "$(find "$ANDROID_NDK_ROOT" -name libgcc.a -print -quit)"; then + # NDK is does not contain libgcc.a, add a linker script to fake it. + echo 'INPUT(-lunwind)' >"$TMPLIB/libgcc.a" +fi + +if test -z $1 || test $1 = armeabi-v7a; then + echo "-- cross compiling to armv7-linux-androideabi (arm) --" + export CFLAGS=-D__ANDROID_API__=16 + TARGET_CC=armv7a-linux-androideabi16-clang \ + TARGET_AR=llvm-ar \ + cargo +`cat rust-toolchain` rustc $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi -- -L "$TMPLIB" + cp target/armv7-linux-androideabi/$RELEASE/libdeltachat.a $jnidir/armeabi-v7a +fi + +if test -z $1 || test $1 = arm64-v8a; then + echo "-- cross compiling to aarch64-linux-android (arm64) --" + export CFLAGS=-D__ANDROID_API__=21 + TARGET_CC=aarch64-linux-android21-clang \ + TARGET_AR=llvm-ar \ + cargo +`cat rust-toolchain` rustc $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi -- -L "$TMPLIB" + cp target/aarch64-linux-android/$RELEASE/libdeltachat.a $jnidir/arm64-v8a +fi + +if test -z $1 || test $1 = x86; then + echo "-- cross compiling to i686-linux-android (x86) --" + export CFLAGS=-D__ANDROID_API__=16 + TARGET_CC=i686-linux-android16-clang \ + TARGET_AR=llvm-ar \ + cargo +`cat rust-toolchain` rustc $RELEASEFLAG --target i686-linux-android -p deltachat_ffi -- -L "$TMPLIB" + cp target/i686-linux-android/$RELEASE/libdeltachat.a $jnidir/x86 +fi + +if test -z $1 || test $1 = x86_64; then + echo "-- cross compiling to x86_64-linux-android (x86_64) --" + export CFLAGS=-D__ANDROID_API__=21 + TARGET_CC=x86_64-linux-android21-clang \ + TARGET_AR=llvm-ar \ + cargo +`cat rust-toolchain` rustc $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi -- -L "$TMPLIB" + cp target/x86_64-linux-android/$RELEASE/libdeltachat.a $jnidir/x86_64 +fi + +rm -fr "$TMPLIB" + +echo -- ndk-build -- + +cd ../.. + +if test $1; then + "$ANDROID_NDK_ROOT/ndk-build" APP_ABI="$1" +else + # We are compiling for all architectures defined in Application.mk + "$ANDROID_NDK_ROOT/ndk-build" +fi + +if test $1; then + echo "NDK_ARCH=$1" >ndkArch +else + rm -f ndkArch # Remove ndkArch, ignore if it doesn't exist +fi + +echo "ending time: `date`" diff --git a/src/com/b44t/messenger/DcChat.java b/src/com/b44t/messenger/DcChat.java index eba0e86c9..68530702c 100644 --- a/src/com/b44t/messenger/DcChat.java +++ b/src/com/b44t/messenger/DcChat.java @@ -31,6 +31,7 @@ public class DcChat { public native int getType (); public native int getVisibility (); public native String getName (); + public native String getMailinglistAddr(); public native String getProfileImage (); public native int getColor (); public native boolean isUnpromoted (); diff --git a/src/com/b44t/messenger/DcMsg.java b/src/com/b44t/messenger/DcMsg.java index cd53e65b7..8be2823e1 100644 --- a/src/com/b44t/messenger/DcMsg.java +++ b/src/com/b44t/messenger/DcMsg.java @@ -52,6 +52,10 @@ public class DcMsg { this.msgCPtr = msgCPtr; } + public boolean isOk() { + return msgCPtr != 0; + } + @Override protected void finalize() throws Throwable { super.finalize(); diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/org/thoughtcrime/securesms/ConversationFragment.java index f1d5a1ff6..c66e5778e 100644 --- a/src/org/thoughtcrime/securesms/ConversationFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationFragment.java @@ -320,6 +320,7 @@ public class ConversationFragment extends MessageSelectorFragment menu.findItem(R.id.menu_context_share).setVisible(false); menu.findItem(R.id.menu_context_reply).setVisible(false); menu.findItem(R.id.menu_context_reply_privately).setVisible(false); + menu.findItem(R.id.menu_add_to_home_screen).setVisible(false); } else { DcMsg messageRecord = messageRecords.iterator().next(); DcChat chat = getListAdapter().getChat(); @@ -329,17 +330,26 @@ public class ConversationFragment extends MessageSelectorFragment menu.findItem(R.id.menu_context_reply).setVisible(chat.canSend() && canReply); boolean showReplyPrivately = chat.isMultiUser() && !messageRecord.isOutgoing() && canReply; menu.findItem(R.id.menu_context_reply_privately).setVisible(showReplyPrivately); + menu.findItem(R.id.menu_add_to_home_screen).setVisible(messageRecord.getType() == DcMsg.DC_MSG_WEBXDC); } // if one of the selected items cannot be saved, disable saving. boolean canSave = true; + // if one of the selected items is not from self, disable resending. + boolean canResend = true; for (DcMsg messageRecord : messageRecords) { - if (!messageRecord.hasFile()) { + if (canSave && !messageRecord.hasFile()) { canSave = false; + } + if (canResend && !messageRecord.isOutgoing()) { + canResend = false; + } + if (!canSave && !canResend) { break; } } menu.findItem(R.id.menu_context_save_attachment).setVisible(canSave); + menu.findItem(R.id.menu_resend).setVisible(canResend); } static boolean canReplyToMsg(DcMsg dcMsg) { @@ -918,6 +928,10 @@ public class ConversationFragment extends MessageSelectorFragment handleForwardMessage(getListAdapter().getSelectedItems()); actionMode.finish(); return true; + case R.id.menu_add_to_home_screen: + WebxdcActivity.addToHomeScreen(getActivity(), getSelectedMessageRecord(getListAdapter().getSelectedItems()).getId()); + actionMode.finish(); + return true; case R.id.menu_context_save_attachment: handleSaveAttachment(getListAdapter().getSelectedItems()); return true; diff --git a/src/org/thoughtcrime/securesms/ConversationTitleView.java b/src/org/thoughtcrime/securesms/ConversationTitleView.java index a3b0c2ab3..872283b34 100644 --- a/src/org/thoughtcrime/securesms/ConversationTitleView.java +++ b/src/org/thoughtcrime/securesms/ConversationTitleView.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms; import android.content.Context; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; @@ -57,17 +58,17 @@ public class ConversationTitleView extends RelativeLayout { } public void setTitle(@NonNull GlideRequests glideRequests, @NonNull DcChat dcChat) { - setTitle(glideRequests, dcChat, true); + setTitle(glideRequests, dcChat, false); } - public void setTitle(@NonNull GlideRequests glideRequests, @NonNull DcChat dcChat, boolean showAddInfo) { + public void setTitle(@NonNull GlideRequests glideRequests, @NonNull DcChat dcChat, boolean profileView) { final int chatId = dcChat.getId(); final Context context = getContext(); final DcContext dcContext = DcHelper.getContext(context); // set title and subtitle texts title.setText(dcChat.getName()); - String subtitleStr = "ErrSubtitle"; + String subtitleStr = null; // set icons etc. int imgLeft = 0; @@ -82,11 +83,19 @@ public class ConversationTitleView extends RelativeLayout { int[] chatContacts = dcContext.getChatContacts(chatId); if (dcChat.isMailingList()) { - subtitleStr = context.getString(R.string.mailing_list); + if (profileView) { + subtitleStr = dcChat.getMailinglistAddr(); + } else { + subtitleStr = context.getString(R.string.mailing_list); + } } else if (dcChat.isBroadcast()) { - subtitleStr = context.getResources().getQuantityString(R.plurals.n_recipients, chatContacts.length, chatContacts.length); + if (!profileView) { + subtitleStr = context.getResources().getQuantityString(R.plurals.n_recipients, chatContacts.length, chatContacts.length); + } } else if( dcChat.isMultiUser() ) { - subtitleStr = context.getResources().getQuantityString(R.plurals.n_members, chatContacts.length, chatContacts.length); + if (!profileView) { + subtitleStr = context.getResources().getQuantityString(R.plurals.n_members, chatContacts.length, chatContacts.length); + } } else if( chatContacts.length>=1 ) { if( dcChat.isSelfTalk() ) { subtitleStr = context.getString(R.string.chat_self_talk_subtitle); @@ -107,10 +116,14 @@ public class ConversationTitleView extends RelativeLayout { avatar.setAvatar(glideRequests, new Recipient(getContext(), dcChat), false); title.setCompoundDrawablesWithIntrinsicBounds(imgLeft, 0, imgRight, 0); - subtitle.setVisibility(showAddInfo? View.VISIBLE : View.GONE); - + if (!TextUtils.isEmpty(subtitleStr)) { + subtitle.setText(subtitleStr); + subtitle.setVisibility(View.VISIBLE); + } else { + subtitle.setVisibility(View.GONE); + } boolean isEphemeral = dcContext.getChatEphemeralTimer(chatId) != 0; - ephemeralIcon.setVisibility((showAddInfo && isEphemeral)? View.VISIBLE : View.GONE); + ephemeralIcon.setVisibility(isEphemeral? View.VISIBLE : View.GONE); } public void setTitle(@NonNull GlideRequests glideRequests, @NonNull DcContact contact) { diff --git a/src/org/thoughtcrime/securesms/ProfileActivity.java b/src/org/thoughtcrime/securesms/ProfileActivity.java index 8ed12210f..345b52c0e 100644 --- a/src/org/thoughtcrime/securesms/ProfileActivity.java +++ b/src/org/thoughtcrime/securesms/ProfileActivity.java @@ -259,7 +259,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity } else if (chatId > 0) { DcChat dcChat = dcContext.getChat(chatId); - titleView.setTitle(GlideApp.with(this), dcChat, isContactProfile()); + titleView.setTitle(GlideApp.with(this), dcChat, true); } else if (isContactProfile()){ titleView.setTitle(GlideApp.with(this), dcContext.getContact(contactId)); @@ -362,7 +362,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity return getString(R.string.tab_gallery); case TAB_DOCS: - return getString(R.string.tab_docs); + return getString(R.string.files); case TAB_LINKS: return getString(R.string.tab_links); diff --git a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java index bfcdea7a3..e0a45f078 100644 --- a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java +++ b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java @@ -182,6 +182,9 @@ public class ProfileDocumentsFragment menu.findItem(R.id.details).setVisible(singleSelection); menu.findItem(R.id.show_in_chat).setVisible(singleSelection); menu.findItem(R.id.share).setVisible(singleSelection); + + boolean webxdcApp = singleSelection && messageRecords.iterator().next().getType() == DcMsg.DC_MSG_WEBXDC; + menu.findItem(R.id.menu_add_to_home_screen).setVisible(webxdcApp); } private ProfileDocumentsAdapter getListAdapter() { @@ -225,6 +228,10 @@ public class ProfileDocumentsFragment case R.id.share: handleShare(getSelectedMessageRecord(getListAdapter().getSelectedMedia())); return true; + case R.id.menu_add_to_home_screen: + WebxdcActivity.addToHomeScreen(getActivity(), getSelectedMessageRecord(getListAdapter().getSelectedMedia()).getId()); + mode.finish(); + return true; case R.id.show_in_chat: handleShowInChat(getSelectedMessageRecord(getListAdapter().getSelectedMedia())); return true; diff --git a/src/org/thoughtcrime/securesms/RegistrationActivity.java b/src/org/thoughtcrime/securesms/RegistrationActivity.java index e16421385..4459f6bd9 100644 --- a/src/org/thoughtcrime/securesms/RegistrationActivity.java +++ b/src/org/thoughtcrime/securesms/RegistrationActivity.java @@ -61,6 +61,7 @@ import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask; import org.thoughtcrime.securesms.util.views.ProgressDialog; import java.lang.ref.WeakReference; +import java.util.Locale; import java.util.concurrent.ExecutionException; public class RegistrationActivity extends BaseActionBarActivity implements DcEventCenter.DcEventDelegate { @@ -233,23 +234,19 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve int id = item.getItemId(); if (id == R.id.do_register) { - // "log in" button clicked - even if oauth2DeclinedByUser is true, - // we will ask for oauth2 to allow reverting the decision. - checkOauth2start().addListener(new ListenableFuture.Listener() { - @Override - public void onSuccess(Boolean oauth2started) { - if(!oauth2started) { - updateProviderInfo(); - onLogin(); - } - } - - @Override - public void onFailure(ExecutionException e) { - updateProviderInfo(); - onLogin(); - } - }); + String oldAddr = DcHelper.getSelfAddr(this); + String newAddr = emailInput.getText().toString(); + if (!TextUtils.isEmpty(oldAddr) + && !TextUtils.equals(oldAddr.toLowerCase(Locale.ROOT), newAddr.toLowerCase(Locale.ROOT))) { + // Tell the user about AEAP if they are about to change their address + new AlertDialog.Builder(this) + .setMessage(getString(R.string.aeap_explanation, oldAddr, newAddr)) + .setNegativeButton(R.string.cancel, (d, w) -> {}) + .setPositiveButton(R.string.perm_continue, (d, w) -> do_register()) + .show(); + } else { + do_register(); + } return true; } else if (id == android.R.id.home) { // handle close button click here @@ -259,6 +256,26 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve return super.onOptionsItemSelected(item); } + private void do_register() { + // "log in" button clicked - even if oauth2DeclinedByUser is true, + // we will ask for oauth2 to allow reverting the decision. + checkOauth2start().addListener(new ListenableFuture.Listener() { + @Override + public void onSuccess(Boolean oauth2started) { + if(!oauth2started) { + updateProviderInfo(); + onLogin(); + } + } + + @Override + public void onFailure(ExecutionException e) { + updateProviderInfo(); + onLogin(); + } + }); + } + @Override public void onDestroy() { super.onDestroy(); diff --git a/src/org/thoughtcrime/securesms/WebxdcActivity.java b/src/org/thoughtcrime/securesms/WebxdcActivity.java index 62ea973f9..23316a21f 100644 --- a/src/org/thoughtcrime/securesms/WebxdcActivity.java +++ b/src/org/thoughtcrime/securesms/WebxdcActivity.java @@ -1,7 +1,11 @@ package org.thoughtcrime.securesms; +import android.app.Activity; import android.content.Context; import android.content.Intent; +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; @@ -17,6 +21,10 @@ import android.webkit.WebView; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.core.app.TaskStackBuilder; +import androidx.core.content.pm.ShortcutInfoCompat; +import androidx.core.content.pm.ShortcutManagerCompat; +import androidx.core.graphics.drawable.IconCompat; import com.b44t.messenger.DcChat; import com.b44t.messenger.DcContext; @@ -41,20 +49,43 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE private String baseURL; private String sourceCodeUrl = ""; + + public static void openWebxdcActivity(Context context, DcMsg instance) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Prefs.isDeveloperModeEnabled(context)) { WebView.setWebContentsDebuggingEnabled(true); } - - Intent intent =new Intent(context, WebxdcActivity.class); - intent.putExtra("appMessageId", instance.getId()); - context.startActivity(intent); + context.startActivity(getWebxdcIntent(context, instance.getId())); } else { Toast.makeText(context, "At least Android 5.0 (Lollipop) required for Webxdc.", Toast.LENGTH_LONG).show(); } } + private static Intent getWebxdcIntent(Context context, int msgId) { + DcContext dcContext = DcHelper.getContext(context); + Intent intent = new Intent(context, WebxdcActivity.class); + intent.setAction(Intent.ACTION_VIEW); + intent.putExtra("accountId", dcContext.getAccountId()); + intent.putExtra("appMessageId", msgId); + return intent; + } + + private static Intent[] getWebxdcIntentWithParentStack(Context context, int msgId) { + DcContext dcContext = DcHelper.getContext(context); + + final Intent chatIntent = new Intent(context, ConversationActivity.class) + .putExtra(ConversationActivity.CHAT_ID_EXTRA, dcContext.getMsg(msgId).getChatId()) + .setAction(Intent.ACTION_VIEW); + + final Intent webxdcIntent = getWebxdcIntent(context, msgId); + + return TaskStackBuilder.create(context) + .addNextIntentWithParentStack(chatIntent) + .addNextIntent(webxdcIntent) + .getIntents(); + } + @Override protected void onCreate(Bundle state, boolean ready) { super.onCreate(state, ready); @@ -65,7 +96,19 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE int appMessageId = b.getInt("appMessageId"); this.dcContext = DcHelper.getContext(getApplicationContext()); + if (dcContext.getAccountId() != b.getInt("accountId")) { + Toast.makeText(this, "Switch to belonging account first.", Toast.LENGTH_LONG).show(); + finish(); + return; + } + this.dcAppMsg = this.dcContext.getMsg(appMessageId); + if (!this.dcAppMsg.isOk()) { + Toast.makeText(this, "Webxdc does no longer exist.", Toast.LENGTH_LONG).show(); + finish(); + return; + } + // `msg_id` in the subdomain makes sure, different apps using same files do not share the same cache entry // (WebView may use a global cache shared across objects). // (a random-id would also work, but would need maintenance and does not add benefits as we regard the file-part interceptRequest() only, @@ -107,6 +150,9 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()) { + case R.id.menu_add_to_home_screen: + addToHomeScreen(this, dcAppMsg.getId()); + return true; case R.id.source_code: openUrlInBrowser(this, sourceCodeUrl); return true; @@ -192,6 +238,36 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE }); } + public static void addToHomeScreen(Activity activity, int msgId) { + Context context = activity.getApplicationContext(); + try { + DcContext dcContext = DcHelper.getContext(context); + DcMsg msg = dcContext.getMsg(msgId); + final JSONObject info = msg.getWebxdcInfo(); + + final String docName = JsonUtils.optString(info, "document"); + final String xdcName = JsonUtils.optString(info, "name"); + byte[] blob = msg.getWebxdcBlob(JsonUtils.optString(info, "icon")); + ByteArrayInputStream is = new ByteArrayInputStream(blob); + BitmapDrawable drawable = (BitmapDrawable) Drawable.createFromStream(is, "icon"); + Bitmap bitmap = drawable.getBitmap(); + + ShortcutInfoCompat shortcutInfoCompat = new ShortcutInfoCompat.Builder(context, "xdc-" + dcContext.getAccountId() + "-" + msgId) + .setShortLabel(docName.isEmpty() ? xdcName : docName) + .setIcon(IconCompat.createWithAdaptiveBitmap(bitmap)) + .setIntents(getWebxdcIntentWithParentStack(context, msgId)) + .build(); + + if (ShortcutManagerCompat.requestPinShortcut(context, shortcutInfoCompat, null)) { + Toast.makeText(context, R.string.done, Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(context, "ErrAddToHomescreen: requestPinShortcut() failed", Toast.LENGTH_LONG).show(); + } + } catch(Exception e) { + Toast.makeText(context, "ErrAddToHomescreen: " + e, Toast.LENGTH_LONG).show(); + } + } + class InternalJSApi { @JavascriptInterface public String selfAddr() { diff --git a/src/org/thoughtcrime/securesms/connect/DcHelper.java b/src/org/thoughtcrime/securesms/connect/DcHelper.java index 8f68315a7..e1e15cdc4 100644 --- a/src/org/thoughtcrime/securesms/connect/DcHelper.java +++ b/src/org/thoughtcrime/securesms/connect/DcHelper.java @@ -39,6 +39,7 @@ public class DcHelper { private static final String TAG = DcHelper.class.getSimpleName(); public static final String CONFIG_ADDRESS = "addr"; + public static final String CONFIG_CONFIGURED_ADDRESS = "configured_addr"; public static final String CONFIG_MAIL_SERVER = "mail_server"; public static final String CONFIG_MAIL_USER = "mail_user"; public static final String CONFIG_MAIL_PASSWORD = "mail_pw"; @@ -97,6 +98,10 @@ public class DcHelper { return dcContext.isConfigured() == 1; } + public static String getSelfAddr(Context context) { + DcContext dcContext = getContext(context); + return dcContext.getConfig(CONFIG_CONFIGURED_ADDRESS); + } public static int getInt(Context context, String key) { DcContext dcContext = getContext(context); @@ -207,6 +212,8 @@ public class DcHelper { // cmp. https://github.com/deltachat/deltachat-android/issues/2187 dcContext.setStockTranslation(120, context.getString(R.string.qrshow_join_group_hint).replace("\"", "")); dcContext.setStockTranslation(121, context.getString(R.string.connectivity_not_connected)); + dcContext.setStockTranslation(122, context.getString(R.string.aeap_addr_changed)); + dcContext.setStockTranslation(123, context.getString(R.string.aeap_explanation)); } public static File getImexDir() { diff --git a/src/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java b/src/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java index 9349f867d..1f3f30fd8 100644 --- a/src/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java +++ b/src/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java @@ -45,7 +45,11 @@ public abstract class ProgressDialogAsyncTask extends @Override protected void onPostExecute(Result result) { - if (progress != null) progress.dismiss(); + try { + if (progress != null) progress.dismiss(); + } catch(Exception e) { + e.printStackTrace(); + } } protected Context getContext() { diff --git a/src/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java b/src/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java index fb5627c54..336e31a1b 100644 --- a/src/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java +++ b/src/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java @@ -24,8 +24,9 @@ public class ConversationAdaptiveActionsToolbar extends Toolbar { private static final int OVERFLOW_VIEW_WIDTH_DP = 36; private static final int ID_NEVER_SHOW_AS_ACTION_1 = R.id.menu_context_reply_privately; - private static final int ID_NEVER_SHOW_AS_ACTION_2 = R.id.menu_context_save_attachment; - private static final int ID_NEVER_SHOW_AS_ACTION_3 = R.id.menu_resend; + private static final int ID_NEVER_SHOW_AS_ACTION_2 = R.id.menu_add_to_home_screen; + private static final int ID_NEVER_SHOW_AS_ACTION_3 = R.id.menu_context_save_attachment; + private static final int ID_NEVER_SHOW_AS_ACTION_4 = R.id.menu_resend; private static final int ID_ALWAYS_SHOW_AS_ACTION = R.id.menu_context_forward; private int maxShown; @@ -81,7 +82,8 @@ public class ConversationAdaptiveActionsToolbar extends Toolbar { boolean neverShowAsAction = item.getItemId() == ID_NEVER_SHOW_AS_ACTION_1 || item.getItemId() == ID_NEVER_SHOW_AS_ACTION_2 - || item.getItemId() == ID_NEVER_SHOW_AS_ACTION_3; + || item.getItemId() == ID_NEVER_SHOW_AS_ACTION_3 + || item.getItemId() == ID_NEVER_SHOW_AS_ACTION_4; boolean alwaysShowAsAction = item.getItemId() == ID_ALWAYS_SHOW_AS_ACTION; if (alwaysShowAsAction) continue;