Compare commits

..

128 Commits

Author SHA1 Message Date
B. Petersen 40285124f5 Update messenger-backend submodule. 2018-06-23 23:52:01 +02:00
B. Petersen fb3e20fe39 bump version 2018-06-23 23:51:35 +02:00
B. Petersen ba70da63ba typo 2018-06-23 18:42:12 +02:00
B. Petersen fbf1d5e252 Update messenger-backend submodule. 2018-06-23 18:40:00 +02:00
B. Petersen e70d32c3b1 bump version, changelog 2018-06-23 18:39:32 +02:00
B. Petersen a9dfb88dda Update messenger-backend submodule. 2018-06-22 19:44:42 +02:00
B. Petersen 0d86683182 bump version 2018-06-22 19:44:30 +02:00
Björn Petersen b1da1efb4a Merge pull request #335 from violoncelloch/patch-1
updated ISSUE_TEMPLATE.md
2018-06-22 18:36:13 +02:00
B. Petersen 33bf4bcdef typo 2018-06-21 12:47:52 +02:00
B. Petersen 0f235a24a0 update translations 2018-06-21 12:41:33 +02:00
B. Petersen fc76e0ff59 Update messenger-backend submodule. 2018-06-21 12:38:07 +02:00
B. Petersen debe6d2378 bump version 2018-06-21 12:03:08 +02:00
B. Petersen c5701745eb bump version 2018-06-20 23:43:09 +02:00
B. Petersen d57afb5401 Update messenger-backend submodule. 2018-06-20 22:46:30 +02:00
B. Petersen 90f06f0820 after the app goes to background, we hold a one minute wakelock to guarantee responsiveness 2018-06-20 21:27:20 +02:00
B. Petersen fba2f1d334 remove dead code 2018-06-20 21:10:57 +02:00
B. Petersen d169a67879 adapt to new api 2018-06-20 11:07:45 +02:00
B. Petersen a116462064 show permanent notification conditionally 2018-06-20 10:26:03 +02:00
B. Petersen 9a9543265b comment 2018-06-19 21:08:40 +02:00
B. Petersen 8f673d1950 Update messenger-backend submodule. 2018-06-19 20:39:18 +02:00
B. Petersen 1d66dd937b always start threads on app start (Timer.onReceive() may try it again, however) 2018-06-19 17:38:27 +02:00
B. Petersen 1f63c2a5da also interrupt on disconnect, clean log 2018-06-19 16:11:51 +02:00
B. Petersen 194d5b2fcc send media-count-notification from ui thread 2018-06-19 12:27:11 +02:00
B. Petersen 1f33c80e85 bump version 2018-06-19 12:26:04 +02:00
B. Petersen fdb0b081e1 changelog 2018-06-18 18:53:03 +02:00
violoncelloch ba539cd1f9 updated ISSUE_TEMPLATE.md
* commented out our statements so we don't have them visible in issues if ppl. don't remove them
* created a `details` section so long logs are expandable
2018-06-17 22:08:34 +02:00
B. Petersen fe8ad2b6cf bump version 2018-06-15 00:00:51 +02:00
B. Petersen 73ab1567f7 start or interrupt the job-threads on network-connected and file-created 2018-06-14 15:53:08 +02:00
B. Petersen 431411cded Update messenger-backend submodule. 2018-06-14 13:23:06 +02:00
Björn Petersen 2672cfb638 Merge pull request #333 from flub/master
Fix URL
2018-06-14 09:23:23 +02:00
Floris Bruynooghe abc836eae5 Fix URL 2018-06-13 20:53:02 +02:00
B. Petersen 6c9f06e07f changelog 2018-06-13 19:29:43 +02:00
Björn Petersen 4d1534f998 Merge pull request #332 from angelo-fuchs/master
displaying a list of pictures instead of just one when opening a pic in chat
2018-06-13 17:26:24 +02:00
B. Petersen e72041d3fb update translations 2018-06-13 16:57:36 +02:00
B. Petersen 1d9284980c Update messenger-backend submodule. 2018-06-13 16:31:55 +02:00
Björn Petersen a8c665a89e Merge pull request #331 from deltachat/separate-smtp-thread
adapt to new smtp-thread-API
2018-06-13 16:18:16 +02:00
Angelo Fuchs - Der Mor db036e0e2a showing a list of pictures from the current chat instead of just one picture when tapping a picture in chat #10
- in ChatActivitiy gather all the images from the chat and determinate the current one within
 - in PhotoViewer start the display of images with a function that displays a list of images.
 - did some commenting in PhotoViewer to ease future reading of the code.
2018-06-13 12:43:32 +02:00
Angelo Fuchs - Der Mor 7c94c481c7 comments 2018-06-13 12:43:32 +02:00
Angelo Fuchs - Der Mor e1ac76bbfd #10 Scrolling through images in chat, works mostly, displays wrong buttons, though. 2018-06-13 12:43:32 +02:00
B. Petersen 59f78161ae bump version 2018-06-13 11:40:27 +02:00
B. Petersen e7de3e059d adapt to new smtp-thread-API 2018-06-13 00:40:10 +02:00
B. Petersen 631959ba63 adapt to new configure-api 2018-06-11 14:32:36 +02:00
Björn Petersen ce6cf689c8 Merge pull request #330 from deltachat/new-idle
bump version
2018-06-11 13:07:24 +02:00
Björn Petersen 982b7d2470 Merge pull request #329 from deltachat/new-idle
New idle
2018-06-11 13:05:57 +02:00
B. Petersen e6c2060114 bump version 2018-06-11 11:30:29 +02:00
B. Petersen fea3c4a19d waiting for IMAP-thread running before returning from the on_receive call 2018-06-11 11:13:40 +02:00
B. Petersen d51278bf65 use an exact timer for calling on_receive 2018-06-11 11:06:33 +02:00
B. Petersen 09b9355cf0 call FETCH and IDLE separately 2018-06-11 09:45:40 +02:00
B. Petersen eb16a0bf74 log 2018-06-10 19:42:40 +02:00
B. Petersen ee9ade04cc increase version, remove switch-to-background 2018-06-10 19:40:50 +02:00
B. Petersen 5e6b52038c refine wakelocks 2018-06-10 19:05:41 +02:00
B. Petersen 60a42c275d remove lock around poll 2018-06-10 15:32:09 +02:00
B. Petersen 8a7849bb1b switch immediately to background, for now 2018-06-10 10:01:52 +02:00
B. Petersen d709ace71c prepare new-idle 2018-06-09 00:53:19 +02:00
B. Petersen f0d6aa6a87 add a http-timeout 2018-06-08 13:56:06 +02:00
B. Petersen 497d921ef9 use direct threads instead of a thread-queue for import/export/poll/configure 2018-06-08 13:06:19 +02:00
B. Petersen 8eab9107b7 update translations 2018-06-08 12:29:45 +02:00
B. Petersen 6f9349e9c2 Update messenger-backend submodule. 2018-06-06 00:16:14 +02:00
B. Petersen 6261e0eaed update translations 2018-06-05 21:31:57 +02:00
B. Petersen 6fb810bbb9 refactor 2018-06-05 20:52:10 +02:00
B. Petersen b573f24b0f delay switching from idle to poll for one minute after the app goes to background 2018-06-05 15:38:08 +02:00
B. Petersen 867b47d33c Update messenger-backend submodule. 2018-06-05 13:47:24 +02:00
B. Petersen e88b74164c make wakelock reference counting more reliable, adapt to new idle-api 2018-06-05 13:47:06 +02:00
B. Petersen bbcf8fb1dd keeping show-qr-screen on to avoid falling back to POLL and to allow scanning on short timeouts 2018-06-05 02:15:01 +02:00
B. Petersen 7a88e28710 Update messenger-backend submodule. 2018-06-05 01:47:19 +02:00
B. Petersen f42342dea0 Update messenger-backend submodule. 2018-06-05 01:09:06 +02:00
Björn Petersen 633037133d Merge pull request #323 from deltachat/caller-idle
Caller idle
2018-06-05 01:04:58 +02:00
B. Petersen 9a48e7fc22 also stop the idle-thread when the screen goes off, this is not always in sync with the ForegroundDetector 2018-06-05 01:02:26 +02:00
B. Petersen 9e7abb5843 Update messenger-backend submodule. 2018-06-04 22:11:56 +02:00
B. Petersen f7f443b389 make sure, the idle-wakelock is also released on errors 2018-06-04 18:23:21 +02:00
B. Petersen 80723477ca check if the idle-thread is alive before giving up to start one 2018-06-04 15:25:12 +02:00
Björn Petersen 725be98844 Merge pull request #320 from t-oster/fix-request-camera-permissions
Request permissions to use the Camera before starting Capture
2018-06-04 13:08:38 +02:00
B. Petersen 5b506b0f94 if camera permissions are not granted by the user, show a dialog with some explanations 2018-06-04 00:24:33 +02:00
B. Petersen 20d6c20577 use a unique request-code-id for requesting camera-permissions 2018-06-04 00:22:48 +02:00
B. Petersen 9ad5e88f21 verbose logging on idle/interrupIdle and belonging places 2018-06-02 23:32:03 +02:00
Thomas Oster 38499761ad Request permissions to use the Camera before starting Capture 2018-06-02 22:21:17 +02:00
B. Petersen add621416f remove superfluous 'synchronized' 2018-06-01 21:30:16 +02:00
B. Petersen f872917fd4 make sure subsequent idle-stops are executed only once 2018-06-01 12:01:02 +02:00
B. Petersen e502b02cb6 start thread using start() instead of synchronous run() 2018-05-31 22:41:48 +02:00
B. Petersen be03bc1b5f handle the idleThread in the android part 2018-05-30 15:04:20 +02:00
B. Petersen 677a59a8cb wake locks should be handled by the caller 2018-05-30 13:18:59 +02:00
B. Petersen 6822e0e504 update translations 2018-05-29 22:03:36 +02:00
B. Petersen 0614e7d426 Update messenger-backend submodule. 2018-05-29 22:02:01 +02:00
B. Petersen f4fc4e6d86 update makefile 2018-05-29 22:01:43 +02:00
B. Petersen 866396a93b Update messenger-backend submodule. 2018-05-28 17:32:16 +02:00
B. Petersen 2517cbfb99 update makefile 2018-05-28 17:31:58 +02:00
Björn Petersen aab59911fb Merge pull request #316 from flortsch/patch-1
Fix typo and spacing in strings.xml
2018-05-27 23:15:08 +02:00
Florian Latifi b54a8431b1 Fix typo and spacing in strings.xml 2018-05-27 21:56:43 +02:00
B. Petersen cb69af5f6d update translations 2018-05-25 14:33:09 +02:00
B. Petersen 304497a91a add Danish translation 2018-05-23 11:36:27 +02:00
B. Petersen 18cce1e6f7 update translations 2018-05-23 11:28:33 +02:00
B. Petersen a86f7efd9e typo 2018-05-23 11:23:21 +02:00
Björn Petersen 53aba77523 Merge pull request #301 from testbird/patch-4
ImportExportExplain: use "autocrypt setup" as elsewhere
2018-05-23 11:21:41 +02:00
B. Petersen af365933a3 rework push/poll settings 2018-05-22 12:30:17 +02:00
B. Petersen 51d80e4b25 simplify background-mode options 2018-05-20 23:59:01 +02:00
Björn Petersen fbbf1a5f3e Merge pull request #314 from deltachat/play-around-with-poll
Add background-moe options
2018-05-20 18:27:43 +02:00
B. Petersen 1006fbb599 do not connect/disconnect when permanent push is enabled 2018-05-20 18:23:53 +02:00
B. Petersen 1713aa6474 improve background fetch settings dialog 2018-05-20 18:19:47 +02:00
B. Petersen ff5acaa7f5 reflect changes on background mode selection 2018-05-20 17:37:01 +02:00
B. Petersen 9cb0d119a7 add an option for background mode 2018-05-20 13:26:36 +02:00
B. Petersen 6d75112dfd update Italian translation 2018-05-19 15:05:19 +02:00
B. Petersen 496c9b082f as high-level-disconnect adds a job, a separate thread is no longer needed 2018-05-19 15:02:15 +02:00
Björn Petersen 349fb12a05 Merge pull request #310 from comradekingu/patch-5
Small language rework
2018-05-19 15:00:38 +02:00
Allan Nordhøy a7054fc2e6 needed → grant, and license descriptive strings reverted 2018-05-19 01:17:20 +02:00
B. Petersen faacf510b2 implement basic poll 2018-05-18 18:54:01 +02:00
B. Petersen 6ce08ef461 adapt to new configure-connect api 2018-05-18 18:17:41 +02:00
Allan Nordhøy f2fb935d3b Small language rework 2018-05-18 12:29:40 +02:00
B. Petersen 80ab5305ca typo 2018-05-18 00:15:54 +02:00
B. Petersen 3441162de4 Update messenger-backend submodule. 2018-05-17 22:26:38 +02:00
B. Petersen b695015e8f update translations 2018-05-17 22:26:29 +02:00
B. Petersen e50bf6ef95 bump version 2018-05-17 22:26:13 +02:00
B. Petersen 3ca55ad986 Update messenger-backend submodule. 2018-05-17 18:02:16 +02:00
Björn Petersen 40ff8268a8 Merge pull request #308 from testbird/patch-5
doubled & typo
2018-05-16 15:23:47 +02:00
testbird 2e7fac05ba Update SettingsAdvFragment.java 2018-05-16 15:04:26 +02:00
B. Petersen a42996892d bump version 2018-05-15 23:24:44 +02:00
B. Petersen 3e926becba Update messenger-backend submodule. 2018-05-15 23:23:47 +02:00
B. Petersen a1eeb25dff changelog 2018-05-15 23:23:33 +02:00
B. Petersen a1f4b64c4a Update messenger-backend submodule. 2018-05-12 00:37:40 +02:00
B. Petersen 5673b25e52 refactor connect-functions 2018-05-12 00:36:40 +02:00
B. Petersen f755add1d2 bump version 2018-05-11 15:21:58 +02:00
B. Petersen 60dd8098c4 Update messenger-backend submodule. 2018-05-11 15:20:49 +02:00
B. Petersen 5823d04a20 update changelog and translations 2018-05-11 15:20:30 +02:00
B. Petersen 3cdfa949e9 Update messenger-backend submodule. 2018-05-11 15:13:39 +02:00
B. Petersen b69eaddddf add a labs-option to disable the logo overlay 2018-05-11 15:13:15 +02:00
B. Petersen 137b32303f refine qr-show layout 2018-05-09 12:51:16 +02:00
B. Petersen da87705fb8 layout show-qr activity 2018-05-09 01:21:55 +02:00
B. Petersen d808adeb39 derive qr-scan and qr-show activities from AppCompat, add back button and title 2018-05-08 17:28:07 +02:00
testbird 86eea66267 ImportExportExplain: use "autocrypt setup" as elsewhere 2018-04-22 15:41:08 +02:00
55 changed files with 1634 additions and 293 deletions
+17 -5
View File
@@ -1,16 +1,18 @@
_Please read the guidelines linked above, especially when you are a first time contributor. Remove this text and provide some basic informations below, if applicable. Remove template content that is not applicable._
<!--
Please read the guidelines linked above, especially when you are a first time contributor. Remove this text and provide some basic informations below, if applicable. Remove template content which is not applicable.
-->
**Delta Chat version**
See settings dialog …
<!-- See settings dialog … -->
**Expected behavior**
What is the expected output?
<!-- What is the expected output? -->
**Actual behavior**
What do you see instead?
<!-- What do you see instead? -->
**Steps to reproduce the problem**
@@ -19,10 +21,14 @@ What do you see instead?
**Screen snapshots**
If applicable …
<!-- If applicable … -->
**Debug logs**
<details>
<summary>Logs</summary>
```
<!--
If applicable, debug logs can be copied from within the Delta Chat app:
Open the _Settings_ menu -> _About_ -> _version number|Info_.
@@ -32,3 +38,9 @@ Alternatively from the Android system log:
` adb logcat -v time -s DeltaChat `
This log contains private data (e.g. mail address, provider information) which shall be removed or anonymised prior to posting.
-->
```
</details>
+44
View File
@@ -1,5 +1,49 @@
# Delta Chat Changelog
## v0.18.2
2018-06-23
* Fix initial configure process to hang at 95% under some circumstances
## v0.18.0
2018-06-21
* Speed up message sending/receiving
* Retry failed sending/receiving jobs just in the moment the networks becomes available again
* Make message sending/receiving more reliable
* Handle attachment file names with non-ASCII characters correctly
* Paging through images made available by Angelo Fuchs
* Several connection issues with different configurations were fixed by Thomas Oster
* Improve chat-folder creation by Thomas Oster
* Request permissions before using the camera; added by Thomas Oster
* Key import improved by Thomas Oster
* Improve background and foreground message fetching reliability
* Try to use the permanent notification only when really needed
* Update internal sqlite library from 3.22.0 to 3.23.1
* Update internal libEtPan library from 1.7 to 1.8
* Add Danish translation from Ole Carlsen
* Update Albania, Basque, Danish, Italian, Norwegian, Dutch, Polish, Portuguese, Russian and Telugu translations
## v0.17.3
2018-05-17
* Fix system messages appearing twice
* Fix: Use all gossipped verifications in verified groups
* Update Basque, Polish, Russian and Ukrainian translations
## v0.17.2
2018-05-15
* Fix problem with adding formerly uncontacted members to groups
* Unblock manually blocked members when they are created manually as contact again
## v0.17.1
2018-05-11
* Improve QR code scanning screens
* Add a labs-option to disabled the new QR logo overlay
* Update Russian translations
## v0.17.0
2018-05-07
+3 -3
View File
@@ -120,11 +120,11 @@ android {
}*/
defaultConfig {
minSdkVersion 14 // 14: Android 4.0 Ice Cream Sandwich 2011 (Telegram default), 21: Android 5.0 Lollipop 2014 (recommended for InstantRun)
minSdkVersion 14 // 14: Android 4.0 Ice Cream Sandwich 2011 (Telegram default), 21: Android 5.0 Lollipop 2014 (provides JobScheduler, recommended for InstantRun)
targetSdkVersion 25 // 25: Nougat. CAVE: Do NOT target "Andoid O" without checking the background tasks carefully, see https://developer.android.com/preview/behavior-changes.html#back-all . As long as we target "Nougat", everything works as expected even for "Andoid O" or later
// in general, we should not change the target without reason; eg. after the switch to Nougat, the camera stops working (see https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/en )
versionName "0.17.0" // do NOT forget to increase defaultConfig.versionCode!
versionCode 517
versionName "0.18.2" // do NOT forget to increase defaultConfig.versionCode!
versionCode 534
}
}
+4 -3
View File
@@ -1193,9 +1193,6 @@ LOCAL_SRC_FILES := \
./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_write_file.c \
./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_write_generic.c \
./messenger-backend/libs/libetpan/src/low-level/mime/mailmime_write_mem.c \
./messenger-backend/libs/libetpan/src/low-level/nntp/newsnntp.c \
./messenger-backend/libs/libetpan/src/low-level/nntp/newsnntp_socket.c \
./messenger-backend/libs/libetpan/src/low-level/nntp/newsnntp_ssl.c \
./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp.c \
./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp_helper.c \
./messenger-backend/libs/libetpan/src/low-level/smtp/mailsmtp_oauth2.c \
@@ -1647,6 +1644,7 @@ LOCAL_SRC_FILES += \
./messenger-backend/src/mrlot.c \
./messenger-backend/src/mrmailbox.c \
./messenger-backend/src/mrmailbox_configure.c \
./messenger-backend/src/mrmailbox_connect.c \
./messenger-backend/src/mrmailbox_e2ee.c \
./messenger-backend/src/mrmailbox_imex.c \
./messenger-backend/src/mrmailbox_keyhistory.c \
@@ -1664,6 +1662,9 @@ LOCAL_SRC_FILES += \
./messenger-backend/src/mrsmtp.c \
./messenger-backend/src/mrsqlite3.c \
./messenger-backend/src/mrstock.c \
./messenger-backend/src/mrstrbuilder.c \
./messenger-backend/src/mrstrencode.c \
./messenger-backend/src/mrtoken.c \
./messenger-backend/src/mrtools.c \
./messenger-backend/src/mruudecode.c \
./messenger-backend/cmdline/cmdline.c \
+36 -31
View File
@@ -90,31 +90,6 @@ static void s_init_globals(JNIEnv *env, jclass MrMailbox_class)
}
/* setup threads, only called directly by the backed */
int mrosnative_setup_thread(mrmailbox_t* mailbox)
{
if( s_jvm == NULL ) {
mrmailbox_log_error(mailbox, 0, "Not ready, cannot setup thread.");
return 0;
}
mrmailbox_log_info(mailbox, 0, "Attaching C-thread to Java VM...");
JNIEnv* env = NULL;
(*s_jvm)->AttachCurrentThread(s_jvm, &env, NULL);
mrmailbox_log_info(mailbox, 0, "Attaching ok.");
return 1;
}
void mrosnative_unsetup_thread(mrmailbox_t* mailbox)
{
mrmailbox_log_info(mailbox, 0, "Detaching C-thread from Java VM...");
(*s_jvm)->DetachCurrentThread(s_jvm);
mrmailbox_log_info(mailbox, 0, "DeltaChat", "Detaching done.");
}
/* tools */
static jintArray mrarray2jintArray_n_mrarray_unref(JNIEnv *env, mrarray_t* ca)
@@ -260,9 +235,9 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getBlobdir(JNIEnv *env, jcla
}
JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_configureAndConnect(JNIEnv *env, jclass cls)
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_configure(JNIEnv *env, jclass cls)
{
return (jint)mrmailbox_configure_and_connect(get_mrmailbox_t(env, cls));
mrmailbox_configure(get_mrmailbox_t(env, cls));
}
@@ -278,15 +253,45 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_isConfigured(JNIEnv *env, jclas
}
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_connect(JNIEnv *env, jclass cls)
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_performJobs(JNIEnv *env, jclass cls)
{
mrmailbox_connect(get_mrmailbox_t(env, cls));
dc_perform_imap_jobs(get_mrmailbox_t(env, cls));
}
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_disconnect(JNIEnv *env, jclass cls)
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_idle(JNIEnv *env, jclass cls)
{
mrmailbox_disconnect(get_mrmailbox_t(env, cls));
dc_perform_imap_idle(get_mrmailbox_t(env, cls));
}
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_interruptIdle(JNIEnv *env, jclass cls)
{
dc_interrupt_imap_idle(get_mrmailbox_t(env, cls));
}
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_fetch(JNIEnv *env, jclass cls)
{
dc_perform_imap_fetch(get_mrmailbox_t(env, cls));
}
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_performSmtpJobs(JNIEnv *env, jclass cls)
{
dc_perform_smtp_jobs(get_mrmailbox_t(env, cls));
}
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_performSmtpIdle(JNIEnv *env, jclass cls)
{
dc_perform_smtp_idle(get_mrmailbox_t(env, cls));
}
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_interruptSmtpIdle(JNIEnv *env, jclass cls)
{
dc_interrupt_smtp_idle(get_mrmailbox_t(env, cls));
}
@@ -113,11 +113,13 @@
<activity
android:name=".QRshowActivity"
android:theme="@style/Theme.MessengerProj.AppCompat"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
</activity>
<activity
android:name=".QRscanActivity"
android:theme="@style/Theme.MessengerProj.AppCompat"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
</activity>
@@ -55,9 +55,7 @@ public class ApplicationLoader extends Application {
public static volatile boolean isScreenOn = false;
public static volatile boolean mainInterfacePaused = true;
public static PowerManager.WakeLock backendWakeLock = null;
public static PowerManager.WakeLock wakeupWakeLock = null;
private static PowerManager.WakeLock stayAwakeWakeLock = null;
public static PowerManager.WakeLock convertVideoWakeLock = null;
public static int fontSize;
@@ -148,17 +146,20 @@ public class ApplicationLoader extends Application {
try {
PowerManager pm = (PowerManager) ApplicationLoader.applicationContext.getSystemService(Context.POWER_SERVICE);
backendWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "backendWakeLock" /*any name*/);
// bakendWakeLock _is_ reference counted by the backend (every acquire() has a release())
imapWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "imapWakeLock");
imapWakeLock.setReferenceCounted(false); // if the idle-thread is killed for any reasons, it is better not to rely on reference counting
wakeupWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "wakeupWakeLock" /*any name*/);
wakeupWakeLock.setReferenceCounted(false);
smtpWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "smtpWakeLock");
smtpWakeLock.setReferenceCounted(false); // if the idle-thread is killed for any reasons, it is better not to rely on reference counting
stayAwakeWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "stayAwakeWakeLock" /*any name*/);
stayAwakeWakeLock.setReferenceCounted(false);
convertVideoWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "convertVideoWakeLock" /*any name*/);
convertVideoWakeLock.setReferenceCounted(false);
afterForgroundWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "afterForegroundWakeLock");
afterForgroundWakeLock.setReferenceCounted(false);
} catch (Exception e) {
Log.e("DeltaChat", "Cannot acquire wakeLock");
Log.e("DeltaChat", "Cannot create wakeLocks");
}
// create a MrMailbox object; as android stops the App by just killing it, we do never call MrMailboxUnref()
@@ -169,7 +170,10 @@ public class ApplicationLoader extends Application {
// start keep-alive service that restarts the app as soon it is terminated
// (this is done by just marking the service as START_STICKY which recreates the service as
// it goes away which also inititialized the app indirectly by calling this function)
applicationContext.startService(new Intent(applicationContext, KeepAliveService.class));
/*if( getPermanentPush() ) {
applicationContext.startService(new Intent(applicationContext, KeepAliveService.class));
}*/
// init locale
try {
@@ -178,12 +182,16 @@ public class ApplicationLoader extends Application {
e.printStackTrace();
}
// track screen on/off
// track screen and network states
try {
final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
final BroadcastReceiver mReceiver = new ScreenReceiver();
applicationContext.registerReceiver(mReceiver, filter);
final BroadcastReceiver mNetworkStateReceiver = new NetworkStateReceiver();
applicationContext.registerReceiver(mNetworkStateReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION));
} catch (Exception e) {
e.printStackTrace();
}
@@ -214,8 +222,9 @@ public class ApplicationLoader extends Application {
// open() should be called before MessagesController.getInstance() as this also initilizes directories based upon getBlobdir().
File dbfile = new File(getFilesDirFixed(), "messenger.db");
MrMailbox.open(dbfile.getAbsolutePath());
if( MrMailbox.isConfigured()!=0 ) {
MrMailbox.connect();
if( MrMailbox.isConfigured()!=0 /*&& ApplicationLoader.getPermanentPush()*/ ) {
//ApplicationLoader.imapForeground = true;
ApplicationLoader.startThreads();
}
// create other default objects
@@ -225,6 +234,10 @@ public class ApplicationLoader extends Application {
ImageLoader.getInstance();
MediaController.getInstance();
NotificationsController.getInstance(); // force instace creation which also does some init stuff
if( !isScreenOn ) {
applicationContext.startService(new Intent(applicationContext, KeepAliveService.class));
}
}
@Override
@@ -260,8 +273,146 @@ public class ApplicationLoader extends Application {
return false;
}
public static void stayAwakeForAMoment()
static private int fetchMode = -1; // 0: push, 1: poll once per minute
public static boolean getPermanentPush()
{
stayAwakeWakeLock.acquire(1*60*1000); // 1 Minute to wait for "after chat" messages, after that, we sleep most time, see wakeupWakeLock
return true;
/*
if( fetchMode == -1 ) {
SharedPreferences preferences = applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
fetchMode = preferences.getInt("fetch_mode", 1);
}
return fetchMode==0;
*/
}
public static void setPermanentPush(boolean permanentPush)
{
fetchMode = permanentPush? 0 : 1;
SharedPreferences preferences = applicationContext.getSharedPreferences("mainconfig", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("fetch_mode", fetchMode);
editor.apply();
if( permanentPush ) {
applicationContext.startService(new Intent(applicationContext, KeepAliveService.class));
}
else {
applicationContext.stopService(new Intent(applicationContext, KeepAliveService.class));
}
}
private static final Object threadsCritical = new Object();
private static boolean imapThreadStartedVal;
private static final Object imapThreadStartedCond = new Object();
public static Thread imapThread = null;
private static PowerManager.WakeLock imapWakeLock = null;
private static boolean smtpThreadStartedVal;
private static final Object smtpThreadStartedCond = new Object();
public static Thread smtpThread = null;
private static PowerManager.WakeLock smtpWakeLock = null;
public static PowerManager.WakeLock afterForgroundWakeLock = null;
//public static boolean imapForeground = false;
public static void startThreads()
{
synchronized(threadsCritical) {
if (imapThread == null || !imapThread.isAlive()) {
synchronized (imapThreadStartedCond) {
imapThreadStartedVal = false;
}
imapThread = new Thread(new Runnable() {
@Override
public void run() {
// raise the starting condition
// after acquiring a wakelock so that the process is not terminated.
// as imapWakeLock is not reference counted that would result in a wakelock-gap is not needed here.
imapWakeLock.acquire();
synchronized (imapThreadStartedCond) {
imapThreadStartedVal = true;
imapThreadStartedCond.notifyAll();
}
Log.i("DeltaChat", "###################### IMAP-Thread started. ######################");
while (true) {
imapWakeLock.acquire();
MrMailbox.performJobs();
MrMailbox.fetch();
imapWakeLock.release();
MrMailbox.idle();
}
}
}, "imapThread");
imapThread.start();
}
if (smtpThread == null || !smtpThread.isAlive()) {
synchronized (smtpThreadStartedCond) {
smtpThreadStartedVal = false;
}
smtpThread = new Thread(new Runnable() {
@Override
public void run() {
smtpWakeLock.acquire();
synchronized (smtpThreadStartedCond) {
smtpThreadStartedVal = true;
smtpThreadStartedCond.notifyAll();
}
Log.i("DeltaChat", "###################### SMTP-Thread started. ######################");
while (true) {
smtpWakeLock.acquire();
MrMailbox.performSmtpJobs();
smtpWakeLock.release();
MrMailbox.performSmtpIdle();
}
}
}, "smtpThread");
smtpThread.start();
}
}
}
public static void waitForThreadsRunning()
{
try {
synchronized( imapThreadStartedCond ) {
while( !imapThreadStartedVal ) {
imapThreadStartedCond.wait();
}
}
synchronized( smtpThreadStartedCond ) {
while( !smtpThreadStartedVal ) {
smtpThreadStartedCond.wait();
}
}
}
catch( Exception e ) {
e.printStackTrace();
}
}
/*public static void scheduleStopImapThread()
{
//Log.i("DeltaChat", "IMAP-thread scheduled to stop.");
//imapForeground = false;
//MrMailbox.interruptIdle();
}*/
}
@@ -48,6 +48,7 @@ import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.util.Log;
import android.util.SparseIntArray;
import android.util.TypedValue;
import android.view.Gravity;
@@ -82,6 +83,7 @@ import com.b44t.messenger.Components.RecyclerListView;
import com.b44t.messenger.Components.SizeNotifierFrameLayout;
import com.b44t.messenger.ActionBar.Theme;
import java.io.Console;
import java.io.File;
import java.net.URLDecoder;
import java.util.ArrayList;
@@ -1210,6 +1212,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private void processSelectedAttach(int which) {
if (which == ChatAttachAlert.ATTACH_BUTTON_IDX_CAMERA ) {
if (Build.VERSION.SDK_INT >= 23 && getParentActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
getParentActivity().requestPermissions(new String[]{Manifest.permission.CAMERA}, LaunchActivity.REQ_CAMERA_PERMISSION_ID);
return;
}
try {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File image = AndroidUtilities.generatePicturePath();
@@ -1277,6 +1283,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
presentFragment(fragment);
} else if (which == ChatAttachAlert.ATTACH_BUTTON_IDX_VIDEO) {
try {
if (Build.VERSION.SDK_INT >= 23 && getParentActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
getParentActivity().requestPermissions(new String[]{Manifest.permission.CAMERA}, LaunchActivity.REQ_CAMERA_PERMISSION_ID);
return;
}
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
File video = AndroidUtilities.generateVideoPath();
if (video != null) {
@@ -2798,7 +2808,15 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if( /*(Build.VERSION.SDK_INT >= 16 && message.isVideo()) ||*/ message.type == MessageObject.MO_TYPE1_PHOTO || message.isGif()) {
PhotoViewer.getInstance().setParentActivity(getParentActivity());
PhotoViewer.getInstance().openPhoto(message, message.type != MessageObject.MO_TYPE0_TEXT ? dialog_id : 0, ChatActivity.this);
//PhotoViewer.getInstance().openPhoto(message, message.type != MessageObject.MO_TYPE0_TEXT ? dialog_id : 0,
// ChatActivity.this, getPhotosInChat());
//ArrayList<Object> photos = getPhotosInChat();
int index = getIndexOfCellPhoto(cell);
//PhotoViewer.getInstance().openPhoto(null, 0, ChatActivity.this, photos, index);
ArrayList<MessageObject> photoMessages = getPhotoMessages();
PhotoViewer.getInstance().openPhotoList(message, message.type != MessageObject.MO_TYPE0_TEXT ? dialog_id : 0,
ChatActivity.this, photoMessages, index);
} else if (message.type == MessageObject.MO_TYPE9_FILE || message.type == MessageObject.MO_TYPE3_VIDEO ) {
AndroidUtilities.openForViewOrShare(getParentActivity(), message.getId(), Intent.ACTION_VIEW);
}
@@ -2818,7 +2836,45 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
return new Holder(view);
}
@Override
private ArrayList<MessageObject> getPhotoMessages() {
ArrayList<MessageObject> photos = new ArrayList<>();
for(int msg_index = 0; msg_index < m_msglist.length; msg_index ++) {
MrMsg mrMsg = MrMailbox.getMsg(m_msglist[msg_index]);
switch (mrMsg.getType()) {
case MrMsg.MR_MSG_IMAGE:
case MrMsg.MR_MSG_GIF:
{
TLRPC.Message msg = mrMsg.get_TLRPC_Message();
// generateLayout replaces emojis in text and other text rendering actions.
MessageObject photoMsg = new MessageObject(msg, false);
photos.add(photoMsg);
}
}
}
return photos;
}
private int getIndexOfCellPhoto(ChatMessageCell callingCell) {
int photoCount = 0;
for(int msg_index = 0; msg_index < m_msglist.length; msg_index ++) {
MrMsg msg = MrMailbox.getMsg(m_msglist[msg_index]);
switch (msg.getType()) {
case MrMsg.MR_MSG_IMAGE:
case MrMsg.MR_MSG_GIF:
{
if(callingCell.getMessageObject().getId() == msg.getId())
return photoCount; // count up until now.
photoCount ++;
}
}
}
return 0; // didn't find the matching photo.
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int i) {
if (i >= 0 && i < m_msglist.length) {
View view = holder.itemView;
@@ -196,13 +196,6 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
if( !showArchivedOnly ) {
ActionBarMenu menu = actionBar.createMenu();
if (!onlySelect) {
if( qr_enabled ) {
qrScanItem = menu.addItem(ID_SCAN_QR, R.drawable.ic_ab_qr);
}
passcodeItem = menu.addItem(ID_LOCK_APP, R.drawable.ic_ab_lock_screen);
updateButtons();
}
final ActionBarMenuItem item = menu.addItem(0, R.drawable.ic_ab_search).setIsSearchField(true, true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() {
@Override
public void onSearchExpand() {
@@ -277,6 +270,13 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
}
});
item.getSearchField().setHint(ApplicationLoader.applicationContext.getString(R.string.Search));
if (!onlySelect) {
passcodeItem = menu.addItem(ID_LOCK_APP, R.drawable.ic_ab_lock_screen);
if( qr_enabled ) {
qrScanItem = menu.addItem(ID_SCAN_QR, R.drawable.ic_ab_qr);
}
updateButtons();
}
headerItem = menu.addItem(0, R.drawable.ic_ab_other);
headerItem.addSubItem(ID_NEW_CHAT, ApplicationLoader.applicationContext.getString(R.string.NewChat));
@@ -284,7 +284,7 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
if(!onlySelect) {
if( qr_enabled ) {
//headerItem.addSubItem(ID_NEW_VERIFIED_GROUP, ApplicationLoader.applicationContext.getString(R.string.NewVerifiedGroup));
headerItem.addSubItem(ID_SHOW_QR, ApplicationLoader.applicationContext.getString(R.string.QrShowInviteCode));
headerItem.addSubItem(ID_SHOW_QR, ApplicationLoader.applicationContext.getString(R.string.QrShowVerifyCode));
}
headerItem.addSubItem(ID_DEADDROP, ApplicationLoader.applicationContext.getString(R.string.Deaddrop));
headerItem.addSubItem(ID_SETTINGS, ApplicationLoader.applicationContext.getString(R.string.Settings));
@@ -75,6 +75,12 @@ public class AvatarUpdater implements PhotoCropActivity.PhotoEditActivityDelegat
}
public void openCamera() {
if (Build.VERSION.SDK_INT >= 23 && parentFragment != null && parentFragment.getParentActivity() != null) {
if (parentFragment.getParentActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
parentFragment.getParentActivity().requestPermissions(new String[]{Manifest.permission.CAMERA}, LaunchActivity.REQ_CAMERA_PERMISSION_ID);
return;
}
}
try {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File image = AndroidUtilities.generatePicturePath();
@@ -26,23 +26,22 @@ package com.b44t.messenger.Components;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Application;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import java.util.concurrent.CopyOnWriteArrayList;
import com.b44t.messenger.ApplicationLoader;
import com.b44t.messenger.KeepAliveService;
import static com.b44t.messenger.ApplicationLoader.applicationContext;
@SuppressLint("NewApi")
public class ForegroundDetector implements Application.ActivityLifecycleCallbacks {
public interface Listener {
void onBecameForeground();
void onBecameBackground();
}
private int refs;
private int refs = 0;
private boolean wasInBackground = true;
private long enterBackgroundTime = 0;
private CopyOnWriteArrayList<Listener> listeners = new CopyOnWriteArrayList<>();
private static ForegroundDetector Instance = null;
public static ForegroundDetector getInstance() {
@@ -62,29 +61,22 @@ public class ForegroundDetector implements Application.ActivityLifecycleCallback
return refs == 0;
}
public void addListener(Listener listener) {
listeners.add(listener);
}
public void removeListener(Listener listener) {
listeners.remove(listener);
}
@Override
public void onActivityStarted(Activity activity) {
if (++refs == 1) {
Log.i("DeltaChat", "-------------------- Activity started --------------------");
refs++;
if (refs == 1) {
if (System.currentTimeMillis() - enterBackgroundTime < 200) {
wasInBackground = false;
}
//Log.i("DeltaChat", "switch to foreground");
for (Listener listener : listeners) {
try {
listener.onBecameForeground();
} catch (Exception e) {
}
}
}
applicationContext.stopService(new Intent(applicationContext, KeepAliveService.class));
//ApplicationLoader.imapForeground = true;
ApplicationLoader.startThreads(); // we call this without checking getPermanentPush() to have a simple guarantee that push is always active when the app is in foregroud (startIdleThread makes sure the thread is not started twice)
}
public boolean isWasInBackground(boolean reset) {
@@ -100,17 +92,27 @@ public class ForegroundDetector implements Application.ActivityLifecycleCallback
@Override
public void onActivityStopped(Activity activity) {
if (--refs == 0) {
Log.i("DeltaChat", "-------------------- Activity stopped --------------------");
if( refs <= 0 ) {
Log.i("DeltaChat", String.format("Bad activity count: activityCount=%d", refs));
return;
}
refs--;
if (refs == 0) {
enterBackgroundTime = System.currentTimeMillis();
wasInBackground = true;
//Log.i("DeltaChat", "switch to background");
for (Listener listener : listeners) {
try {
listener.onBecameBackground();
} catch (Exception e) {
}
}
ApplicationLoader.afterForgroundWakeLock.acquire(60*1000);
/*if( !ApplicationLoader.getPermanentPush() ) {
ApplicationLoader.scheduleStopImapThread();;
}*/
}
else {
Log.i("DeltaChat", String.format("Not yet switched to background, %d activities left", refs));
}
}
@@ -124,6 +126,7 @@ public class ForegroundDetector implements Application.ActivityLifecycleCallback
@Override
public void onActivityPaused(Activity activity) {
// pause/resume will also be called when the app is partially covered by a dialog
}
@Override
@@ -838,7 +838,7 @@ public class ContactsActivity extends BaseFragment implements NotificationCenter
textCell.setText(mContext.getString(R.string.NewContactTitle), false);
}
else if( i == rowInviteViaQr) {
textCell.setText(mContext.getString(R.string.QrShowInviteCode), false);
textCell.setText(mContext.getString(R.string.QrShowVerifyCode), false);
}
}
else if( type == ROWTYPE_CONTACT ) {
@@ -51,7 +51,7 @@ public class KeepAliveService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// START_STICKY ensured, the service is recreated as soon it is terminted for any reasons.
// START_STICKY ensured, the service is recreated as soon it is terminated for any reasons.
// as ApplicationLoader.onCreate() is called before a service starts, there is no more to do here,
// the app is just running fine.
MrMailbox.log_i("DeltaChat", "*** KeepAliveService.onStartCommand()");
@@ -741,11 +741,13 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
}
public static final int REQ_CONTACT_N_STORAGE_PERMISON_ID = 1;
public static final int REQ_CAMERA_PERMISSION_ID = 50;
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQ_CONTACT_N_STORAGE_PERMISON_ID || requestCode == 3 || requestCode == 4 || requestCode == 5) {
if (requestCode == REQ_CONTACT_N_STORAGE_PERMISON_ID || requestCode == 3 || requestCode == 4 || requestCode == 5
|| requestCode == REQ_CAMERA_PERMISSION_ID) {
int grantedCount = 0;
String msg = "";
for (int i = 0; i < permissions.length; i++) {
@@ -772,6 +774,9 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
case Manifest.permission.RECORD_AUDIO:
msg += "- " + ApplicationLoader.applicationContext.getString(R.string.PermissionNoAudio) + "\n\n";
break;
case Manifest.permission.CAMERA:
msg += "- " + ApplicationLoader.applicationContext.getString(R.string.PermissionCamera) + "\n\n";
break;
}
}
}
@@ -823,7 +828,6 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa
if (PhotoViewer.getInstance().isVisible()) {
PhotoViewer.getInstance().onPause();
}
ApplicationLoader.stayAwakeForAMoment();
}
@Override
@@ -2359,6 +2359,9 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener,
@TargetApi(16)
private boolean convertVideo(final MessageObject messageObject) {
ApplicationLoader.convertVideoWakeLock.acquire(10*60*1000);
String videoPath = messageObject.videoEditedInfo.originalPath;
long startTime = messageObject.videoEditedInfo.startTime;
long endTime = messageObject.videoEditedInfo.endTime;
@@ -2405,6 +2408,7 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener,
if (!inputFile.canRead() || !isPreviousOk) {
didWriteData(messageObject, cacheFile, true, true);
preferences.edit().putBoolean("isPreviousOk", true).apply();
ApplicationLoader.convertVideoWakeLock.release();
return false;
}
@@ -2794,10 +2798,12 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener,
} else {
preferences.edit().putBoolean("isPreviousOk", true).apply();
didWriteData(messageObject, cacheFile, true, true);
ApplicationLoader.convertVideoWakeLock.release();
return false;
}
preferences.edit().putBoolean("isPreviousOk", true).apply();
didWriteData(messageObject, cacheFile, true, error);
ApplicationLoader.convertVideoWakeLock.release();
return true;
}
}
@@ -89,6 +89,11 @@ public class MessageObject {
public ArrayList<TextLayoutBlock> textLayoutBlocks;
/**
*
* @param message The outer message.
* @param generateLayout Set to true for raw text messages, so emojis and other graphical elements get rendered.
*/
public MessageObject(TLRPC.Message message, boolean generateLayout) {
if (textPaint == null) {
textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
@@ -167,6 +172,7 @@ public class MessageObject {
}
}
}
// TODO: change 1000 here to MO_TYPE1000_INIT_VAL
if (oldType != 1000 && oldType != type) {
generateThumbs(false);
}
@@ -51,13 +51,19 @@ public class MrMailbox {
public native static void close();
public native static String getBlobdir();
public native static int configureAndConnect();
public native static void configure();
public native static void stopOngoingProcess();
public native static int isConfigured();
public native static void connect();
public native static void disconnect();
public native static void performJobs();
public native static void fetch();
public native static void idle();
public native static void interruptIdle();
public native static void performSmtpJobs();
public native static void performSmtpIdle();
public native static void interruptSmtpIdle();
public native static void setConfig(String key, String value);
public native static void setConfigInt(String key, int value);
@@ -231,8 +237,6 @@ public class MrMailbox {
public final static int MR_EVENT_GET_STRING = 2091;
public final static int MR_EVENT_GET_QUANTITIY_STRING = 2092;
public final static int MR_EVENT_HTTP_GET = 2100;
public final static int MR_EVENT_WAKE_LOCK = 2110;
public static final Object m_lastErrorLock = new Object();
public static int m_lastErrorCode = 0;
@@ -246,7 +250,12 @@ public class MrMailbox {
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.configureProgress, (int)data1);
if( data1 == 0 || data1 == 1000 ) {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.configureEnded, (int)data1);
}
else {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.configureProgress, (int)data1);
}
}
});
return 0;
@@ -425,9 +434,11 @@ public class MrMailbox {
URL url = new URL(CPtr2String(data1));
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
urlConnection.setConnectTimeout(10*1000);
InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
@@ -438,20 +449,10 @@ public class MrMailbox {
urlConnection.disconnect();
}
}
catch(Exception e) {}
catch(Exception e) {
e.printStackTrace();
}
return String2CPtr(httpContent);
case MR_EVENT_WAKE_LOCK:
if( data1 != 0 ) {
ApplicationLoader.backendWakeLock.acquire();
}
else {
if( !ApplicationLoader.wakeupWakeLock.isHeld()) {
ApplicationLoader.wakeupWakeLock.acquire(500); /* make sure, subsequent release/acquires do not make the CPU sleep */
}
ApplicationLoader.backendWakeLock.release();
}
return 0;
}
return 0;
}
@@ -468,19 +469,20 @@ public class MrMailbox {
public native static int getCurrentTime ();
public final static int MEDIA_PHOTOVIDEO = 0;
public static void getMediaCount(final long uid, final int type, final int classGuid, boolean fromCache) {
public static void getMediaCount(final long uid, final int type) {
Utilities.globalQueue.postRunnable(new Runnable() {
@Override
public void run() {
int[] media = new int[0];
if( type == MEDIA_PHOTOVIDEO ) {
media = MrMailbox.getChatMedia((int)uid, MrMsg.MR_MSG_IMAGE, MrMsg.MR_MSG_VIDEO);
final int[] media = MrMailbox.getChatMedia((int)uid, MrMsg.MR_MSG_IMAGE, MrMsg.MR_MSG_VIDEO);
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.mediaCountDidLoaded,
uid, media.length, false /*not from cache*/, type, media);
}
});
}
NotificationCenter.getInstance().postNotificationName(NotificationCenter.mediaCountDidLoaded,
uid, media.length, false /*not from cache*/, type, media);
}
});
}
@@ -0,0 +1,63 @@
/*******************************************************************************
*
* Delta Chat Android
* (C) 2013-2016 Nikolai Kudashov
* (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see http://www.gnu.org/licenses/ .
*
******************************************************************************/
package com.b44t.messenger;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetworkStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent == null || intent.getExtras() == null)
return;
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = manager.getActiveNetworkInfo();
boolean connected = false;
if(ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
MrMailbox.log_i("DeltaChat", "++++++++++++++++++ Connected ++++++++++++++++++");
connected = true;
} else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
MrMailbox.log_i("DeltaChat", "++++++++++++++++++ Disconnected ++++++++++++++++++");
connected = false;
}
// we interrupt idle also when going disconnected - otherwise the core will recognize the disconnected change
// only after a timeout of typically 30 seconds; during this time a _reconnect_ will not be possible as the imap-thread
// still hangs somewhere and waiting for response
ApplicationLoader.startThreads();
ApplicationLoader.waitForThreadsRunning();
MrMailbox.interruptSmtpIdle();
MrMailbox.interruptIdle();
}
}
@@ -72,12 +72,12 @@ public class NotificationsController {
private long opened_dialog_id = 0;
private int total_unread_count = 0;
private int personal_count = 0;
private boolean notifyCheck = false;
//private boolean notifyCheck = false;
private boolean inChatSoundEnabled = true;
private String launcherClassName;
private Runnable notificationDelayRunnable;
private PowerManager.WakeLock notificationDelayWakelock;
//private Runnable notificationDelayRunnable;
//private PowerManager.WakeLock notificationDelayWakelock;
private long lastSoundPlay;
private long lastSoundOutPlay;
@@ -124,13 +124,13 @@ public class NotificationsController {
try {
PowerManager pm = (PowerManager) ApplicationLoader.applicationContext.getSystemService(Context.POWER_SERVICE);
notificationDelayWakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "notificationDelayWakelock" /*any name*/);
notificationDelayWakelock.setReferenceCounted(false);
//notificationDelayWakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "notificationDelayWakelock" /*any name*/);
//notificationDelayWakelock.setReferenceCounted(false);
} catch (Exception e) {
}
notificationDelayRunnable = new Runnable() {
/*notificationDelayRunnable = new Runnable() {
@Override
public void run() {
//Log.i("DeltaChat", "delay reached");
@@ -139,14 +139,14 @@ public class NotificationsController {
delayedPushMessages.clear();
}
try {
if (notificationDelayWakelock.isHeld()) {
notificationDelayWakelock.release();
}
//if (notificationDelayWakelock.isHeld()) {
// notificationDelayWakelock.release();
//}
} catch (Exception e) {
}
}
};
};*/
setBadge(0); // the set badge number survives application restarts, so reset it when creating
}
@@ -84,7 +84,6 @@ import java.util.Locale;
@SuppressWarnings("unchecked")
public class PhotoViewer implements NotificationCenter.NotificationCenterDelegate, GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
private int classGuid;
private PhotoViewerProvider placeProvider;
private boolean isVisible;
@@ -2137,8 +2136,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
pickerView.updateSelectedCount(placeProvider.getSelectedCount(), false);
}
private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLocation fileLocation, final ArrayList<MessageObject> messages, final ArrayList<Object> photos, int index, final PlaceProviderObject object) {
classGuid = ApplicationLoader.generateClassGuid();
private void setupPhotoShow() {
currentMessageObject = null;
currentFileLocation = null;
currentPathObject = null;
@@ -2170,7 +2168,6 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
imagesArrTemp.clear();
//currentUserAvatarLocation = null;
containerView.setPadding(0, 0, 0, 0);
currentThumb = object != null ? object.thumb : null;
menuItem.setVisibility(View.VISIBLE);
bottomLayout.setVisibility(View.VISIBLE);
//menuItem.hideSubItem(gallery_menu_showall);
@@ -2201,8 +2198,15 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
radialProgressViews[a].setBackgroundState(-1, false);
}
}
}
if (messageObject != null && messages == null) {
private void onPhotoShow(final MessageObject messageObject, final TLRPC.FileLocation fileLocation,
final ArrayList<MessageObject> messages, final ArrayList<Object> photos,
int index, final PlaceProviderObject object) {
currentThumb = object != null ? object.thumb : null;
setupPhotoShow();
if (messageObject != null && messages == null) { // display a single image from a message.
imagesArr.add(messageObject);
if (currentAnimation != null) {
needSearchImageInArr = false;
@@ -2212,18 +2216,18 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
//menuItem.showSubItem(gallery_menu_showall);
}
setImageIndex(0, true);
} else if (fileLocation != null) {
} else if (fileLocation != null) { // display a single file from a known resource
avatarsDialogId = object.dialogId;
imagesArrLocations.add(fileLocation);
imagesArrLocationsSizes.add(object.size);
avatarsArr.add(new TLRPC.TL_photoEmpty());
setImageIndex(0, true);
//currentUserAvatarLocation = fileLocation;
} else if (messages != null) {
} else if (messages != null) { // display a list of files from messages
//menuItem.showSubItem(gallery_menu_showall);
opennedFromMedia = true;
imagesArr.addAll(messages);
if (!opennedFromMedia) {
if (!opennedFromMedia) { // TODO: check this line, reads like: Must never happen
Collections.reverse(imagesArr);
index = imagesArr.size() - index - 1;
}
@@ -2232,7 +2236,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
imagesByIds[message.getDialogId() == currentDialogId ? 0 : 1].put(message.getId(), message);
}
setImageIndex(index, true);
} else if (photos != null) {
} else if (photos != null) { // display a list of files from gallery, to be able to select one of them
if (sendPhotoType == 0) {
checkImageView.setVisibility(View.VISIBLE);
}
@@ -2262,9 +2266,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
if (currentAnimation == null) {
if (currentDialogId != 0 && totalImagesCount == 0) {
MrMailbox.getMediaCount(currentDialogId, MrMailbox.MEDIA_PHOTOVIDEO, classGuid, true);
MrMailbox.getMediaCount(currentDialogId, MrMailbox.MEDIA_PHOTOVIDEO);
if (mergeDialogId != 0) {
MrMailbox.getMediaCount(mergeDialogId, MrMailbox.MEDIA_PHOTOVIDEO, classGuid, true);
MrMailbox.getMediaCount(mergeDialogId, MrMailbox.MEDIA_PHOTOVIDEO);
}
} else if (avatarsDialogId != 0) {
//MessagesController.getInstance().loadDialogPhotos(avatarsDialogId, 0, 80, 0, true, classGuid);
@@ -2666,8 +2670,12 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
if (size[0] == 0) {
size[0] = -1;
}
TLRPC.PhotoSize thumbLocation = messageObject != null ? FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 100) : null;
imageReceiver.setImage(fileLocation, null, null, placeHolder != null ? new BitmapDrawable(null, placeHolder) : null, thumbLocation != null ? thumbLocation.location : null, "b", size[0], null, avatarsDialogId != 0);
TLRPC.PhotoSize thumbLocation = messageObject != null ?
FileLoader.getClosestPhotoSizeWithSize(messageObject.photoThumbs, 100) : null;
imageReceiver.setImage(fileLocation, null, null,
placeHolder != null ? new BitmapDrawable(null, placeHolder) : null,
thumbLocation != null ? thumbLocation.location : null, null,
size[0], null, avatarsDialogId != 0);
}
} else {
imageReceiver.setNeedsQualityThumb(false);
@@ -2693,17 +2701,19 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
return isVisible && !disableShowCheck && object != null && currentPathObject != null && object.equals(currentPathObject);
}
public void openPhoto(final MessageObject messageObject, long dialogId, final PhotoViewerProvider provider) {
openPhoto(messageObject, null, null, null, 0, provider, null, dialogId);
public void openPhoto(final MessageObject messageObject, long dialogId, final PhotoViewerProvider provider, ArrayList<Object> photos, int index) {
openPhoto(messageObject, null, null, photos, index, provider, null, dialogId);
}
public void openPhoto(final TLRPC.FileLocation fileLocation, final PhotoViewerProvider provider) {
openPhoto(null, fileLocation, null, null, 0, provider, null, 0);
}
/*public void openPhoto(final ArrayList<MessageObject> messages, final int index, long dialogId, final PhotoViewerProvider provider) {
openPhoto(messages.get(index), null, messages, null, index, provider, null, dialogId);
}*/
public void openPhotoList(final MessageObject messageObject, final long dialogId,
final PhotoViewerProvider provider, final ArrayList<MessageObject> photoMessages,
final int index) {
openPhoto(messageObject, null, photoMessages, null, index, provider, null, dialogId);
}
public void openPhotoForSelect(final ArrayList<Object> photos, final int index, int type, final PhotoViewerProvider provider, ChatActivity chatActivity) {
sendPhotoType = type;
@@ -2726,8 +2736,13 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
return animationInProgress != 0;
}
public void openPhoto(final MessageObject messageObject, final TLRPC.FileLocation fileLocation, final ArrayList<MessageObject> messages, final ArrayList<Object> photos, final int index, final PhotoViewerProvider provider, ChatActivity chatActivity, long dialogId) {
if (parentActivity == null || isVisible || provider == null && checkAnimation() || messageObject == null && fileLocation == null && messages == null && photos == null) {
private void openPhoto(final MessageObject messageObject, final TLRPC.FileLocation fileLocation,
final ArrayList<MessageObject> messages, final ArrayList<Object> photos,
final int index, final PhotoViewerProvider provider,
final ChatActivity chatActivity, final long dialogId) {
// TODO: the next line wants some parenthesis to clear the intent.
if (parentActivity == null || isVisible || provider == null && checkAnimation() ||
messageObject == null && fileLocation == null && messages == null && photos == null) {
return;
}
@@ -2921,7 +2936,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
}
};
} else {
if (photos != null) {
if (photos != null) { // is always true, if object==null && photos==null we return at the beginning of the method.
windowLayoutParams.flags = 0;
windowLayoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN;
wm.updateViewLayout(windowView, windowLayoutParams);
@@ -1,6 +1,7 @@
package com.b44t.messenger;
import android.Manifest;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -8,7 +9,9 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.zxing.integration.android.IntentIntegrator;
@@ -16,7 +19,7 @@ import com.google.zxing.integration.android.IntentResult;
import com.journeyapps.barcodescanner.CaptureManager;
import com.journeyapps.barcodescanner.CompoundBarcodeView;
public class QRscanActivity extends Activity {
public class QRscanActivity extends AppCompatActivity {
private CaptureManager capture;
private CompoundBarcodeView barcodeScannerView;
@@ -28,8 +31,12 @@ public class QRscanActivity extends Activity {
setContentView(R.layout.activity_qrscan);
assert getSupportActionBar() != null;
getSupportActionBar().setTitle(R.string.QrScan);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
barcodeScannerView = (CompoundBarcodeView)findViewById(R.id.zxing_barcode_scanner);
barcodeScannerView.setStatusText(getString(R.string.QrScan));
barcodeScannerView.setStatusText(getString(R.string.QrScanHint)+"\n ");
if (savedInstanceState != null) {
init(barcodeScannerView, getIntent(), savedInstanceState);
@@ -46,6 +53,17 @@ public class QRscanActivity extends Activity {
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case android.R.id.home: finish(); return true;
}
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
@NonNull int[] grantResults) {
@@ -1,16 +1,26 @@
package com.b44t.messenger;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
public class QRshowActivity extends Activity implements NotificationCenter.NotificationCenterDelegate {
import java.util.Hashtable;
public class QRshowActivity extends AppCompatActivity implements NotificationCenter.NotificationCenterDelegate {
public final static int WHITE = 0xFFFFFFFF;
public final static int BLACK = 0xFF000000;
@@ -23,8 +33,7 @@ public class QRshowActivity extends Activity implements NotificationCenter.Notif
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_qrshow);
num_joiners = 0;
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // keeping the screen on also avoids falling back from IDLE to POLL
Bundle b = getIntent().getExtras();
int chat_id = 0;
@@ -32,7 +41,39 @@ public class QRshowActivity extends Activity implements NotificationCenter.Notif
chat_id = b.getInt("chat_id");
}
ImageView imageView = (ImageView) findViewById(R.id.myImage);
assert getSupportActionBar() != null;
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
String hint = "";
if( chat_id != 0 ) {
// verified-group
String groupName = MrMailbox.getChat(chat_id).getName();
hint = String.format(ApplicationLoader.applicationContext.getString(R.string.QrJoinVerifiedGroupHint), groupName);
getSupportActionBar().setTitle(groupName);
getSupportActionBar().setSubtitle(R.string.QrJoinVerifiedGroupTitle);
}
else {
// verify-contact
String selfName = MrMailbox.getConfig("displayname", ""); // we cannot use MrContact.getDisplayName() as this would result in "Me" instead of
String nameNaddr = "";
if( selfName.isEmpty() ) {
selfName = MrMailbox.getConfig("addr", "unknown");
nameNaddr = selfName;
}
else {
nameNaddr = String.format("%s (%s)", selfName, MrMailbox.getConfig("addr", ""));
}
hint = String.format(ApplicationLoader.applicationContext.getString(R.string.QrVerifyContactHint), nameNaddr);
getSupportActionBar().setTitle(selfName);
getSupportActionBar().setSubtitle(R.string.QrVerifyContactTitle);
}
TextView hintBelowQr = (TextView) findViewById(R.id.qrShowHint);
hintBelowQr.setText(AndroidUtilities.replaceTags(hint));
num_joiners = 0;
ImageView imageView = (ImageView) findViewById(R.id.qrImage);
try {
Bitmap bitmap = encodeAsBitmap(MrMailbox.getSecurejoinQr(chat_id));
imageView.setImageBitmap(bitmap);
@@ -49,9 +90,22 @@ public class QRshowActivity extends Activity implements NotificationCenter.Notif
NotificationCenter.getInstance().removeObserver(this, NotificationCenter.secureJoinInviterProgress);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case android.R.id.home: finish(); return true;
}
return false;
}
Bitmap encodeAsBitmap(String str) throws WriterException {
BitMatrix result;
try {
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
hints.put(EncodeHintType.ERROR_CORRECTION, "8");
result = new MultiFormatWriter().encode(str,
BarcodeFormat.QR_CODE, WIDTH, HEIGHT, null);
} catch (IllegalArgumentException iae) {
@@ -71,9 +125,26 @@ public class QRshowActivity extends Activity implements NotificationCenter.Notif
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, w, 0, 0, w, h);
if( MrMailbox.getConfigInt("qr_overlay_logo", 1)!=0 ) {
Bitmap overlay = BitmapFactory.decodeResource(ApplicationLoader.applicationContext.getResources(), R.drawable.qr_overlay);
putOverlay(bitmap, overlay);
}
return bitmap;
}
public void putOverlay(Bitmap bitmap, Bitmap overlay) {
int bw = bitmap.getWidth();
int bh = bitmap.getHeight();
int ow = bw/6;
int oh = bh/6;
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(overlay, null, new Rect(bw/2-ow/2, bh/2-oh/2, bw/2+ow/2, bh/2+oh/2), paint);
}
@Override
public void didReceivedNotification(int id, Object... args) {
if( id==NotificationCenter.secureJoinInviterProgress) {
@@ -33,11 +33,21 @@ public class ScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
MrMailbox.log_i("DeltaChat", "*** Screen off");
MrMailbox.log_i("DeltaChat", "-------------------- Screen off --------------------");
ApplicationLoader.isScreenOn = false;
// also stop the idle-thread when the screen goes off, this is not always in sync with the ForegroundDetector
/*if( !ApplicationLoader.getPermanentPush() ) {
ApplicationLoader.scheduleStopImapThread();
}*/
ApplicationLoader.applicationContext.startService(new Intent(ApplicationLoader.applicationContext, KeepAliveService.class));
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
MrMailbox.log_i("DeltaChat", "*** Screen on");
MrMailbox.log_i("DeltaChat", "-------------------- Screen on --------------------");
ApplicationLoader.isScreenOn = true;
ApplicationLoader.applicationContext.stopService(new Intent(ApplicationLoader.applicationContext, KeepAliveService.class));
}
//NotificationCenter.getInstance().postNotificationName(NotificationCenter.screenStateChanged);
}
@@ -79,6 +79,9 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
{
// encoding done
new File(messageObject.messageOwner.attachPath+".increation").delete();
ApplicationLoader.startThreads();
ApplicationLoader.waitForThreadsRunning();
MrMailbox.interruptSmtpIdle();
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messagesSentOrRead);
}
}
@@ -355,19 +355,8 @@ public class SettingsAccountFragment extends BaseFragment implements Notificatio
}
// try to connect, this results in an MR_EVENT_CONFIGURE_ENDED resp. NotificationCenter.configureEnded event
Utilities.searchQueue.postRunnable(new Runnable() {
@Override
public void run() {
final int res = MrMailbox.configureAndConnect();
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.configureEnded, (int)res);
}
});
}
});
ApplicationLoader.startThreads();
MrMailbox.configure();
}
@Override
@@ -394,7 +383,7 @@ public class SettingsAccountFragment extends BaseFragment implements Notificatio
progressDialog = null;
}
if( (int)args[0]==1 ) {
if( (int)args[0]!=0 ) {
if (fromIntro) {
presentFragment(new ChatlistActivity(null), true);
} else {
@@ -67,6 +67,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
private int cacheRow;
private int autoplayGifsRow;
private int textSizeRow;
private int backgroupModeRow;
private int showUnknownSendersRow;
private int sendByEnterRow;
private int raiseToSpeakRow;
@@ -82,6 +83,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
private int passcodeRow;
private int manageKeysRow;
private int labsEnableQrRow;
private int labsQrOverlayLogoRow;
private int backupRow;
private int backupShadowRow;
private int rowCount;
@@ -128,6 +130,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
// for simplicity, we do not hide discouraged/supported options anywhere else.
otherHeaderRow = rowCount++;
passcodeRow = rowCount++;
backgroupModeRow = -1;//rowCount++;
autoplayGifsRow = rowCount++;
textSizeRow = rowCount++; // for now, we have the font size in the advanced settings; this is because the numberical selection is a little bit weird and does only affect the message text. It would be better to use the font size defined by the system with "sp" (Scale-independent Pixels which included the user's font size preference)
sendByEnterRow = rowCount++;
@@ -142,6 +145,14 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
cacheRow = -1;// for now, the - non-functional - page is reachable by the "storage settings" in the "android App Settings" only
manageKeysRow = rowCount++;
labsEnableQrRow = rowCount++;
if( MrMailbox.getConfigInt("qr_enabled", 0) != 0 ) {
labsQrOverlayLogoRow = rowCount++;
}
else {
labsQrOverlayLogoRow = -1;
}
backupRow = rowCount++;
backupShadowRow = rowCount++;
@@ -223,7 +234,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
else {
AlertDialog.Builder builder1 = new AlertDialog.Builder(getParentActivity());
builder1.setTitle("Labs: QR code options");
builder1.setMessage("With the QR code options you can easily connect to other Delta Chat users by just scanning a QR code. Moverover, this securely transfers the encryption keys in both directions and allows the creation of verified groups.\n\nStay tuned for more information about this on the mailing ist :)\n\nDo you want to enable this experimental feature that may still contain issues?");
builder1.setMessage("With the QR code options you can easily connect to other Delta Chat users by scanning a QR code. Moreover, this securely transfers the encryption keys in both directions and allows the creation of verified groups.\n\nStay tuned for more information about this on the mailing ist :)\n\nDo you want to enable this experimental feature that may still contain issues?");
builder1.setNegativeButton(R.string.Cancel, null);
builder1.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
@Override
@@ -238,6 +249,9 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
showDialog(builder1.create());
}
}
else if( i == labsQrOverlayLogoRow ) {
MrMailbox.setConfigInt("qr_overlay_logo", MrMailbox.getConfigInt("qr_overlay_logo", 1)!=0? 0 : 1);
}
else if (i == blockedRow) {
presentFragment(new BlockedUsersActivity());
}
@@ -297,7 +311,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
}
});
progressDialog.show();
Utilities.searchQueue.postRunnable(new Runnable() {
new Thread(new Runnable() {
@Override
public void run() {
final String sc = MrMailbox.initiateKeyTransfer();
@@ -328,7 +342,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
}
});
}
});
}).start();
}
});
showDialog(builder1.create());
@@ -386,6 +400,31 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
});
showDialog(builder.create());
}
else if( i == backgroupModeRow ) {
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
builder.setTitle(R.string.FetchMode);
builder.setMessage(AndroidUtilities.replaceTags(ApplicationLoader.applicationContext.getString(R.string.FetchModeExplain)));
builder.setPositiveButton(R.string.FetchModeSaveBattery, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ApplicationLoader.setPermanentPush(false);
if (listView != null) {
listView.invalidateViews();
}
}
});
builder.setNegativeButton(R.string.FetchModePersistentConnection, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ApplicationLoader.setPermanentPush(true);
if (listView != null) {
listView.invalidateViews();
}
}
});
builder.setNeutralButton(R.string.Cancel, null);
showDialog(builder.create());
}
else if (i == passcodeRow) {
if (UserConfig.passcodeHash.length() > 0) {
presentFragment(new PasscodeActivity(PasscodeActivity.SCREEN2_ENTER_CODE2));
@@ -530,7 +569,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
MrMailbox.m_lastErrorString = "";
}
Utilities.searchQueue.postRunnable(new Runnable() {
new Thread(new Runnable() {
@Override
public void run() {
final int res = MrMailbox.imex(progressWhat, imexDir.getAbsolutePath());
@@ -541,7 +580,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
}
});
}
});
}).start();
}
@Override
@@ -679,6 +718,10 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
int size = preferences.getInt("msg_font_size", SettingsAdvFragment.defMsgFontSize());
textCell.setTextAndValue(mContext.getString(R.string.TextSize), String.format("%d", size), true);
}
else if( i == backgroupModeRow ) {
boolean permanentPush = ApplicationLoader.getPermanentPush();
textCell.setTextAndValue(mContext.getString(R.string.FetchMode), permanentPush? mContext.getString(R.string.FetchModePersistentConnection) : mContext.getString(R.string.FetchModeSaveBattery), true);
}
else if (i == passcodeRow) {
String val = UserConfig.passcodeHash.length() > 0? mContext.getString(R.string.Enabled) : mContext.getString(R.string.Disabled);
textCell.setTextAndValue(mContext.getString(R.string.Passcode), val, true);
@@ -710,6 +753,9 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
} else if (i == labsEnableQrRow) {
boolean qr_enabled = MrMailbox.getConfigInt("qr_enabled", 0)!=0;
textCell.setTextAndCheck("Labs: QR code options", qr_enabled, true);
} else if (i == labsQrOverlayLogoRow) {
boolean qr_overlay_logo = MrMailbox.getConfigInt("qr_overlay_logo", 1)!=0;
textCell.setTextAndCheck("Labs: QR logo overlay", qr_overlay_logo, true);
}
}
else if (type == ROWTYPE_HEADER) {
@@ -739,7 +785,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
return ROWTYPE_HEADER;
} else if ( i == sendByEnterRow || i == raiseToSpeakRow || i == autoplayGifsRow
|| i==showUnknownSendersRow || i == directShareRow || i==e2eEncryptionRow
|| i==labsEnableQrRow) {
|| i==labsEnableQrRow || i==labsQrOverlayLogoRow ) {
return ROWTYPE_CHECK;
} else {
return ROWTYPE_TEXT_SETTINGS;
@@ -35,32 +35,12 @@ import android.util.Log;
public class TimerReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
// for a discussion about the different approaches to save batter, see https://github.com/deltachat/deltachat-android/issues/104#issuecomment-331670326
Log.i("DeltaChat", "-------------------- on receive timer --------------------");
try {
ApplicationLoader.wakeupWakeLock.acquire(); // do this first!
MrMailbox.log_i("DeltaChat", "*** TimerReceiver.onReceive()");
scheduleNextAlarm();
// we assume, the IMAP thread is alive. I cannot imagine, the thread was killed with the App being running.
// (if the whole App was killed, the IMAP thread is already started by MrMailbox.connect() if we're here)
// (the thread itself will reconnect to the IMAP server as needed)
// however, it seems as if the threads sleep longer than ususal, check this by calling heartbeat() manually
//
// CAVE: MrMailbox.heartbeat() must not be called from the mainthread - otherwise eg. when the network hangs,
// this function returns only after the network timeout and the ui thread may hang for minutes ...
Utilities.searchQueue.postRunnable(new Runnable() {
@Override
public void run() {
MrMailbox.heartbeat();
}
});
// create the next alarm in about a minute
scheduleNextAlarm();
} finally {
// Always release the wakelock, _if_ there is more to do, the backend acquires an additional wakelock using MR_EVENT_WAKE_LOCK
ApplicationLoader.wakeupWakeLock.release();
}
ApplicationLoader.startThreads();
ApplicationLoader.waitForThreadsRunning();
}
public static void scheduleNextAlarm()
@@ -74,7 +54,7 @@ public class TimerReceiver extends BroadcastReceiver {
AlarmManager alarmManager = (AlarmManager) ApplicationLoader.applicationContext.getSystemService(Activity.ALARM_SERVICE);
if( Build.VERSION.SDK_INT >= 23 ) {
// a simple AlarmManager.set() is no longer send in the new DOZE mode
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, alarmIntent);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, alarmIntent);
}
else {
alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, alarmIntent);
@@ -29,12 +29,14 @@
package com.b44t.messenger;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
@@ -217,6 +219,10 @@ public class WallpapersActivity extends BaseFragment implements NotificationCent
public void onClick(DialogInterface dialogInterface, int i) {
try {
if (i == 0) {
if (Build.VERSION.SDK_INT >= 23 && getParentActivity().checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
getParentActivity().requestPermissions(new String[]{Manifest.permission.CAMERA}, LaunchActivity.REQ_CAMERA_PERMISSION_ID);
return;
}
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File image = AndroidUtilities.generatePicturePath();
if (image != null) {
@@ -347,7 +347,7 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
MrMailbox.m_lastErrorString = "";
}
Utilities.searchQueue.postRunnable(new Runnable() {
new Thread(new Runnable() {
@Override
public void run() {
final int res = MrMailbox.imex(MrMailbox.MR_IMEX_IMPORT_BACKUP, backupFile);
@@ -358,7 +358,7 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
}
});
}
});
}).start();
}
@Override
@@ -382,7 +382,8 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
}
if( (int)args[0]==1 ) {
MrMailbox.connect(); // import does not automatically connect
//ApplicationLoader.imapForeground = true;
ApplicationLoader.startThreads(); // import does not automatically connect
KeepAliveService kas = KeepAliveService.getInstance();
if( kas != null ) {
kas.updateForegroundNotification();
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

@@ -1,12 +1,25 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/myImage"
android:id="@+id/qrImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
android:layout_height="wrap_content"
android:layout_weight="1"/>
</RelativeLayout>
<TextView
android:id="@+id/qrShowHint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16sp"
android:layout_marginEnd="8sp"
android:layout_marginStart="8sp"
android:text=""
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat"
android:textSize="16sp"/>
</LinearLayout>
@@ -0,0 +1,475 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="AppName">Delta Chat</string>
<!--chats view-->
<string name="Settings">Opsætning</string>
<string name="NewGroup">Ny gruppe</string>
<string name="NoResult">Intet resultat.</string>
<string name="NoChats">Ingen samtaler endnu.</string>
<string name="DeleteChat">Slette samtale</string>
<string name="SelectChat">Vælge samtale…</string>
<string name="Search">Søge</string>
<string name="MuteNotifications">Ingen lyd påmindelser</string>
<string name="MuteFor">Ingen lyd til %1$s</string>
<string name="UnmuteNotifications">Lyd</string>
<string name="Draft">Kladde</string>
<!--audio view-->
<string name="NoAudio">Filer fra musik bibliotek.</string>
<string name="AttachMusic">Musik</string>
<!--documents view-->
<string name="SelectFile">Vælge fil</string>
<string name="FreeOfTotal">%1$s af %2$s fri</string>
<string name="ErrorHint">Ukendt fejl</string>
<string name="AccessError">Adgangsfejl</string>
<string name="NoFiles">Ingen filer endnu...</string>
<string name="NotMounted">Lager ikke monteret</string>
<string name="UsbActive">USB overførsel i fremgang</string>
<string name="InternalStorage">Internt lager</string>
<string name="ExternalStorage">Eksternt lager</string>
<string name="SystemRoot">System root</string>
<string name="SdCard">SD kort</string>
<string name="Folder">Mappe</string>
<string name="GalleryInfo">Sende dekomprimerede billeder</string>
<!--chat view-->
<string name="ChatGallery">Galleri</string>
<string name="ChatCamera">Kamera</string>
<string name="NoMessages">Ingen beskeder</string>
<string name="ForwardedMessage">Videresendt besked</string>
<string name="From">Fra</string>
<string name="NoRecent">Ingen nylige</string>
<string name="TypeMessage">Besked</string>
<string name="SlideToCancel">Glide for at annullere</string>
<string name="SaveToDownloads">Gemme i \"Downloads\"</string>
<string name="SaveToMusic">Gemme i \"Music\"</string>
<string name="Share">Dele</string>
<string name="SendItems">Sende %1$s</string>
<string name="ClearRecentEmoji">Rydde nylige emoji?</string>
<string name="AddShortcut">Tilføje kontrol til hjemmeskærm</string>
<string name="ShortcutAdded">Køntrol tilføjet hjemmeskærm</string>
<!--notification-->
<string name="Reply">Svare</string>
<string name="ReplyToGroup">Svare %1$s</string>
<string name="ReplyToContact">Svare %1$s</string>
<!--contacts view-->
<string name="NoContacts">Ingen kontakter endnu.</string>
<!--group create view-->
<string name="SendMessageTo">Sende besked til...</string>
<string name="EnterGroupNamePlaceholder">Indtaste gruppenavn</string>
<!--group info view-->
<string name="AddMember">Tilføje medlem</string>
<string name="Notifications">Påmindelser</string>
<string name="RemoveMember">Fjerne medlem</string>
<!--contact info view-->
<string name="NewContactTitle">Tilføje kontakt</string>
<string name="BlockContact">Blokere kontakt</string>
<string name="DeleteContact">Slette kontakt</string>
<string name="Info">Oplysning</string>
<!--settings view-->
<string name="TextSize">Skriftstørrelse for beskeder</string>
<string name="UnblockContact">Fjerne kontakt blokering</string>
<string name="NoBlocked">Ingen blokerede kontaker endnu</string>
<string name="DefaultForNormalMessages">Normale beskeder</string>
<string name="MessagePreview">Forhåndsvise besked</string>
<string name="DefaultForGroupMessages">Gruppe beskeder</string>
<string name="Sound">Lyd</string>
<string name="InAppNotifications">I program påmindelser</string>
<string name="Vibrate">Vibrere</string>
<string name="ResetAllNotifications">Nulstille alle påmindelser</string>
<string name="NotificationsAndSounds">Påmindelser og lyde</string>
<string name="BlockedContacts">Blokerede kontakter</string>
<string name="Default">Standard</string>
<string name="OnlyIfSilent">Kun når stille</string>
<string name="ChatBackground">Samtale baggrund</string>
<string name="SendByEnter">Sende med ↵</string>
<string name="Help">Hjælp</string>
<string name="Enabled">Til</string>
<string name="Disabled">Fra</string>
<string name="LedColor">LED farve</string>
<string name="BadgeNumber">Bruge ikon for at holde antal hvis muligt</string>
<string name="Short">Kort</string>
<string name="Long">Lang</string>
<string name="RaiseToSpeak">Hæve for at tale</string>
<string name="EditName">Redigere navn</string>
<string name="NotificationsPriority">Vise</string>
<string name="NotificationsPriorityDefault">Normal prioritet</string>
<string name="NotificationsPriorityHigh">Høj prioritet</string>
<string name="NotificationsPriorityMax">Højeste prioritet</string>
<string name="RepeatNotifications">Gentage påmindelser</string>
<string name="NotificationsOther">Andre</string>
<string name="InChatSound">I samtale lyde</string>
<string name="SmartNotifications">Begrænse påmindelser</string>
<string name="SmartNotificationsSoundAtMost">Maks.</string>
<string name="SmartNotificationsTimes">gange</string>
<string name="SmartNotificationsWithin">inden for</string>
<string name="SmartNotificationsMinutes">minutter</string>
<string name="DirectShare">Direkte deling</string>
<string name="DirectShareInfo">Vise nylige samtaler i dele menu</string>
<!--cache view-->
<string name="CacheSettings">Lager</string>
<string name="KeepMedia">Beholde medie</string>
<string name="KeepMediaInfo">Billeder, videor og andre filer fra sky samtaler som <![CDATA[<b>ikke er tilgået</b>]]> i enne periode vil blive fjernet fra denne enhed for at spare lager plads.</string>
<string name="KeepMediaForever">For altid</string>
<!--passcode view-->
<string name="Passcode">Kodeordslås</string>
<string name="ChangePasscode">Ændre kodeord</string>
<string name="ChangePasscodeInfo">Ved opsætning af flere kodeord vil et låse ikon vises ved toppen af samtale listen. Tryk på den for at låse programmet.\n\nBemærk: Hvis kodeordet glemmes skal programmet slettes og geninstalleres.</string>
<string name="PasscodePIN">PIN</string>
<string name="PasscodePassword">Adgangskode</string>
<string name="EnterCurrentPasscode">Indtaste nuværende kodeord</string>
<string name="EnterNewFirstPasscode">Indtaste kodeord</string>
<string name="EnterNewPasscode">Indtaste nyt kodeord</string>
<string name="EnterYourPasscode">Indtaste kodeord</string>
<string name="ReEnterYourPasscode">Genindtaste nyt kodeord</string>
<string name="PasscodeDoNotMatch">Kodeord passer ikke</string>
<string name="AutoLock">Automatisk låse</string>
<string name="AutoLockInfo">Påkræve kodeord hvis væk i en tid.</string>
<string name="UnlockFingerprint">Låse op med fingeraftryk</string>
<string name="FingerprintInfo">Bekræfte fingeraftryk for at fortsætte</string>
<string name="FingerprintNotRecognized">Kan ikke genkende fingeraftryk. Prøv igen.</string>
<!--photo gallery view-->
<string name="SaveToGallery">Gemme til \"Gallery\"</string>
<string name="Of">%1$d af %2$d</string>
<string name="Gallery">Galleri</string>
<string name="AllPhotos">Alle billeder</string>
<string name="AllVideo">Alle videoer</string>
<string name="NoPhotos">Ingen billeder endnu</string>
<string name="NoVideo">Ingen videoer endnu</string>
<string name="CropImage">Beskære billede</string>
<string name="EditImage">Redigere billede</string>
<string name="Enhance">Forbedre</string>
<string name="Highlights">Fremhæve</string>
<string name="Contrast">Kontrast</string>
<string name="Exposure">Eksponering</string>
<string name="Warmth">Varme</string>
<string name="Saturation">Mætning</string>
<string name="Vignette">Vignet</string>
<string name="Shadows">Skygger</string>
<string name="Grain">Korn</string>
<string name="Sharpen">Skærpe</string>
<string name="Fade">Falme</string>
<string name="Tint">Toning</string>
<string name="TintShadows">Skygger</string>
<string name="TintHighlights">Fremhæve</string>
<string name="Curves">Kurver</string>
<string name="CurvesAll">Alle</string>
<string name="CurvesRed">Rød</string>
<string name="CurvesGreen">Grøn</string>
<string name="CurvesBlue">Blå</string>
<string name="Blur">Sløring</string>
<string name="BlurOff">Fra</string>
<string name="BlurLinear">Lineær</string>
<string name="BlurRadial">Radial</string>
<string name="DiscardChanges">Kassere ændringer?</string>
<string name="ClearButton">Rydde</string>
<string name="PickerPhotos">Billeder</string>
<string name="PickerVideo">Video</string>
<!--privacy settings-->
<string name="PrivacySettings">Privatliv og sikkerhed</string>
<string name="SecurityTitle">Sikkerhed</string>
<!--edit video view-->
<string name="SendVideo">Sende video</string>
<!--button titles-->
<string name="Done">Færdig</string>
<string name="Open">Åbne</string>
<string name="Cancel">Afbryde</string>
<string name="Edit">Redigere</string>
<string name="Send">Sende</string>
<string name="CopyToClipboard">Kopiere til klippebord</string>
<string name="Delete">Slette</string>
<string name="Forward">Videresende</string>
<string name="FromCamera">Fra kamera</string>
<string name="FromGalley">Fra \"Gallery\"</string>
<string name="Set">Sætte</string>
<string name="OK">O.k.</string>
<string name="Crop">Beskære</string>
<!--messages-->
<string name="AttachPhoto">Billede</string>
<string name="AttachVideo">Video</string>
<string name="AttachGif">GIF</string>
<string name="AttachContact">Kontakt</string>
<string name="AttachDocument">Fil</string>
<string name="AttachVoiceMessage">Tale besked</string>
<string name="FromSelf">Undertegnet</string>
<!--Alert messages-->
<string name="NoHandleAppInstalled">For at fortsætte installere et program som kan håndtere \'%1$s\' filer.</string>
<string name="ContactAlreadyInGroup">Kontakt er allerede i gruppen.</string>
<string name="ForwardMessagesTo">Videresende valgte beskeder til <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="SendMessagesTo">Sende beskeder til <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="AreYouSureDeleteThisChat">Slette samtale? Den vil ikke længere blive vist i samtale listen, dets bekseder vil forblive på serveren.</string>
<string name="AreYouSureBlockContact">Blokere kontakt?</string>
<string name="AreYouSureDeleteContact">Slette kontakt?</string>
<!--permissions-->
<string name="PermissionContacts">Adgang til kontakter nødvendig for at forbinde med venner på alle enheder.</string>
<string name="PermissionStorage">Lager adgang nødvendig for at sende og gemme billeder, video, musik og andre medier.</string>
<string name="PermissionNoAudio">Tildele mikrofon adgang for at optage tale beskeder.</string>
<string name="PermissionOpenSettings">Opsætning</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
<string name="Intro1Message">Budbringeren med det <![CDATA[<b>største publikum</b>]]> i verden. <![CDATA[<b>Fri</b>]]> og <![CDATA[<b>uafhængig</b>]]>.</string>
<string name="Intro2Headline">Uafhængig</string>
<string name="Intro2Message"><![CDATA[<b>Der er ingen Delta Chat server.</b>]]> Programmet bruger e-post server.</string>
<string name="Intro3Headline">Hurtig</string>
<string name="Intro3Message"><![CDATA[<b>Skubbe beskeder</b>]]> på sekunder.<![CDATA[<br/>]]>Hurtig grænseflade.</string>
<string name="Intro4Headline">Kraftfuld</string>
<string name="Intro4Message"><![CDATA[<b>Ubegrænsede</b>]]> samtaler, billeder, videoer, lyd beskeder og mere. Kan håndteres af flere klienter.</string>
<string name="Intro5Headline">Fri</string>
<string name="Intro5Message"><![CDATA[<b>Delta Chat</b>]]> er gratis for altid.<![CDATA[<br/>]]>Open-source. Ingen reklamer. Ingen Intet abonnement.. Ingen låsning til leverandør.</string>
<string name="Intro6Headline">Krypteret</string>
<string name="Intro6Message"><![CDATA[<b>Krypteret</b>]]> med kun almindelige algoritmer. Meddelelser bliver på servere.</string>
<string name="Intro7Headline">Troværdig</string>
<string name="IntroStartMessaging">Starte besked</string>
<!--plural-->
<plurals name="Members">
<item quantity="one">%d medlem</item>
<item quantity="other">%d medlemmer</item>
</plurals>
<plurals name="Contacts">
<item quantity="one">%d kontakt</item>
<item quantity="other">%d kontakter</item>
</plurals>
<plurals name="MeAndMembers">
<item quantity="one">%d medlem og undertegnet</item>
<item quantity="other">%d medlemmer og undertegnet</item>
</plurals>
<plurals name="NewMessages">
<item quantity="one">%d ny besked</item>
<item quantity="other">%d nye beskeder</item>
</plurals>
<plurals name="messages">
<item quantity="one">%d besked</item>
<item quantity="other">%d beskeder</item>
</plurals>
<plurals name="AreYouSureDeleteMessages">
<item quantity="one">Slette %d besked her og på server.</item>
<item quantity="other">Slette %d beskeder her og på server.</item>
</plurals>
<!-- Translators: The first string placeholder gets replaced with the
text "%d new messages", so the complete sentence would be e.g.
"4 new messages in 2 chats". -->
<plurals name="NewMessagesInChats">
<item quantity="one">%1$s i %2$d samtale</item>
<item quantity="other">%1$s i %2$d samtaler</item>
</plurals>
<plurals name="Chats">
<item quantity="one">%d samtale</item>
<item quantity="other">%d samtaler</item>
</plurals>
<plurals name="Minutes">
<item quantity="one">%d minut</item>
<item quantity="other">%d minutter</item>
</plurals>
<plurals name="Hours">
<item quantity="one">%d time</item>
<item quantity="other">%d timer</item>
</plurals>
<plurals name="Days">
<item quantity="one">%d dag</item>
<item quantity="other">%d dage</item>
</plurals>
<plurals name="Weeks">
<item quantity="one">%d uge</item>
<item quantity="other">%d uger</item>
</plurals>
<plurals name="Months">
<item quantity="one">%d månede</item>
<item quantity="other">%d måneder</item>
</plurals>
<!-- Translators: The second string placeholder gets replaced with the
text "%d minutes", so the complete sentence would be e.g.
"At most 8 notifications within 3 minutes". -->
<plurals name="MaxNotifications">
<item quantity="one">Højst %1$d påmindelse inden for %2$s</item>
<item quantity="other">Højst %1$d påmindelser inde for %2$s</item>
</plurals>
<!--date formatters-->
<string name="formatterMonthYear">MMMM åååå</string>
<string name="formatterMonth">MMM dd</string>
<string name="formatterYear">dd.MM.åååå</string>
<string name="chatDate">EEE, MMMM d</string>
<string name="chatFullDate">EEE, MMMM d, åååå</string>
<string name="formatterWeek">EEE</string>
<string name="formatterDay24H">TT:mm</string>
<string name="formatterDay12H">t:mm a</string>
<string name="formatDateAtTime">%1$s hos %2$s</string>
<string name="AccountSettings">Konto opsætning</string>
<string name="MyAccount">Konto</string>
<string name="MyName">Navn</string>
<string name="MyNameExplain">Navn, vist for modtagere. Hvis tom vil kun e-post adresse blive sendt.</string>
<string name="Password">Adgangskode</string>
<string name="SmtpPassword">SMTP adgangskode</string>
<string name="FromAbove">Fra ovenfor</string>
<string name="SmtpLoginname">SMTP log ind navn</string>
<string name="SmtpPort">SMTP port</string>
<string name="Automatic">Automatisk</string>
<string name="ImapServer">IMAP server</string>
<string name="ImapLoginname">IMAP log ind navn</string>
<string name="SmtpServer">SMTP server</string>
<string name="ImapPort">IMAP port</string>
<string name="InboxHeadline">Indbakke</string>
<string name="OutboxHeadline">Udbakke</string>
<string name="MyAccountExplain">For kendte e-post udbyder bliver ekstra opsætninger bestemt automatisk.</string>
<string name="MyAccountExplain2" >Nogle gange, <![CDATA[<b>]]>skal IMAP aktiveres<![CDATA[</b>]]> i e-post web grænseflade.\n\nKontakt e-post udbyder eller venner ved problemer.</string>
<string name="AccountNotConfigured">Konto ikke opsat</string>
<string name="AboutThisProgram">Om Delta Chat</string>
<string name="NotSet">Ikke angivet</string>
<string name="NewChat">Ny samtale</string>
<string name="Deaddrop">Kontakt forespørgsel</string>
<string name="DeaddropInChatlist">Vise kontakt forespørgsleri samtale liste</string>
<string name="MuteAlways">Altid afbrudt</string>
<string name="AskStartChatWith">Samtale med <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Tryk svar-pilen for at starte samtale.</string>
<string name="NotYetImplemented">Funktion ikke tilgængelig eller ufuldstændig.</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Sendt med Delta Chat Messenger: https://delta.chat</string>
<string name="Name" >Navn</string>
<string name="EmailAddress">E-post adresse</string>
<string name="CannotDeleteContact">Kan ikke slette aktiv bruger, blokere kontakt i stedet. </string>
<string name="BadEmailAddress">Fejlagtig e-post adresse.</string>
<string name="ContactCreated">Kontakt oprettet</string>
<string name="ViewProfile">Vise profil</string>
<!-- Translators: please use a very short string here, it should not much longer than
the string needed for video time+size (0:00, 12,3 Mib) -->
<string name="OneMoment">Øjeblik…</string>
<string name="NoChatsHelp">Start bekseder ved at trykke på \"Ny samtale\" knappen i bunden til højre eller tryk på \"Menu\" knappen for flere valgmuligheder.</string>
<string name="Intro7Message"><![CDATA[<b>Delta Chat</b>]]> er sikker for firma brug, kompatibel og og baseret på standarder.</string>
<string name="InviteMenuEntry">Sende invitationer</string>
<string name="InviteText"> Jeg bruger Delta Chat - %1$s - du kan skrive til mig hos %2$s</string>
<string name="AdvancedSettings">Advanceret</string>
<string name="AskResetNotifications">Nulstille alle påmindelse opsætning og lyde på nuværende side, kontakter og grupper?</string>
<string name="AttachFiles">Vedhæfte filer</string>
<string name="ErrGroupNameEmpty">Indtaste gruppenavn.</string>
<string name="MsgNewGroupDraftHint">Skriv den første besked som tillader andre at svare inden for denne gruppe.\n\n• Det er o.k. hvis ikke alle medlemmer bruger Delta Chat.\n\n• Aflevering af første besked kan tage nogen tid.</string>
<string name="MsgNewGroupDraft">Hej, jeg har lige oprettet gruppen \"%1$s\" til os.</string>
<string name="MsgGroupNameChanged">Gruppe navn ændret fra \"%1$s\" til \"%2$s\".</string>
<string name="MsgGroupImageChanged">Gruppe billede ændret</string>
<string name="MsgMemberAddedToGroup">Medlem %1$s tilføjet.</string>
<string name="MsgMemberRemovedFromToGroup">Medlem %1$s fjernet.</string>
<string name="AskAddMemberToGroup">Tilføje <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> til gruppe?</string>
<string name="AskRemoveMemberFromGroup">Fjerne <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> fra gruppe?</string>
<string name="ErrSelfNotInGroup">Mans skal være medlem af gruppen for at kunne udføre denne handling.</string>
<string name="MsgGroupLeft">Forladt gruppe</string>
<string name="NoMessagesHint">Sende besked til <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>:\n\n• Det er o.k.hvis <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> ikke bruger Delta Chat.\n\n• Levering af første besked kan tage nogen tid.</string>
<string name="SendNRcvReadReceipts">Modtage og sende læse kvitteringer</string>
<string name="PreferE2EEncryption">Foretærkke ende til ende-kryptering</string>
<string name="E2EManagePrivateKeys">Håndtere nøgler</string>
<string name="E2ECompareKeys">Sammenligne nøgler</string>
<string name="ForwardToTitle">Videresende til...</string>
<string name="SelectContact">Vælge kontakt</string>
<string name="DoneHint">Færdig.</string>
<string name="FileNotFound">Kan ikke finde %1$s.</string>
<string name="Error">Fejl: %1$s</string>
<string name="NoNetwork">Netværk ikke tilgængelig.</string>
<string name="Audio">Lyd</string>
<string name="PleaseCutVideoToMaxSize">Komprimere video størrelse til mindre end %1$s.</string>
<string name="PermNotificationTitle">Forbundet til %1$s</string>
<string name="PermNotificationText">Venter på beskeder...</string>
<string name="SettingsFor">Opsætninger til %1$s</string>
<string name="AutoplayGifs">Automatisk afspille GIF</string>
<string name="HelpUrl">https://delta.chat/en/help</string>
<string name="EncryptedMessage">Krypteret besked</string>
<string name="Encryption">Kryptering</string>
<string name="EncrinfoE2EAvailable">Ende til ende-kryptering tilgængelig.</string>
<string name="EncrinfoTransport">Mindst overførsel kryptering til server.</string>
<string name="EncrinfoNone">Ingen kryptering til server.</string>
<string name="EncrinfoFingerprints">Fingeraftryk</string>
<string name="Backup">Sikkerhedskopi</string>
<string name="ImportBackupExplain2">For at importere sikkerhedskopi, kopiere en sikkerhedskopi til <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> og geninstallere programmet.</string>
<string name="ReadReceiptMailBody">Dette er en kvittering for læst besked \"%1$s\".\n\nDet betyder at beskeden blev vist på modtagerens enhed ikke nødvendigvis at indholdet blev læst.</string>
<string name="ReadReceipt">Læse kvittering</string>
<string name="NameAndStatus">Navn og status</string>
<string name="MyStatus">Status</string>
<string name="MyStatusExplain">Status vises bl.a. i e-post sidefod.</string>
<string name="MsgGroupImageDeleted">Gruppe billede slettet.</string>
<string name="AskDeleteGroupImage">Slette gruppe billede?\n\nDette vil have indflydelse på alle enheder for alle gruppe medlemmer.</string>
<string name="ExportImportHeader">Eksportere og importere</string>
<string name="ImportExportExplain">Eksporterede filer indeholder ende-til-ende Autocrypt opsætning! Gem dem på et sikkert sted eller slet dem så hurtigt som muligt.</string>
<string name="EnterPasswordToContinue">Indtaste adgangskode til %1$s for at fortsætte:</string>
<string name="IncorrectPassword">Forkert adgangskode.</string>
<string name="ImportBackupAsk">Sikkerhedskopi fundet på <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nSkal den importeres og bruge al data og opsætninger fra den?</string>
<string name="ImportBackup">Importere sikkerhedskopi</string>
<string name="NoBackupFound">Ingen sikkerhedskopier fundet.\n\nKopiere sikkerhedskopien til <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> og prøv igen. Alternativt tryk \"Start besked\" for at køre den normale opsætning.</string>
<string name="FilesSuccessfullyExported">Filer eksporteret til <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
<string name="ExportBackup">Eksportere sikkerhedskopi</string>
<string name="ExportPrivateKeys">Eksportere hemmelige nøgler</string>
<string name="ImportPrivateKeys">Importere hemmelige nøgler</string>
<string name="ImportPrivateKeysAsk2">Importere hemmelige nøgler fra <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Eksisterende nøgler bliver ikke slettet\n\n• Seneste importeret nøgle bruges som standard nøgle</string>
<string name="NoRecentEmoji">Nylig brugte emoji vises her.</string>
<string name="NotNow">Ikke nu</string>
<string name="ArchiveChat">Arkivere samtale</string>
<string name="UnarchiveChat">Dearkivere samtale</string>
<string name="ArchivedChats">Arkivere samtaler</string>
<string name="Archived">Arkiveret</string>
<string name="LeaveGroup">Forlade gruppe</string>
<string name="AskLeaveGroup">Forlade denne gruppe?</string>
<string name="Never">Aldrig</string>
<string name="AutocryptKeyTransferInitiate">Sende Autocrypt opsætningsbesked</string>
<string name="AutocryptKeyTransfer">Autocrypt opsætningsbesked</string>
<string name="AutocryptKeyTransferMsgBeforeSend">En <![CDATA[<i>]]>Autocrypt opsætningsbesked<![CDATA[</i>]]> sikkert dele ende-til-ende opsætning med andre Autocrypt kompatible programmer.\n\nOpsætningen er krypteret med en opsætningskode som vises her og skal indtastes på den anden enhed.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Opsætning er sendt til undertegnede. Skift til den anden enhedog åben opstningsbekeden. Der vil blive forespurgt til en opsætningskode. Indtast følgende cifre i forespørgselen:\n\n%1$s\n\nNår dette er gjortvil den anden enhed være klar til Autocrypt.</string>
<string name="AutocryptSetupMessageSubject">Autocrypt opsætningsbesked</string>
<string name="AutocryptSetupMessageGeneralBody">Dette er Autocrypt opsætningsbesked brugt til at overføre ende-til-ende opsætning mellem klienter.\n\nFor at dekryptere og bruge opsætning åben beskeden i en Autocrypt kompatibel klient og indtast opsætningskoden vist på kilde enheden.</string>
<string name="AutocryptSetupMessageTapBody">Dette er en Autocrypt besked brugt til at overføre ende-til-ende opsætning mellem klienter.\n\nFor at dekryptere og bruge opsætning, tryk på denne besked.</string>
<string name="AutocryptKeyTransferPleaseEnterCode">Indtast opsætningskode vist på den anden enhed.</string>
<string name="AutocryptKeyTransferBadCode">Opsætningskode er ikke god. Prøv igen.\n\nHvis opsætningskode er glemt send blot en ny Autocrypt besked fra en anden enhed..</string>
<string name="AutocryptKeyTransferSucceeded">Ende-til-ende opsætning overført. Denne enhed er nu klar til at bruge Autocrypt med samme opsætning som anden enhed.</string>
<string name="Retry">Prøv igen</string>
<string name="SelfTalkSubtitle">Beskeder sendt af undertegnet til undertegnet</string>
<string name="QrScan">Skanne QR-kode</string>
<string name="QrShow">Vise QR-kode</string>
<string name="QrScanContainsText">Skannet QR kode indeholder følgende tekst:\n\n%1$s</string>
<string name="QrScanContainsUrl">Skannet QR kode indeholder følgende URL:\n\n%1$s</string>
<string name="OobFingerprint">Fingeraftryk</string>
<string name="OobFingerprintAskOob">Efterprøv kontakt og start samtale med <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="OobFingerprintOk">Kontact <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> efterprøvet. Start samtale?</string>
<string name="OobFingerprintMismatch">Skannet fingeraftryk <![CDATA[<b>]]>passer ikke<![CDATA[</b>]]> det sidst sete fingeraftryk for <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
<string name="OobFingerprintWithoutAddr">QR kode indeholder fingeraftryk men ingen e-post adresse.\n \nFor en uden for bånd efterprøvning, skal en krypteret forbindelse til modtageren først oprettes.</string>
<string name="OobSecureJoinRequested">%1$s tilslutter.</string>
<string name="CannotDecryptBody">Denne besked kan ikke dekrypteres.\n\n• Det kan måske hjælpe at svare på beskeden og bede afsender gensende beskeden.\n\n• I tilfælde Delta Chat er blevet geninstalleret eller et andet e-post program på denne eller en anden enhed bør der sendes en Autocrypt opsætningsbeked fra dem.</string>
<string name="Autocrypt">Automatisk kryptering</string>
<string name="AutocryptExplain"><![CDATA[<i>]]>Autocrypt<![CDATA[</i>]]> er en ny og åben specifikation til ende-til-ende e-post kryptering.\n\nEnde-til-ende opsætning oprettes automatisk efter behov og kan overføres mellem enheder med <![CDATA[<i>]]>Autocrypt opsætningsbeskeder.<![CDATA[</i>]]></string>
<string name="NewVerifiedGroup">Ny efterprøvet gruppe</string>
<string name="SharedChats">Delte samtaler</string>
<string name="VerifiedContact">Efterprøvet kontakt</string>
<string name="Contact">Kontakt</string>
<string name="VerifiedGroup">Bekræftet gruppe</string>
<string name="Group">Gruppe</string>
<string name="EditedNameWillBeShared">Redigeret navn vil blive delt med alle gruppe medlemmer.</string>
<string name="E2EEncryptionPreferred">Ende til ende-kryptering foretrukken.</string>
<string name="OobAddrVerified">%1$s efterprøvet.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$s efterprøvet, præsentere…</string>
<string name="OobAskJoinVerifiedGroup">Tilslutte efterprøvet gruppe <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
%2$s is replaced by a the name of the user that made this action.
Resulting strings might be "Member Alice added by Bob." or 'Group name changed from "Foo" to "Bar" by Claire.
If you do not find a correct grammar for your language you can just use "%1$s (by %2$s)" or "%2$s: %1$s" -->
<string name="ActionByUser">%1$s af %2$s.</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s af undertegnet.</string>
<string name="ExampleEmailAddr">user@example.org</string>
<string name="QrScanHint">Placere kamera over QR koden</string>
<string name="QrShowVerifyCode">Vise QR efterprøve kode</string>
<string name="QrVerifyContactTitle">QR efterprøve kode</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nSkan dette for at opsætte efterprøvet kontakt.</string>
<string name="QrShowInviteCode">Vise QR invitationskode</string>
<string name="QrJoinVerifiedGroupTitle">QR invitationskode</string>
<string name="QrJoinVerifiedGroupHint">Skan dette for at tilslutte efterprøvet gruppe <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchMode">Hente tilstand</string>
<string name="FetchModeSaveBattery">Spare batteri</string>
<string name="FetchModePersistentConnection">Vedvarende forbindelse</string>
<string name="FetchModeExplain">Når hente tilstand bruges <![CDATA[<i>]]>Spar batteri<![CDATA[</i>]]>, nye beskeder vises hvis ikke programmet kører i forgunden og med en gennemsnitsforsinkelse på 30 sekunder hvis programmet ikke bruges. Når enheden er i hvile tilstand kan forsinkelse være længere. Dette er standard tilstand.\n\n<![CDATA[<i>]]>Vedvarende forbindelse<![CDATA[</i>]]> er typisk hurtiger men kan kræve at programmet er hvidlisteti system opsætning for at kunne forbruge mere batteri.\n\nHvilken hente tilstand ønskes at bruge?</string>
<string name="PermissionCamera">Adgang til kamera er nødvendig for at tage billeder eller skanne QR koder.</string>
</resources>
@@ -329,7 +329,8 @@
<string name="AskStartChatWith">Chat mit <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> starten?</string>
<string name="DeaddropHint">Ein Klick auf die Antwort-Pfeile startet einen Chat.</string>
<string name="NotYetImplemented">Diese Funktion ist nicht oder nur unvollständig eingebaut.</string>
<string name="DefaultStatusText">Mit meinem Delta Chat Messenger gesendet: https://delta.chat/de/</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Mit meinem Delta Chat Messenger gesendet: https://delta.chat</string>
<string name="Name" >Name</string>
<string name="EmailAddress">E-Mail-Adresse</string>
<string name="CannotDeleteContact">Der Kontakt kann nicht gelöscht werden, da er verwendet wird; er kann aber blockiert werden.</string>
@@ -435,7 +436,7 @@
<string name="OobSecureJoinRequested">%1$s tritt bei.</string>
<string name="CannotDecryptBody">Diese Nachricht kann nicht entschlüsselt werden.\n\n• Das Problem kann möglicherweie einfach gelöst werden, indem Sie dem Absender eine Nachricht schicken und ihn bitten seine Nachricht erneut zu senden.\n\n• Wenn Sie Delta Chat oder ein anderes E-Mail-Programm auf diesem oder einem anderen Gerät neu eingerichtet haben, wollen Sie vll. das Ende-zu-Ende-Setup mit einer Autocrypt-Setup-Nachricht von dort übertragen.</string>
<string name="Autocrypt">Autocrypt</string>
<string name="AutocryptExplain"><![CDATA[<i>]]>Autocrypt<![CDATA[</i>]]> ist eine neue und offene Spezifikation zur Ende-zu-Ende-Verschlüsselung von E-Mails.\n\nIhr Ende-zu-Ende-Setup wird dabei automatisch eingerichtet uns Sie können es mit <![CDATA[<i>]]>Autocrypt-Setup-Nachrichten<![CDATA[</i>]]> zwischen Geräten übertragen.</string>
<string name="AutocryptExplain"><![CDATA[<i>]]>Autocrypt<![CDATA[</i>]]> ist eine neue und offene Spezifikation zur Ende-zu-Ende-Verschlüsselung von E-Mails.\n\nIhr Ende-zu-Ende-Setup wird dabei automatisch eingerichtet und Sie können es mit <![CDATA[<i>]]>Autocrypt-Setup-Nachrichten<![CDATA[</i>]]> zwischen Geräten übertragen.</string>
<string name="NewVerifiedGroup">Neue verifizierte Gruppe</string>
<string name="SharedChats">Gemeinsame Chats</string>
<string name="VerifiedContact">Verifizierter Kontakt</string>
@@ -443,7 +444,6 @@
<string name="VerifiedGroup">Verifizierte Gruppe</string>
<string name="Group">Gruppe</string>
<string name="EditedNameWillBeShared">Der neue Name wird an alle Gruppenteilnehmern gesendet.</string>
<string name="QrShowInviteCode">QR-Einladungscode zeigen</string>
<string name="E2EEncryptionPreferred">Ende-zu-Ende-Verschlüsselung bevorzugt.</string>
<string name="OobAddrVerified">%1$s verifiziert.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$s verifiziert, warte auf Bestätigung …</string>
@@ -457,4 +457,18 @@
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s von mir.</string>
</resources>
<string name="ExampleEmailAddr">max@mustermann.de</string>
<string name="QrScanHint">Halten Sie Ihre Kamera über den QR Code</string>
<string name="QrShowVerifyCode">Zeige Bestätigungs QR-Code</string>
<string name="QrVerifyContactTitle">Bestätigungs QR-Code</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nScannen Sie dies um einen verifizierten Kontakt zu erstellen.</string>
<string name="QrShowInviteCode">QR-Einladungscode zeigen</string>
<string name="QrJoinVerifiedGroupTitle">Einladungs QR-Code</string>
<string name="QrJoinVerifiedGroupHint">Scannen Sie folgenden Code um der verifizierten Gruppe beizutreten <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchMode">Empfangsmodus</string>
<string name="FetchModeSaveBattery">Batterie sparen</string>
<string name="FetchModePersistentConnection">Dauerhafte Verbindung</string>
<string name="FetchModeExplain">Wenn Sie den Modus <![CDATA[<i>]]>Batterie sparen<![CDATA[</i>]]> verwenden, kommen neue Nachrichten sofort an, während die App geöffnet ist und mit einer Verzögerung von ca 30 Sekunden, wenn die App nicht benutzt wird. Wenn das Gerät in den Schlafmodus umschaltet, kann die Verzögerung größer sein. Das ist die Standard-Einstellung.\n\n<![CDATA[<i>]]>Dauerhafte Verbindung<![CDATA[</i>]]> ist üblicherweise schneller, aber kann es erforden, dass die App in den Systemeinstellungen freigeschaltet werden muss um mehr Batterieverbrauch zu erlauben..\n\nWelchen Empfangsmodus möchten Sie verwenden?</string>
</resources>
@@ -329,7 +329,8 @@
<string name="AskStartChatWith">¿Iniciar una conversación con <b>%1$s</b>?</string>
<string name="DeaddropHint">Haga clic en la flecha de réplica para comenzar una conversación.</string>
<string name="NotYetImplemented">Esta función no está disponible o está incompleta.</string>
<string name="DefaultStatusText">Enviado desde mi aplicación de mensajería Delta Chat: https://delta.chat/es</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Enviado desde mi aplicación de mensajería Delta Chat: https://delta.chat</string>
<string name="Name" >Nombre</string>
<string name="EmailAddress">Dirección de correo</string>
<string name="CannotDeleteContact">No puede borrar contactos en uso. En su lugar, bloquee el contacto.</string>
@@ -137,6 +137,7 @@
<string name="AllVideo">Bideo guztiak</string>
<string name="NoPhotos">Argazkirik ez oraindik</string>
<string name="NoVideo">Bideorik ez oraindik</string>
<string name="CropImage">Moztu irudia</string>
<string name="EditImage">Editatu irudia</string>
<string name="Enhance">Hobetu</string>
<string name="Highlights">Distirak</string>
@@ -144,6 +145,7 @@
<string name="Exposure">Esposizioa</string>
<string name="Warmth">Berotasuna</string>
<string name="Saturation">Saturazioa</string>
<string name="Vignette">Bineta</string>
<string name="Shadows">Gerizak</string>
<string name="Grain">Garaua</string>
<string name="Sharpen">Fokatu</string>
@@ -182,6 +184,7 @@
<string name="FromGalley">Galeriatik</string>
<string name="Set">Ezarrita</string>
<string name="OK">Ados</string>
<string name="Crop">Moztu</string>
<!--messages-->
<string name="AttachPhoto">Argazkia</string>
<string name="AttachVideo">Bideoa</string>
@@ -198,15 +201,30 @@
<string name="AreYouSureDeleteThisChat">Ezabatu txat hau? Ez da txaten zerrendan berriro erakutsiko, mezuak zerbitzarian mantenduko dira.</string>
<string name="AreYouSureBlockContact">Ziur kontaktu hau blokeatu nahi duzula?</string>
<string name="AreYouSureDeleteContact">Ziur kontaktu hau ezabatu nahi duzula?</string>
<!--permissions-->
<string name="PermissionContacts">Kontaktuak atzitzeko baimena behar da zure lagunekin gailu guztietan konektatu ahal izateko.</string>
<string name="PermissionStorage">Biltegiratzera sarbidea behar da argazkiak, bideoak, musika eta bestelako multimedia bidali eta gordetzeko.</string>
<string name="PermissionNoAudio">Mikrofonoa atzitzeko baimena behar da ahots mezuak bidali ahal izateko.</string>
<string name="PermissionOpenSettings">Ezarpenak</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
<string name="Intro1Message">Munduan <![CDATA[<b>erabiltzaile gehien dituen</b>]]> mezularia. <![CDATA[<b>Librea</b>]]> eta <![CDATA[<b>independientea</b>]]>.</string>
<string name="Intro2Headline">Independientea</string>
<string name="Intro2Message"><![CDATA[<b>Ez dago Delta Chat zerbitzaririk.</b>]]> Aplikazioak zure e-mail zerbitzaria besterik ez du erabiltzen.</string>
<string name="Intro3Headline">Azkarra</string>
<string name="Intro3Message"><![CDATA[<b>Bidali mezuak</b>]]> segundotan.<![CDATA[<br/>]]>Interfaze azkarra.</string>
<string name="Intro4Headline">Ahaltsua</string>
<string name="Intro4Message"><![CDATA[<b>Muga gabeko</b>]]> txat, irudi, bideo, eta audio mezuak eta askoz gehiago. Bezero anitzetarako prest.</string>
<string name="Intro5Headline">Librea</string>
<string name="Intro5Message"><![CDATA[<b>Delta Chat</b>]]> betirako doan da.<![CDATA[<br/>]]>Kode irekikoa. Iragarkirik gabe. Harpidetzarik gabe. Hornitzaile bati lotu gabe.</string>
<string name="Intro6Headline">Zifratua</string>
<string name="Intro6Message"><![CDATA[<b>Zifratua</b>]]> algoritm,o ezagunen bidez. Mezuak zure zerbitzarian mantentzen dira.</string>
<string name="Intro7Headline">Fidagarria</string>
<string name="IntroStartMessaging">Hasi txateatzen</string>
@@ -231,6 +249,10 @@
<item quantity="one">Mezu %d</item>
<item quantity="other">%d mezu</item>
</plurals>
<plurals name="AreYouSureDeleteMessages">
<item quantity="one">Ezabatu mezu %d? Zerbitzaritik ere ezabatuko da.</item>
<item quantity="other">Ezabatu %d mezu ? Zerbitzaritik ere ezabatuko dira.</item>
</plurals>
<!-- Translators: The first string placeholder gets replaced with the
text "%d new messages", so the complete sentence would be e.g.
"4 new messages in 2 chats". -->
@@ -269,6 +291,15 @@
<item quantity="one">Gehienez jakinarazpen %1$d %2$sko tartean</item>
<item quantity="other">Gehienez %1$d jakinarazpen %2$sko tartean</item>
</plurals>
<!--date formatters-->
<string name="formatterMonthYear">MMMM yyyy</string>
<string name="formatterMonth">MMM dd</string>
<string name="formatterYear">dd.MM.yyyy</string>
<string name="chatDate">EEE, MMMM d</string>
<string name="chatFullDate">EEE, MMMM d, yyyy</string>
<string name="formatterWeek">EEE</string>
<string name="formatterDay24H">HH:mm</string>
<string name="formatterDay12H">h:mm a</string>
<string name="formatDateAtTime">%1$s - %2$s</string>
<string name="AccountSettings">Kontuaren ezarpenak</string>
<string name="MyAccount">Nire kontua</string>
@@ -287,6 +318,7 @@
<string name="InboxHeadline">Sarrera ontzia</string>
<string name="OutboxHeadline">Irteera ontzia</string>
<string name="MyAccountExplain">E-mail hornitzaile ezagunentzat, ezarpen gehigarriak automatikoki zehaztuko dira.</string>
<string name="MyAccountExplain2" >Batzuetan, <![CDATA[<b>]]>IMAP gaitu behar da<![CDATA[</b>]]> e-mail zerbitzuaren web interfazean.\n\nGaldetu zure e-mail hornitzaileari edo lagunei arazoak badituzu.</string>
<string name="AccountNotConfigured">Kontua konfiguratu gabe</string>
<string name="AboutThisProgram">Delta Chat-i buruz</string>
<string name="NotSet">Ezarri gabe</string>
@@ -294,8 +326,10 @@
<string name="Deaddrop">Kontaktu eskaera</string>
<string name="DeaddropInChatlist">Erakutsi kontaktu eskaerak txat zerrendan</string>
<string name="MuteAlways">Beti mutututa</string>
<string name="AskStartChatWith">Txateatu <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> erabiltzailearekin?</string>
<string name="DeaddropHint">Sakatu erantzun geziak txateatzen hasteko.</string>
<string name="NotYetImplemented">Funtzio hau ez dago eskuragarri edo osorik.</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Delta Chat mezulariarekin bidalita: https://delta.chat</string>
<string name="Name" >Izena</string>
<string name="EmailAddress">E-mail helbidea</string>
@@ -314,6 +348,7 @@
<string name="AskResetNotifications">Leheneratu jakinarazpen eta soinuen ezarpen guztiak uneko orria, kontaktuak eta taldeetan?</string>
<string name="AttachFiles">Erantsi fitxategiak</string>
<string name="ErrGroupNameEmpty">Sartu izen bat taldearentzat.</string>
<string name="MsgNewGroupDraftHint">Idatzi lehen mezua, besteei taldean erantzutea ahalbidetuz,\n\n• Ez dute zertan denek Delta Chat erabili behar\n\n• Lehen mezua bidaltzeko denboratxo bat behar daiteke.</string>
<string name="MsgNewGroupDraft">Kaixo, \"%1$s\" taldea sortu dut guretzat.</string>
<string name="MsgGroupNameChanged">Taldearen izena aldatuta \"%1$s\"-tik \"%2$s\"-ra</string>
<string name="MsgGroupImageChanged">Taldeko irudia aldatu da.</string>
@@ -323,6 +358,7 @@
<string name="AskRemoveMemberFromGroup">Kendu <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> taldetik?</string>
<string name="ErrSelfNotInGroup">Taldeko kidea izan behar zara ekintza hau burutzeko.</string>
<string name="MsgGroupLeft">Taldetik aterata.</string>
<string name="NoMessagesHint">Bidali mezua <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> erabiltzaileari:\n\n• Ongi dago <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> erabiltzaileak ez badu Delta Chat erabiltzen.\n\n• Lehen mezua bidaltzeko denbora bat beharko da.</string>
<string name="SendNRcvReadReceipts">Jaso eta bidali irakurragiriak</string>
<string name="PreferE2EEncryption">Hobetsi muturretik muturrerako zifratzea</string>
<string name="E2EManagePrivateKeys">Kudeatu gako sekretuak</string>
@@ -339,24 +375,34 @@
<string name="PermNotificationText">Mezuen zain ...</string>
<string name="SettingsFor">%1$s zerbitzariko ezarpenak</string>
<string name="AutoplayGifs">Abiatu GIF-ak automatikoki</string>
<string name="HelpUrl">https://delta.chat/en/help</string>
<string name="EncryptedMessage">Zifratutako mezua</string>
<string name="Encryption">Zifratzea</string>
<string name="EncrinfoE2EAvailable">Muturretik muturrerako zifratzea eskuragarri.</string>
<string name="EncrinfoTransport">Garraio-zifratzea nire zerbitzarira arte gutxienez.</string>
<string name="EncrinfoNone">Zifratzerik ez nire zerbitzarira.</string>
<string name="EncrinfoFingerprints">Hatz-markak</string>
<string name="Backup">Babeskopia</string>
<string name="ImportBackupExplain2">Babeskopia bat inportatzeko, kopiatu babeskopia hemen <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> eta berriro instalatu aplikazioa.</string>
<string name="ReadReceiptMailBody">Hau \"%1$s\" mezuaren irakurragiri bat da.\n\nMezua hartzailearen gailuan bistaratu dela esan nahi du, baina ez du zertan esan nahi irakurri dela.</string>
<string name="ReadReceipt">Itzuli irakurragiria</string>
<string name="NameAndStatus">Izena eta leloa</string>
<string name="MyStatus">Nire leloa</string>
<string name="MyStatusExplain">Leloa e-mailen oinean eta beste toki batzuetan ikusten da.</string>
<string name="MsgGroupImageDeleted">Taldearen irudia ezabatuta.</string>
<string name="AskDeleteGroupImage">Ziur taldearen irudia ezabatu nahi duzula??\n\nHonek taldeko kideen gailu guztietan izango du eragina.</string>
<string name="ExportImportHeader">Esportatu eta inportatu</string>
<string name="ImportExportExplain">Esportatutako fitxategiek zure muturretik muturrerako zifratzerako Autocrypt ezarpenak izango dituzte! Gorde toki seguruan edo ezabatu ahalik eta lasterren.</string>
<string name="EnterPasswordToContinue">Sartu %1$s pasahitza jarraitzeko</string>
<string name="IncorrectPassword">Pasahitz okerra.</string>
<string name="ImportBackupAsk">Babes-kopia aurkitu da hemen: <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nInportatu nahi duzu eta bertako datu eta ezarpenak erabili?</string>
<string name="ImportBackup">Inportatu babeskopia</string>
<string name="NoBackupFound">Ez da babes-kopiarik aurkitu.\n\nKopiatu babes-kopia <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> helbidera eta saiatu berriro. Bestela, sakatu \"Hazi txateatzen\" ezarpen prozesu arrunta jarraitzeko.</string>
<string name="FilesSuccessfullyExported">Fitxategiak hona esportatu dira: <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
<string name="ExportBackup">Esportatu babeskopia</string>
<string name="ExportPrivateKeys">Esportatu gako pribatuak</string>
<string name="ImportPrivateKeys">Inportatu gako pribatuak</string>
<string name="ImportPrivateKeysAsk2">Inportatu gako sekretuak <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> helbidetik?\n\n• Sauden gako sekretuak ez dira ezabatuko\n\n• Inportatutako azken gakoa lehenetsitako gako berria izango da</string>
<string name="NoRecentEmoji">Erabilitako azken emojiak hemen agertuko dira.</string>
<string name="NotNow">Orain ez</string>
<string name="ArchiveChat">Artxibatu txata</string>
@@ -368,6 +414,8 @@
<string name="Never">Inoiz ez</string>
<string name="AutocryptKeyTransferInitiate">Hasi Autocrypt gakoen transferentzia</string>
<string name="AutocryptKeyTransfer">Autocrypt gakoen transferentzia</string>
<string name="AutocryptKeyTransferMsgBeforeSend"><![CDATA[<i>]]>Autocrypt ezarpen mezu<![CDATA[</i>]]> batek modu seguruan partekatzen du zure muturretik muturrerako zifratzerako ezarpena Autocrypt onartzen duten beste aplikazioekin.\n\nEzarpena hemen erakutsitako ezarpen-kode honekin zifratuko da, eta kode hau beste gailuan idatzi behar da.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Zure ezarpena zure buruari bidali diozu. Zoaz beste gailura eta ireki ezarpen mezua. Ezarpen-kodea eskatuko zaizu. Idatzi honako zenbaki hauek eskatutako tokian:\n\n%1$s\n\nBehin eginda, zure beste gailua Autocrypt erabiltzeko prest egongo da.</string>
<string name="AutocryptSetupMessageSubject">Autocrypt ezarpen mezua</string>
<string name="AutocryptSetupMessageGeneralBody">Hau zure gakoa bezeroen artean transferitzeko erabilitako Autocrypt ezarpen mezua da.\n\nDeszifratu eta zure gakoa erabiltzeko, ireki mezua Autocrypt onartzen duen bezero batean eta sartu gailu sortzailean erakutsitako ezarpen kodea.</string>
<string name="AutocryptSetupMessageTapBody">Hau zure gakoa bezeroen artean transferitzeko erabilitako Autocrypt ezarpen mezua da.\n\nDeszifratu eta zure gakoa erabiltzeko, sakatu mezu hau.</string>
@@ -376,5 +424,52 @@
<string name="AutocryptKeyTransferSucceeded">Gakoa ongi transferitu da. Gailu hau orain Autocrypt erabili dezake beste gailuko gako berarekin.</string>
<string name="Retry">Saiatu berriro</string>
<string name="SelfTalkSubtitle">Nire buruari bidalitako mezuak</string>
<string name="QrScan">Irakurri QR kodea</string>
<string name="QrShow">Erakutsi QR kodea</string>
<string name="QrScanContainsText">Irakurritako QR kodeak honako testu hau du::\n\n%1$s</string>
<string name="QrScanContainsUrl">Irakurritako QR kodeak honako URL hau du:\n\n%1$s</string>
<string name="OobFingerprint">Hatz-marka</string>
<string name="OobFingerprintAskOob">Egiaztatu kontaktua eta <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> erabiltzailearekin txateatzen hasi?</string>
<string name="OobFingerprintOk"><![CDATA[<i>]]>%1$s<![CDATA[</i>]]> kontaktua egiaztatuta. Txateatzen hasi?</string>
<string name="OobFingerprintMismatch">Irakurritako hatz-marka <![CDATA[<b>]]>ez dator bat<![CDATA[</b>]]> azkenekoz ikusitako <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> hatz-markarekin.</string>
<string name="OobFingerprintWithoutAddr">QR kodeak hatz-marka du, baina ez e-mail helbide bat.\n\nBanda kanpoko egiaztaketa baterako, ezarri zifratutako konexio bat hartzailearekin aurretik.</string>
<string name="OobSecureJoinRequested">%1$s elkartu da.</string>
<string name="CannotDecryptBody">Ezin da mezu hau deszifratu.\n\n• Agian igorleari erantzun eta mezua birbidaltzea eskatzearekin konpondu daiteke.\n\n• Delta Chat berrinstalatu baduzu edo beste e-mail bezero bat erabiltzen baduzu gailu honetan edo beste batean Autocrypt ezarpen mezua bidali dezakezu hortik.</string>
<string name="Autocrypt">Autocrypt</string>
<string name="AutocryptExplain"><![CDATA[<i>]]>Autocrypt<![CDATA[</i>]]> muturretik muturrerako zifratzerako espezifikazio berri eta ireki bat da.\n\nZure muturretik muturrerako ezarpena automatikoki sortzen da behar ahala eta gailutik gailura bidali dezakezui <![CDATA[<i>]]>Autocrypt ezarpen mezuekin.<![CDATA[</i>]]></string>
<string name="NewVerifiedGroup">Egiaztatutako talde berria</string>
<string name="SharedChats">Partekatutako txat-ak</string>
<string name="VerifiedContact">Egiaztatutako kontaktua</string>
<string name="Contact">Kontaktua</string>
</resources>
<string name="VerifiedGroup">Egiaztatutako taldea</string>
<string name="Group">Taldea</string>
<string name="EditedNameWillBeShared">Taldeko kide guztiek izango dute izen aldaketaren berri.</string>
<string name="E2EEncryptionPreferred">Muturretik muturrerako zifratzea hobetsia.</string>
<string name="OobAddrVerified">%1$s egiaztatuta.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$s egiaztatuta, egin aurkezpena …</string>
<string name="OobAskJoinVerifiedGroup"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]> egiaztatutako taldera elkartu nahi duzu?</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
%2$s is replaced by a the name of the user that made this action.
Resulting strings might be "Member Alice added by Bob." or 'Group name changed from "Foo" to "Bar" by Claire.
If you do not find a correct grammar for your language you can just use "%1$s (by %2$s)" or "%2$s: %1$s" -->
<string name="ActionByUser">%1$s %2$s(e)k.</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s nik.</string>
<string name="ExampleEmailAddr">erabiltzailea@adibidea.eus</string>
<string name="QrScanHint">Kokatu kamara QR kodearen aurrean</string>
<string name="QrShowVerifyCode">Erakutsi QR egiaztaketa kodea</string>
<string name="QrVerifyContactTitle">QR egiaztaketa kodea</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nEskaneatu hau egiaztatutako kontaktu bat ezartzeko.</string>
<string name="QrShowInviteCode">Erakutsi QR gonbidapen-kodea</string>
<string name="QrJoinVerifiedGroupTitle">QR gonbidapen kodea</string>
<string name="QrJoinVerifiedGroupHint">Eskaneatu hau egiaztatutako taldera elkartzeko <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchMode">Eskuratze modua</string>
<string name="FetchModeSaveBattery">Aurreztu bateria</string>
<string name="FetchModePersistentConnection">Konexio iraunkorra</string>
<string name="FetchModeExplain"><![CDATA[<i>]]>Aurreztu bateria<![CDATA[</i>]]> eskuratze modua erabiltzean, mezu berriak berehala agertuko dira aplikazioa irekita dagoenean eta batez beste 30 segunduko atzerapenarekin aplikazioa bigarren planoan badago. Gailua lo dagoenean atzerapena luzeagoa izan daiteke. Hau da lehenetsitako modua.\n\n<![CDATA[<i>]]>Konexio iraunkorra<![CDATA[</i>]]> azkarragoa izan ohi da baina agian aplikazioari bateria gehiago kontsumitzea baimendu behar zaio sistemaren ezarpenetan.\n\nZein eskuratze modu erabili nahi duzu?</string>
<string name="PermissionCamera">Kamera atzitzeko baimena behar da argazkiak atera nahi badituzu edo QR kodeak eskaneatu nahi badituzu.</string>
</resources>
@@ -329,6 +329,7 @@
<string name="AskStartChatWith">Lancer une conversation avec <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Pour commencer une conversation, cliquez sur le bouton de réponse en forme de flèche.</string>
<string name="NotYetImplemented">Cette fonction n\'est pas disponible ou non supportée complètement.</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Envoyé avec Delta Chat: https://delta.chat/fr/</string>
<string name="Name" >Nom</string>
<string name="EmailAddress">Adresse e-mail</string>
@@ -328,6 +328,7 @@
<string name="AskStartChatWith">Beszélgetést indítasz <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> partnerrel?</string>
<string name="DeaddropHint">Beszélgetés indításához koppints a válasz-nyílra.</string>
<string name="NotYetImplemented">Ez a funkció nem érhető el vagy még nem készült el.</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">A Delta Chat Messengeremmel küldtem: https://delta.chat</string>
<string name="Name" >Név</string>
<string name="EmailAddress">E-mail cím</string>
@@ -329,7 +329,8 @@
<string name="AskStartChatWith">Iniziare una conversazione con <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Per iniziare una conversazione toccare le frecce di risposta.</string>
<string name="NotYetImplemented">Funzione non disponibile o incompleta.</string>
<string name="DefaultStatusText">Inviato con l\'applicazione di messaggistica Delta Chat: https://delta.chat/it</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Inviato con l\'applicazione di messaggistica Delta Chat: https://delta.chat</string>
<string name="Name" >Nome</string>
<string name="EmailAddress">Indirizzo email</string>
<string name="CannotDeleteContact">Impossibile cancellare i contatti in uso, provare a bloccarli.</string>
@@ -443,9 +444,9 @@
<string name="VerifiedGroup">Gruppo verificato</string>
<string name="Group">Gruppo</string>
<string name="EditedNameWillBeShared">Il nome modificato verrà condiviso con tutti i membri del gruppo.</string>
<string name="QrShowInviteCode">Mostra codice QR di invito</string>
<string name="E2EEncryptionPreferred">Cifratura end-to-end preferita.</string>
<string name="OobAddrVerified">%1$s verificato.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$s verificato, mi presento…</string>
<string name="OobAskJoinVerifiedGroup">Entrare nel gruppo verificato <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
%2$s is replaced by a the name of the user that made this action.
@@ -456,4 +457,17 @@
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s da te.</string>
<string name="ExampleEmailAddr">utente@esempio.org</string>
<string name="QrScanHint">Posiziona la fotocamera sopra il codice QR</string>
<string name="QrShowVerifyCode">Mostra il codice QR di verifica</string>
<string name="QrVerifyContactTitle">Codice QR di verifica</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nScansiona questo per impostare un contatto verificato.</string>
<string name="QrShowInviteCode">Mostra codice QR di invito</string>
<string name="QrJoinVerifiedGroupTitle">Codice QR di invito</string>
<string name="QrJoinVerifiedGroupHint">Scansiona questo per entrare nel gruppo verificato <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchModeSaveBattery">Risparmia batteria</string>
<string name="FetchModePersistentConnection">Connessione persistente</string>
<string name="PermissionCamera">L\'accesso alla fotocamera è necessario se si vogliono acquisire immagini o per eseguire la scansione dei codici QR.</string>
</resources>
@@ -89,6 +89,7 @@
<string name="InboxHeadline">受信</string>
<string name="OutboxHeadline">送信</string>
<string name="AboutThisProgram">Delta Chatについて</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Delta Chatメッセンジャーより送信: https://delta.chat</string>
<string name="EmailAddress">メールアドレス</string>
<string name="AdvancedSettings">追加設定</string>
@@ -202,7 +202,7 @@
<string name="AreYouSureBlockContact">Er du sikker på at du vil blokkere denne kontakten?</string>
<string name="AreYouSureDeleteContact">Er du sikker på at du ønsker å slette denne kontakten?</string>
<!--permissions-->
<string name="PermissionContacts">Delta Chat trenger tilgang til kontaktene dine slik at du kan koble til dine venner på tvers av alle enhetene dine.</string>
<string name="PermissionContacts">Delta Chat trenger tilgang til kontaktene dine slik at du kan koble til vennene dine på tvers av alle enhetene dine.</string>
<string name="PermissionStorage">Delta chat trenger tilgang til lagring, slik at du kan sende og lagre bilder, videoer, musikk og annen media.</string>
<string name="PermissionNoAudio">Delta Chat trenger mikrofontilgang slik at du kan sende lydmeldinger.</string>
<string name="PermissionOpenSettings">Tilpass innstillinger</string>
@@ -318,7 +318,7 @@
<string name="InboxHeadline">Innboks</string>
<string name="OutboxHeadline">Utboks</string>
<string name="MyAccountExplain">For kjente e-posttilbydere blir ytterligere innstillinger bestemt automatisk.</string>
<string name="MyAccountExplain2" >Noen ganger må <![CDATA[<b>]]>IMAP<![CDATA[</b>]]> skrus på i vev-e-postgrenseflaten.\n\nVed problemer, spør din e-posttilbyder eller dine venner.</string>
<string name="MyAccountExplain2" >Noen ganger må <![CDATA[<b>]]>IMAP<![CDATA[</b>]]> skrus på i vev-e-postgrenseflaten.\n\nVed problemer, spør din e-posttilbyder eller vennene dine.</string>
<string name="AccountNotConfigured">Konto ikke satt opp</string>
<string name="AboutThisProgram">Om</string>
<string name="NotSet">Ikke satt</string>
@@ -329,7 +329,8 @@
<string name="AskStartChatWith">Begynn å sludre med <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">For å begynne sludring, klikk på svar-pilene.</string>
<string name="NotYetImplemented">Denne funksjonen er ikke tilgjengelig eller ufullstendig.</string>
<string name="DefaultStatusText">Sendt med Delta Chat: https://delta.chat/nb</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Sendt med Delta Chat: https://delta.chat</string>
<string name="Name" >Navn</string>
<string name="EmailAddress">E-postadresse</string>
<string name="CannotDeleteContact">Kan ikke slette kontakter i bruk, blokker kontakt istedenfor.</string>
@@ -443,7 +444,6 @@
<string name="VerifiedGroup">Bekreftet gruppe</string>
<string name="Group">Gruppe</string>
<string name="EditedNameWillBeShared">Det redigerte gruppenavnet vil bli delt med alle dens medlemmer.</string>
<string name="QrShowInviteCode">Vis QR-invitasjonskode</string>
<string name="E2EEncryptionPreferred">Ende-til-ende -kryptering foretrukket.</string>
<string name="OobAddrVerified">%1$s bekreftet.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$s bekreftet, sender introduksjonstekst …</string>
@@ -457,4 +457,18 @@
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s av meg.</string>
</resources>
<string name="ExampleEmailAddr">bruker@eksempel.no</string>
<string name="QrScanHint">Beveg kameraet over QR-koden</string>
<string name="QrShowVerifyCode">Vis ELLER bekreft kode</string>
<string name="QrVerifyContactTitle">ELLER bekreft kode</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nSkan dette for å bekrefte en kontakt.</string>
<string name="QrShowInviteCode">Vis QR-invitasjonskode</string>
<string name="QrJoinVerifiedGroupTitle">QR-invitasjonskode</string>
<string name="QrJoinVerifiedGroupHint">Skann denne for å ta del i den bekreftede gruppen <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchMode">Hentingsmodus</string>
<string name="FetchModeSaveBattery">Spar batteri</string>
<string name="FetchModePersistentConnection">Vedvarende tilkobling</string>
<string name="FetchModeExplain">Når hentingsmodus brukes <![CDATA[<i>]]>Batterisparing<![CDATA[</i>]]>, nye meldinger vises én gang hvis programmet er i forgrunnen, med gjennomsnittlig 30 sekunders forsinkelse hvis programmet ikke brukes. Når enheten er i sovemodus, vil forsinkelsen øke. Dette er forvalgt modus.\n\n<![CDATA[</i>]]> Vedvarende tilkobling<![CDATA[</i>]]> er typisk raskere, men kan krevet at programmet hvitlistes i systeminnstillingene for å bruke mer batteri.\n\n.Hvilket innhentingsmodus ønsker du å bruke?</string>
</resources>
@@ -329,6 +329,7 @@
<string name="AskStartChatWith">Chat beginnen met <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Klik op het reactiepijltje om een chat te beginnen.</string>
<string name="NotYetImplemented">Deze functie is niet beschikbaar of incompleet.</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Verstuurd met mijn Delta Chat Messenger: https://delta.chat</string>
<string name="Name" >Naam</string>
<string name="EmailAddress">E-mailadres</string>
@@ -443,7 +444,6 @@
<string name="VerifiedGroup">Geverifieerde groep</string>
<string name="Group">Groep</string>
<string name="EditedNameWillBeShared">De nieuwe naam zal worden gedeeld met alle groepsleden.</string>
<string name="QrShowInviteCode">QR-code voor uitnodigingen weergeven</string>
<string name="E2EEncryptionPreferred">Voorkeur voor end-to-end-versleuteling.</string>
<string name="OobAddrVerified">%1$s is geverifieerd.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$sis geverifieerd; introduceer me...</string>
@@ -457,4 +457,19 @@
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s door mij.</string>
<string name="ExampleEmailAddr">gebruiker@voorbeeld.org</string>
<string name="QrScanHint">Houdt je camera boven de QR-code</string>
<string name="QrShowVerifyCode">QR-verificatiecode tonen</string>
<string name="QrVerifyContactTitle">QR-verificatiecode</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nScan dit om een geverifieerde contactpersoon in te stellen.</string>
<string name="QrShowInviteCode">QR-code voor uitnodigingen weergeven</string>
<string name="QrJoinVerifiedGroupTitle">QR-uitnodigingscode</string>
<string name="QrJoinVerifiedGroupHint">Scan dit om lid te worden van een geverifieerde groep <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchMode">Ophaalmodus</string>
<string name="FetchModeSaveBattery">Batterijbesparing</string>
<string name="FetchModePersistentConnection">Aanhoudende verbinding</string>
<string name="FetchModeExplain">Bij gebruik van de ophaalmodus <![CDATA[<i>]>Batterij sparen<![CDATA[</i>]]>, verschijnen nieuwe berichten meteen wanneer de app op de voorgrond staat en met een gemiddelde vertraging van 30 seconden als de app niet wordt gebruikt. Wanneer het apparaat in sluimerstand (doze mode) is, kan de vertraging langer zijn. Dit is de standaardmodus.\n\n<![CDATA[<i>]]>Continue connectie<![CDATA[</i>]]> is meestal sneller maar vereist mogelijk dat de app in de systeeminstellingen op de witte lijst wordt geplaatst om meer batterij te mogen verbruiken.\n\nWelke ophaalmodus wilt u gebruiken?</string>
<string name="PermissionCamera">Cameratoegang is nodig als je foto\'s wilt maken of QR-codes wilt scannen.</string>
</resources>
@@ -357,7 +357,8 @@
<string name="AskStartChatWith">Rozpocząć czat z <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Aby rozpocząć czat, naciśnij strzałkę odpowiedzi.</string>
<string name="NotYetImplemented">Ta funkcja jest niedostępna lub niekompletna.</string>
<string name="DefaultStatusText">Wysłane z komunikatora Delta Chat: https://delta.chat/pl</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Wysłane z komunikatora Delta Chat: https://delta.chat</string>
<string name="Name" >Nazwa</string>
<string name="EmailAddress">Adres e-mail</string>
<string name="CannotDeleteContact">Nie możesz usunąć kontaktu w użyciu, zamiast tego zablokuj kontakt.</string>
@@ -405,6 +406,7 @@
<string name="HelpUrl">https://jaworski-pawel.github.io/Delta/#help</string>
<string name="EncryptedMessage">Szyfrowana wiadomość</string>
<string name="Encryption">Szyfrowanie</string>
<string name="EncrinfoE2EAvailable">Pełne szyfrowanie jest dostępne.</string>
<string name="EncrinfoTransport">Szyfrowanie transportu przynajmniej na moim serwerze.</string>
<string name="EncrinfoNone">Brak szyfrowania na moim serwerze.</string>
<string name="EncrinfoFingerprints">Odciski palców</string>
@@ -450,5 +452,52 @@
<string name="AutocryptKeyTransferSucceeded">Udany transfer klucza. To urządzenie jest teraz gotowe do użycia automatycznego szyfrowania za pomocą tego samego klucza, co na drugim urządzeniu.</string>
<string name="Retry">Powtórz</string>
<string name="SelfTalkSubtitle">Wiadomości wysłane do siebie</string>
<string name="QrScan">Skanuj kod QR</string>
<string name="QrShow">Pokaż kod QR</string>
<string name="QrScanContainsText">Zeskanowany kod QR zawiera następujący tekst:\n\n%1$s</string>
<string name="QrScanContainsUrl">Zeskanowany kod QR zawiera następujący adres:\n\n%1$s</string>
<string name="OobFingerprint">Odciski palca</string>
<string name="OobFingerprintAskOob">Zweryfikować kontakt i rozpocząć rozmowę z <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="OobFingerprintOk">Kontakt <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> zweryfikowany. Rozpocząć rozmowę?</string>
<string name="OobFingerprintMismatch">Zeskanowany odcisk palca <![CDATA[<b>]]>nie pasuje<![CDATA[</b>]]> do odcisku palca ostatnio widzianego u <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
<string name="OobFingerprintWithoutAddr">Ten kod QR zawiera odcisk palca, ale nie zawiera adresu e-mail.\n\nW celu weryfikacji poza zasadniczym pasmem należy najpierw nawiązać szyfrowane połączenie z odbiorcą.</string>
<string name="OobSecureJoinRequested">%1$s dołącza.</string>
<string name="CannotDecryptBody">Tej wiadomości nie można odszyfrować.\n\n• Możesz teraz pomóc odpowiadając po prostu na tą wiadomość i poprosić nadawcę o ponowne wysłanie wiadomości.\n\n• W przypadku ponownego zainstalowania Delta Chat lub innego programu mailowego na tym lub innym urządzeniu, może być konieczne wysłanie stąd klucza automatycznego szyfrowania.</string>
<string name="Autocrypt">Autocrypt</string>
<string name="AutocryptExplain"><![CDATA[<i>]]>Autocrypt<![CDATA[</i>]]> to nowa i otwarta specyfikacja szyfrowania e-maili typu end-to-end.\n\nTwoja konfiguracja end-to-end w razie potrzeby jest tworzona automatycznie i można ją przesłać między urządzeniami za pomocą <![CDATA[<i>]]>Wiadomości konfiguracyjnej automatycznego szyfrowania.<![CDATA[</i>]]></string>
<string name="NewVerifiedGroup">Nowa zweryfikowana grupa</string>
<string name="SharedChats">Udostępnione czaty</string>
<string name="VerifiedContact">Zweryfikowany czat</string>
<string name="Contact">Kontakt</string>
</resources>
<string name="VerifiedGroup">Zweryfikowania grupa</string>
<string name="Group">Grupa</string>
<string name="EditedNameWillBeShared">Edytowana nazwa zostanie udostępniona wszystkim członkom grupy.</string>
<string name="E2EEncryptionPreferred">Preferowane pełne szyfrowanie.</string>
<string name="OobAddrVerified">Zweryfikowano %1$s</string>
<string name="OobAddrVerifiedIntroduceMyself">Zweryfikowano %1$s, przedstaw się…</string>
<string name="OobAskJoinVerifiedGroup">Czy chcesz dołączyć do zweryfikowanej grupy <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
%2$s is replaced by a the name of the user that made this action.
Resulting strings might be "Member Alice added by Bob." or 'Group name changed from "Foo" to "Bar" by Claire.
If you do not find a correct grammar for your language you can just use "%1$s (by %2$s)" or "%2$s: %1$s" -->
<string name="ActionByUser">%1$s przez %2$s.</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s przez mnie.</string>
<string name="ExampleEmailAddr">user@example.org</string>
<string name="QrScanHint">Umieść aparat nad kodem QR</string>
<string name="QrShowVerifyCode">Pokaż weryfikacyjny kod QR</string>
<string name="QrVerifyContactTitle">Weryfikacyjny kod QR</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nZeskanuj to w celu skonfigurowania zweryfikowanego kontaktu.</string>
<string name="QrShowInviteCode">Pokaż kod QR zaproszenia</string>
<string name="QrJoinVerifiedGroupTitle">Kod QR zaproszenia</string>
<string name="QrJoinVerifiedGroupHint">Zeskanuj to, aby dołączyć do zweryfikowanej grupy <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchMode">Tryb pobierania</string>
<string name="FetchModeSaveBattery">Oszczędzaj baterię</string>
<string name="FetchModePersistentConnection">Stałe połączenie</string>
<string name="FetchModeExplain">Podczas korzystania z trybu pobierania <![CDATA[<i>]]>Oszczędzaj baterię<![CDATA[</i>]]> nowe wiadomości pojawiają się od razu, jeśli aplikacja jest na pierwszym planie oraz ze średnim opóźnieniem 30 sekund, jeśli aplikacja nie jest używana. Gdy urządzenie znajduje się w trybie drzemki, opóźnienie może być dłuższe. Jest to tryb domyślny.\n\n<![CDATA[<i>]]>Stałe połączenie<![CDATA[</i>]]> jest zazwyczaj szybsze, ale może wymagać umieszczenia aplikacji na białej liście w ustawieniach systemu w celu zwiększenia zużycia baterii.\n\nKtórego trybu pobierania chcesz używać?</string>
<string name="PermissionCamera">Dostęp do aparatu jest niezbędny, jeśli chcesz robić zdjęcia lub skanować kody QR.</string>
</resources>
@@ -329,7 +329,8 @@
<string name="AskStartChatWith">Começar uma conversa com <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Para conversar toque na seta.</string>
<string name="NotYetImplemented">Esta função ainda não está disponível ou ainda não está completamente desenvolvida.</string>
<string name="DefaultStatusText">Enviado pelo meu Delta Chat Messenger: https://delta.chat/pt</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Enviado pelo meu Delta Chat Messenger: https://delta.chat</string>
<string name="Name" >Nome</string>
<string name="EmailAddress">Endereço de e-mail</string>
<string name="CannotDeleteContact">Impossível deletar um contato em uso! Bloqueie-o.</string>
@@ -421,5 +422,20 @@
<string name="AutocryptKeyTransferBadCode">Código errado. Tente novamente.\n\nSe você não se lembra do código recomece a transferência de chaves no dispositivo original.</string>
<string name="AutocryptKeyTransferSucceeded">Chaves transferidas. Agora você está pronto para usar o Autocrypt neste dispositivo com as mesmas chaves do outro.</string>
<string name="Retry">Repetir</string>
<string name="SelfTalkSubtitle">Mensagens que enviei para mim</string>
<string name="QrScan">Escanear código QR</string>
<string name="QrShow">Mostrar código QR</string>
<string name="QrScanContainsText">O código QR escaneado contém o seguinte texto:
%1$s</string>
<string name="QrScanContainsUrl">O código QR escaneado contém a seguinte URL:
%1$s</string>
<string name="OobSecureJoinRequested">%1$s entrou.</string>
<string name="Autocrypt">Autocrypt</string>
<string name="Contact">Contato</string>
<string name="QrShowVerifyCode">Mostrar código QR de verificação</string>
<string name="QrVerifyContactTitle">Código QR de verificação</string>
<string name="FetchModeSaveBattery">Economizar bateria</string>
<string name="FetchModePersistentConnection">Conexão persistente</string>
</resources>
@@ -17,7 +17,7 @@
<string name="UnmuteNotifications">Включить уведомления</string>
<string name="Draft">Черновик</string>
<!--audio view-->
<string name="NoAudio">Добавьте файлы в музыкальную коллекцию на вашем устройстве для того, чтобы увидеть их здесь.</string>
<string name="NoAudio">Файлы из вашей музыкальной галереи.</string>
<string name="AttachMusic">Музыка</string>
<!--documents view-->
<string name="SelectFile">Выбрать файл</string>
@@ -63,7 +63,7 @@
<string name="Notifications">Уведомления</string>
<string name="RemoveMember">Удалить участника</string>
<!--contact info view-->
<string name="NewContactTitle">Новый контакт</string>
<string name="NewContactTitle">Добавить контакт</string>
<string name="BlockContact">Заблокировать контакт</string>
<string name="DeleteContact">Удалить контакт</string>
<string name="Info">Инфо</string>
@@ -71,7 +71,7 @@
<string name="TextSize">Размер шрифта сообщений</string>
<string name="UnblockContact">Разблокировать контакт</string>
<string name="NoBlocked">Пока нет заблокированных контактов</string>
<string name="DefaultForNormalMessages">Обычное сообщение</string>
<string name="DefaultForNormalMessages">Обычные сообщения</string>
<string name="MessagePreview">Предпросмотр сообщения</string>
<string name="DefaultForGroupMessages">Сообщения группы</string>
<string name="Sound">Звук</string>
@@ -83,16 +83,16 @@
<string name="Default">По умолчанию</string>
<string name="OnlyIfSilent">Только при выключенном звуке</string>
<string name="ChatBackground">Фон чата</string>
<string name="SendByEnter">Отправлять нажав «Ввод»</string>
<string name="SendByEnter">Оправлять нажав </string>
<string name="Help">Помощь</string>
<string name="Enabled">Вкл</string>
<string name="Disabled">Выкл</string>
<string name="Disabled">Выкл.</string>
<string name="LedColor">Цвет LED</string>
<string name="BadgeNumber">Задействовать иконку для ведения счёта, по возможности</string>
<string name="Short">Короткая</string>
<string name="Long">Длинная</string>
<string name="RaiseToSpeak">Открыть для разговора</string>
<string name="EditName">Правка имени</string>
<string name="RaiseToSpeak">Режим \"бери-и-говори\"</string>
<string name="EditName">Изменить название</string>
<string name="NotificationsPriority">Просмотр</string>
<string name="NotificationsPriorityDefault">Нормальный приоритет</string>
<string name="NotificationsPriorityHigh">Высокий приоритет</string>
@@ -128,7 +128,7 @@
<string name="AutoLockInfo">Запрашивать код доступа, если превышено время ожидания.</string>
<string name="UnlockFingerprint">Разблокировать с помощью отпечатка пальца</string>
<string name="FingerprintInfo">Подтвердите отпечаток пальца для продолжения</string>
<string name="FingerprintNotRecognized">Отпечаток пальца не опознан. Повторите снова</string>
<string name="FingerprintNotRecognized">Отпечаток пальца не опознан. Повторите снова.</string>
<!--photo gallery view-->
<string name="SaveToGallery">Сохранить в «Галерее»</string>
<string name="Of">%1$d до %2$d</string>
@@ -159,7 +159,7 @@
<string name="CurvesGreen">Зелёный</string>
<string name="CurvesBlue">Синий</string>
<string name="Blur">Размытие</string>
<string name="BlurOff">Выкл</string>
<string name="BlurOff">Выкл.</string>
<string name="BlurLinear">Линейность</string>
<string name="BlurRadial">Радиальный</string>
<string name="DiscardChanges">Отменить изменения?</string>
@@ -194,7 +194,7 @@
<string name="AttachVoiceMessage">Голосовое сообщение</string>
<string name="FromSelf">Я</string>
<!--Alert messages-->
<string name="NoHandleAppInstalled">Нет приложений, которые могут обрабатывать тип файла \'%1$s\', пожалуйста, установите такое приложение, чтобы продолжить.</string>
<string name="NoHandleAppInstalled">Установите приложение для открытия данного вида \'%1$s\', файлов для продолжения.</string>
<string name="ContactAlreadyInGroup">Контакт уже находится в этой группе.</string>
<string name="ForwardMessagesTo">Переслать выбранные сообщения пользователю <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="SendMessagesTo">Отправить сообщения пользователю <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
@@ -204,7 +204,7 @@
<!--permissions-->
<string name="PermissionContacts">Доступ к вашим контактам необходим для того, чтобы вы могли общаться со своими друзьями на всех ваших устройствах.</string>
<string name="PermissionStorage">Необходим доступ к памяти вашего устройства для отправки и хранения фотографий, видео, музыки и других файлов.</string>
<string name="PermissionNoAudio">Доступ к микрофону для записи голосовых сообщений.</string>
<string name="PermissionNoAudio">Предоставьте доступ к микрофону для записи голосовых сообщений.</string>
<string name="PermissionOpenSettings">Настройки</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
@@ -263,7 +263,7 @@
<item quantity="one">Удалить %d сообщение? Сообщение также будет удалено с сервера.</item>
<item quantity="few">Удалить %d сообщения? Сообщения также будут удалены с сервера.</item>
<item quantity="many">Удалить %d сообщения? Сообщения также будут удалены с сервера.</item>
<item quantity="other">Удалить %d сообщения? Они также будут удалены с вашего сервера.</item>
<item quantity="other">Удалить %d сообщения здесь и на сервере.</item>
</plurals>
<!-- Translators: The first string placeholder gets replaced with the
text "%d new messages", so the complete sentence would be e.g.
@@ -332,7 +332,7 @@
<string name="AccountSettings">Настройки аккаунта</string>
<string name="MyAccount">Мой аккаунт</string>
<string name="MyName">Моё имя</string>
<string name="MyNameExplain">Ваше имя будет видно всем участникам переписки. Если оставить поле пустым, участники переписки увидят только адрес вашей эл.почты.</string>
<string name="MyNameExplain">Ваше имя для показа всем участникам переписки. Если оставить поле пустым, участники переписки увидят только адрес вашей эл.почты.</string>
<string name="Password">Пароль</string>
<string name="SmtpPassword">SMTP пароль</string>
<string name="FromAbove">Как указан выше</string>
@@ -357,7 +357,8 @@
<string name="AskStartChatWith">Начать чат с <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Чтобы начать чат, нажмите стрелку ответа.</string>
<string name="NotYetImplemented">Эта функция недоступна или в разработке.</string>
<string name="DefaultStatusText">Отправлено с помощью мессенджера Delta Chat: https://delta.chat/ru</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Отправлено с помощью мессенджера Delta Chat: https://delta.chat</string>
<string name="Name" >Имя</string>
<string name="EmailAddress">Адрес электронной почты</string>
<string name="CannotDeleteContact">Невозможно удалить контакты во время их использования, вместо этого заблокируйте контакт.</string>
@@ -369,15 +370,15 @@
<string name="OneMoment">Один момент …</string>
<string name="NoChatsHelp">Начните обмен сообщениями, нажав кнопку нового чата в нижнем правом углу, или коснитесь кнопки меню для получения дополнительных возможностей.</string>
<string name="Intro7Message"><![CDATA[<b>Delta Chat</b>]]> безопасен для использования в бизнесе, основан на совместимых стандартах.</string>
<string name="InviteMenuEntry">Отправить приглашения</string>
<string name="InviteText">Я использую мессенджер Delta Chat - %1$s - вы можете написать мне на %2$s</string>
<string name="InviteMenuEntry">Отправить приглашение</string>
<string name="InviteText">Сейчас я использую мессенджер Delta Chat - %1$s - вы можете написать мне на %2$s</string>
<string name="AdvancedSettings">Расширенные настройки</string>
<string name="AskResetNotifications">Сбросить все настройки звуков и уведомлений для контактов и групп на этой странице?</string>
<string name="AttachFiles">Прикрепить файлы</string>
<string name="ErrGroupNameEmpty">Введите название группы.</string>
<string name="MsgNewGroupDraftHint">Напишите первое сообщение, чтобы другие могли отвечать в этой группе.\n\n• Группа будет нормально общаться, даже если не все участники используют Delta Chat.\n\n• Доставка первого сообщения может занять некоторое время.</string>
<string name="MsgNewGroupDraft">Привет! Я только что создал группу \"%1$s\" для нас.</string>
<string name="MsgGroupNameChanged">Название группы изменено с \"%1$s\" в \"%2$s\".</string>
<string name="MsgGroupNameChanged">Название группы изменено с \"%1$s\" на \"%2$s\".</string>
<string name="MsgGroupImageChanged">Изображение группы изменено.</string>
<string name="MsgMemberAddedToGroup">Участник %1$s добавлен.</string>
<string name="MsgMemberRemovedFromToGroup">Участник %1$s удалён.</string>
@@ -385,7 +386,7 @@
<string name="AskRemoveMemberFromGroup">Удалить <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> из группы?</string>
<string name="ErrSelfNotInGroup">Чтобы выполнить это действие, вы должны быть участником группы.</string>
<string name="MsgGroupLeft">Группа оставлена.</string>
<string name="NoMessagesHint">Отправить сообщение <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>:\n\n• Общение будет возможным, даже если <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> не используют Delta Chat.\n\n• Доставка первого сообщения может занять некоторое время.</string>
<string name="NoMessagesHint">Отправка сообщения <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>:\n\n• Общение будет возможным, даже если <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> не использует Delta Chat.\n\n• Доставка первого сообщения может занять некоторое время.</string>
<string name="SendNRcvReadReceipts">Получать и отправлять уведомления о доставке</string>
<string name="PreferE2EEncryption">Предпочитать сквозное шифрование</string>
<string name="E2EManagePrivateKeys">Управление закрытыми ключами</string>
@@ -419,7 +420,7 @@
<string name="MsgGroupImageDeleted">Изображение группы удалено.</string>
<string name="AskDeleteGroupImage">Вы действительно хотите удалить изображение группы?\n\nИзменение вступит в силу на всех устройствах участников группы.</string>
<string name="ExportImportHeader">Экспорт и импорт</string>
<string name="ImportExportExplain">Файлы экспорта будут содержать закрытые ключи! Храните их в защищенном месте или удалите при первой возможности.</string>
<string name="ImportExportExplain">Файлы экспорта будут содержать закрытые ключи шифрования настройки Autocrypt! Храните их в защищенном месте или удалите при первой возможности.</string>
<string name="EnterPasswordToContinue">Введите пароль для %1$s, чтобы продолжить:</string>
<string name="IncorrectPassword">Неверный пароль.</string>
<string name="ImportBackupAsk">Delta Chat нашел резервную копию в <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nИмпортировать и использовать все данные и настройки из резервной копии?</string>
@@ -440,8 +441,8 @@
<string name="AskLeaveGroup">Вы уверены, что хотите выйти из группы?</string>
<string name="Never">Никогда</string>
<string name="AutocryptKeyTransferInitiate">Начать передачу Сообщения Настройки Autocrypt</string>
<string name="AutocryptKeyTransfer">Сообщение Настойки Autocrypt</string>
<string name="AutocryptKeyTransferMsgBeforeSend">Для <![CDATA[<i>]]>передачи Сообщения Настройки Autocrypt<![CDATA[</i>]]> необходимо, чтобы почтовый клиент на другом устройстве так же поддерживал Autocrypt.\n\nЗатем Вы можете послать ключ себе. Ключ будет зашифрован кодом настройки, который указан здесь, и который нужно будет ввести на другом устройстве.</string>
<string name="AutocryptKeyTransfer">Сообщение Настройки Autocrypt</string>
<string name="AutocryptKeyTransferMsgBeforeSend">Это <![CDATA[<i>]]>Сообщение Настройки Autocrypt<![CDATA[</i>]]> для безопасной передачи настроек вашего сквозного шифрования другим совместимым устройствам.\n\nЭта настройка будет зашифрована установочным кодом который указан здесь и который необходимо ввести на другом устройстве.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Вы отправили ключ себе. Теперь перейдите к другому устройству и откройте сообщение настройки. Будет предложено ввести код настройки. Введите следующие цифры:\n\n%1$s\n\nКак только Вы это сделаете, другое устройство будет готово использовать Autocrypt.</string>
<string name="AutocryptSetupMessageSubject">Сообщение Настройки Autocrypt</string>
<string name="AutocryptSetupMessageGeneralBody">Это Сообщение Настройки Autocrypt, используемое для передачи ключа между клиентами.\n\nДля расшифровки и использования вашего ключа откройте это сообщение в почтовом клиенте, совместимом с Autocrypt, и введите код, отображаемый на устройстве с которого отправлено сообщение.</string>
@@ -451,9 +452,10 @@
<string name="AutocryptKeyTransferSucceeded">Ключ передан успешно. Сейчас это устройство может использовать Autocrypt с тем же ключом, что и на другом устройстве.</string>
<string name="Retry">Повторить</string>
<string name="SelfTalkSubtitle">Сообщения отправленные самому себе</string>
<string name="QrScan">Сканировать QR код</string>
<string name="QrScan">Сканирование QR кода</string>
<string name="QrShow">Показать QR код</string>
<string name="QrScanContainsText">Отсканированный QR код содержит текст:\n\n%1$s</string>
<string name="QrScanContainsUrl">QR код для перехода по ссылке URL:\n\n%1$s</string>
<string name="OobFingerprint">Ключ</string>
<string name="OobFingerprintAskOob">Верифицировать контакт и начать общение с <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="OobFingerprintOk">Контакт <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> верифицирован. Начать общение?</string>
@@ -470,8 +472,32 @@
<string name="VerifiedGroup">Проверенная группа</string>
<string name="Group">Группа</string>
<string name="EditedNameWillBeShared">Отредактированное имя будет разослано всем участникам группы.</string>
<string name="QrShowInviteCode">Показать QR код приглашения</string>
<string name="E2EEncryptionPreferred">Предпочтено сквозное шифрование.</string>
<string name="OobAddrVerified">%1$s верифицирован.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$s верифицирован, представьтесь …</string>
</resources>
<string name="OobAskJoinVerifiedGroup">Вы хотите присоединиться к верифицированной группе <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
%2$s is replaced by a the name of the user that made this action.
Resulting strings might be "Member Alice added by Bob." or 'Group name changed from "Foo" to "Bar" by Claire.
If you do not find a correct grammar for your language you can just use "%1$s (by %2$s)" or "%2$s: %1$s" -->
<string name="ActionByUser">%1$s от %2$s.</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s от меня.</string>
<string name="ExampleEmailAddr">user@example.org</string>
<string name="QrScanHint">Наведите камеру на QR код</string>
<string name="QrShowVerifyCode">Показать проверочный QR код</string>
<string name="QrVerifyContactTitle">Проверочный QR код</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nСканируйте эту настройку доверенного контакта.</string>
<string name="QrShowInviteCode">Показать QR код приглашения</string>
<string name="QrJoinVerifiedGroupTitle">Пригласительный QR код</string>
<string name="QrJoinVerifiedGroupHint">Сканируйте этот код для вступления в доверенную группу <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchMode">Режим выборки</string>
<string name="FetchModeSaveBattery">Сохранять баратею</string>
<string name="FetchModePersistentConnection">Постоянное соединение</string>
<string name="FetchModeExplain">Когда используется режим выборки <![CDATA[<i>]]>Сохранять батарею<![CDATA[</i>]]>, новые сообщения появляются сразу, если приложение находится в фоне, если приложение не используется, с задержкой в 30 секунд. Когда устройство находится в «Спящем режиме» задержка может быть дольше. Это режим по умолчанию.\n\n<![CDATA[<i>]]>Постоянное соединение<![CDATA[</i>]]> обычно сообщения приходят быстрее, но в таком случае расход батареи может быть значительным.\n\nКакой режим выборки вы желаете использовать?</string>
<string name="PermissionCamera">Необходим допуск к камере если вы хотите сделать фотоснимок или сканировать QR коды.</string>
</resources>
@@ -328,6 +328,7 @@
<string name="AskStartChatWith">Bisedoni me <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Prekni shigjetat përgjigje që të nisni të bisedoni.</string>
<string name="NotYetImplemented">Ky funksion s’është i passhëm ose është jo i plotë</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Dërguar me Delta Chat Messenger-in tim: https://delta.chat</string>
<string name="Name" >Emër</string>
<string name="EmailAddress">Adresë email</string>
@@ -442,7 +443,6 @@
<string name="VerifiedGroup">Grup i verifikuar</string>
<string name="Group">Grup</string>
<string name="EditedNameWillBeShared">Emri i përpunuar do të ndahet me krejt anëtarët e grupit.</string>
<string name="QrShowInviteCode">Shfaq kod QR ftese</string>
<string name="E2EEncryptionPreferred">Parapëlqehet fshehtëzim skaj-më-skaj.</string>
<string name="OobAddrVerified">%1$s u verifikua.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$s u verifikua, prezantomë …</string>
@@ -456,4 +456,19 @@
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s nga unë.</string>
<string name="ExampleEmailAddr">user@example.org</string>
<string name="QrScanHint">Vendoseni kamerën tuaj mbi kodin QR</string>
<string name="QrShowVerifyCode">Shfaq kod verifikimi QR</string>
<string name="QrVerifyContactTitle">Kod verifikimi QR</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nSkanojeni këtë që të rregullohet një kontakt i verifikuar.</string>
<string name="QrShowInviteCode">Shfaq kod QR ftese</string>
<string name="QrJoinVerifiedGroupTitle">Kod ftese QR</string>
<string name="QrJoinVerifiedGroupHint">Skanoje këtë që të bëheni pjesë e një grupi të verifikuar <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchMode">Mënyrë prurjesh</string>
<string name="FetchModeSaveBattery">Kurseni bateri</string>
<string name="FetchModePersistentConnection">Lidhje e qëndrueshme</string>
<string name="FetchModeExplain">Kur përdoret mënyra sjellje <![CDATA[<i>]]>Kurseni bateri<![CDATA[</i>]]>, mesazhet e rinj shfaqen menjëherë, nëse aplikacioni gjendet në prapaskenë dhe me një vonesë mesatarisht 30 sekondash, nëse aplikacioni nuk është në përdorim. Kur pajisja gjendet nën mënyrën <em>doze</em>, vonesa mund të jetë më e madhe. Kjo është mënyra parazgjedhje.\n\n<![CDATA[<i>]]>Lidhja e qëndrueshme<![CDATA[</i>]]> është përgjithësisht më e shpejtë, por mund të kërkojë që aplikacioni të lejohet nga sistemi të harxhojë më tepër bateri.\n\nCilën mënyrë prurjesh doni të përdoret?</string>
<string name="PermissionCamera">Nëse doni të bëni foto apo doni të skanoni kode QR, lypset hyrje te kamera.</string>
</resources>
@@ -289,6 +289,7 @@
<string name="MuteAlways">எப்போதுமே ஊமையாக்கு </string>
<string name="DeaddropHint">மறு உத்தரவிற்கான அம்பு குறியை தட்டி அரட்டையை ஆரம்பிக்கவும் </string>
<string name="NotYetImplemented">இந்த செயல்பாடு தற்போது இல்லை அல்லது முழுமையடையவில்லை </string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">என்னுடைய டெல்டா அரட்டை செயலியில் இருந்து அனுப்பி உள்ளேன் : https://delta.chat</string>
<string name="Name" >பெயர் </string>
<string name="EmailAddress">மின் அஞ்சல் முகவரி </string>
@@ -37,7 +37,7 @@
<string name="ChatGallery">గ్యాలరీ</string>
<string name="ChatCamera">కెమేరా</string>
<string name="NoMessages">సందేశాలు లేవు</string>
<string name="ForwardedMessage">ఫార్వర్డ్ చేయబడిన సందేసం </string>
<string name="ForwardedMessage">ఫార్వర్డ్ చేయబడిన సందేసం</string>
<string name="From">నుండీ</string>
<string name="NoRecent">ఇటీవల లేవు</string>
<string name="TypeMessage">సందేశం</string>
@@ -56,7 +56,7 @@
<!--contacts view-->
<string name="NoContacts">ఇంకా ఏ పరిచయాలూ లేవు.</string>
<!--group create view-->
<string name="SendMessageTo">సందేశం పంపు </string>
<string name="SendMessageTo">సందేశం పంపు</string>
<string name="EnterGroupNamePlaceholder">సమూహం పేరు నమోదు చేయి</string>
<!--group info view-->
<string name="AddMember">సభ్యుడిని జత చేయి</string>
@@ -192,19 +192,56 @@
<string name="AttachVoiceMessage">మాట సందేశం</string>
<string name="FromSelf">నేను</string>
<!--Alert messages-->
<string name="NoHandleAppInstalled">మీ దగ్గర ఈ ఫైల్ \'%1$s\' రకాన్ని గుర్తించే అప్లికేషన్లు లేవు, దయచేసి గుర్తించేదాన్ని ఒకటి ఇంస్టాల్ చేసి కొనసాగండి </string>
<string name="NoHandleAppInstalled">మీ దగ్గర ఈ ఫైల్ \'%1$s\' రకాన్ని గుర్తించే అప్లికేషన్లు లేవు, దయచేసి గుర్తించేదాన్ని ఒకటి ఇంస్టాల్ చేసి కొనసాగండి</string>
<string name="ContactAlreadyInGroup">ఈ పరిచయం ఇప్పటికే ఈ సమూహం లో ఉంది.</string>
<string name="ForwardMessagesTo">సందేశాలు <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>ఫార్వర్డ్ చేయాలా?</string>
<string name="SendMessagesTo">సందేశాలు <![CDATA[ఛ్డాటా[<b>]]>%1$s<![CDATA[</b>]]>కు పంపాలా?</string>
<string name="ForwardMessagesTo">సందేశాలు <b>%1$s</b>ఫార్వర్డ్ చేయాలా?</string>
<string name="SendMessagesTo">సందేశాలు ఛ్డాటా[<b>%1$s</b>కు పంపాలా?</string>
<string name="AreYouSureDeleteThisChat">ఈ చాట్ ను తొలగించాలా? ఈ చాట్ ఇకమీదట చాట్ లిస్ట్ లో చూపించబడదు, సందేశాలు మాత్రం సర్వర్ లో ఉంటాయి.</string>
<string name="AreYouSureBlockContact">మీరు ఈ పరిచయాన్ని రద్దుచేయాలని నిర్ణయించుకున్నారా?</string>
<string name="AreYouSureDeleteContact">మీరు ఈ పరిచయాన్ని తొలగించాలని నిర్ణయించుకున్నారా?</string>
<!--permissions-->
<string name="PermissionContacts">డెల్టా చాట్ మీ స్నేహితులతో ఎల్లప్పుడూ కనెక్ట్ అయి ఉండడానికి మీ పరిచాయాల యాక్సస్ కు అనుమతించాలి. </string>
<string name="PermissionContacts">డెల్టా చాట్ మీ స్నేహితులతో ఎల్లప్పుడూ కనెక్ట్ అయి ఉండడానికి మీ పరిచాయాల యాక్సస్ కు అనుమతించాలి.</string>
<string name="PermissionStorage">డెల్టా చాట్ లొ మీరు వీడియోలు, చిత్రాలు, సంగీతం, మరియు వేరే మీడియా పంపడానికి, భద్రపరుచుకోడానికి మీ డివైజ్ స్టొరేజ్ యాక్సస్ కావాలి.</string>
<string name="PermissionOpenSettings">సెట్టింగులు</string>
<!--Intro view-->
<string name="Intro1Headline">డెల్టా చాట్</string>
<string name="AccountSettings">ఖాతా సెట్టింగులు</string>
<string name="Password">పాస్వర్డ్</string>
<string name="AboutThisProgram">డెల్టా చాట్ గురించి</string>
<string name="Deaddrop">పరిచయ అభ్యర్ధనలు</string>
<string name="DeaddropInChatlist">చాట్ జాబితాలో పరిచయ అభ్యర్ధనలు చూపించు</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">నా డెల్టా చాట్ మెసెంజర్ ద్వారా పంపబడినది: https://delta.chat</string>
<string name="EmailAddress">ఈమెయిల్ చిరునామా</string>
<string name="ContactCreated">పరిచయం సృష్టించబడింది</string>
<string name="AttachFiles">జతచెసిన‌ ఫైళ్ళు</string>
<string name="ErrGroupNameEmpty">సమూహానికి పేరు పెట్టు</string>
<string name="E2ECompareKeys">కీలను పోల్చు</string>
<string name="DoneHint">పూర్తఅయింది.</string>
<string name="HelpUrl">https://delta.chat/en/help</string>
<string name="EncryptedMessage">ఎంక్రిప్ట్ చెసిన సందేశం</string>
<string name="Encryption">ఎన్క్రిప్షన్</string>
<string name="EncrinfoFingerprints">ఫింగర్‌ప్రింట్స్</string>
<string name="Backup">బ్యాకప్</string>
<string name="ExportImportHeader">ఎగుమతి &amp; దిగుమతి</string>
<string name="IncorrectPassword">తప్పు పాస్వర్డ్</string>
<string name="ExportBackup">బ్యాకప్ ఎగుమతి చెయి</string>
<string name="ExportPrivateKeys">రహస్య కీలను ఎగుమతి చెయి</string>
<string name="ArchiveChat">చాట్ ఆర్చివ్</string>
<string name="Archived">ఆర్చివ్ అయినది</string>
<string name="Autocrypt">ఆటొక్రిప్ట్</string>
<string name="Contact">పరిచయం</string>
<string name="Group">సమూహము</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
%2$s is replaced by a the name of the user that made this action.
Resulting strings might be "Member Alice added by Bob." or 'Group name changed from "Foo" to "Bar" by Claire.
If you do not find a correct grammar for your language you can just use "%1$s (by %2$s)" or "%2$s: %1$s" -->
<string name="ActionByUser">%1$s చే %2$s.</string>
<!-- Translators: %1$s is replaced by an action, eg. MsgMemberAddedToGroup, MsgMemberRemovedFromToGroup, MsgGroupNameChanged or MsgGroupImageChanged. If the action ends with a full stop, this is removed.
Resulting strings might be "Member Alice added by me." or 'Group name changed from "Foo" to "Bar" by me.
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s నా‌ ద్వరా</string>
<string name="ExampleEmailAddr">user@example.org</string>
<string name="FetchMode">వెతికే మోడ్</string>
<string name="FetchModeSaveBattery">బ్యాటరి ఆదా</string>
</resources>
@@ -104,6 +104,7 @@
<string name="SmartNotificationsSoundAtMost">En çok</string>
<string name="SmartNotificationsTimes">kere</string>
<string name="SmartNotificationsWithin">içerisinde</string>
<string name="SmartNotificationsMinutes">dakikalar</string>
<string name="DirectShare">Doğrudan paylaşım</string>
<string name="DirectShareInfo">Son söyleşileri paylaşma menüsünde göster</string>
<!--cache view-->
@@ -294,6 +295,7 @@
<string name="AskStartChatWith"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]> ile söyleşi?</string>
<string name="DeaddropHint">Söyleşmeye başlamak için yanıt oklarına dokunun.</string>
<string name="NotYetImplemented">Bu işlev mevcut değil veya eksik.</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Delta Chat Messengerim ile göderildi: https://delta.chat</string>
<string name="Name" >Ad</string>
<string name="EmailAddress">E-posta adresi</string>
@@ -341,6 +343,7 @@
<string name="HelpUrl">https://delta.chat/en/help</string>
<string name="EncryptedMessage">Şifrelenmiş ileti</string>
<string name="Encryption">Şifreleme</string>
<string name="EncrinfoE2EAvailable">Uçtan uca şifreleme kullanılabilir.</string>
<string name="EncrinfoTransport">En azından sunucuma kadar şifreli taşıma.</string>
<string name="EncrinfoNone">Sunucuma şifreleme yok.</string>
<string name="EncrinfoFingerprints">Parmak izleri</string>
@@ -394,4 +397,16 @@
<string name="VerifiedGroup">Doğrulanmış grup</string>
<string name="Group">Grup</string>
<string name="EditedNameWillBeShared">Düzenlenen ad tüm grup üyeleriyle paylaşılacaktır.</string>
<string name="E2EEncryptionPreferred">Uçtan uca şifreleme yeğlendi.</string>
<string name="OobAddrVerified">%1$s doğrulanmış.</string>
<string name="ExampleEmailAddr">user@example.org</string>
<string name="QrScanHint">Kameranızı QR kodunun üzerine getirin</string>
<string name="QrShowVerifyCode">QR doğrulama kodunu göster</string>
<string name="QrVerifyContactTitle">QR doğrulama kodu</string>
<string name="QrShowInviteCode">QR çağrı kodunu göster</string>
<string name="QrJoinVerifiedGroupTitle">QR çağrı kodu</string>
<string name="FetchMode">Getirme kipi</string>
<string name="FetchModeSaveBattery">Pil tasarrufu</string>
<string name="FetchModePersistentConnection">Kalıcı bağlantı</string>
</resources>
@@ -232,31 +232,37 @@
<plurals name="Members">
<item quantity="one">%dучасник</item>
<item quantity="few">%dучасники</item>
<item quantity="many">%dучасників</item>
<item quantity="other">%dучасників</item>
</plurals>
<plurals name="Contacts">
<item quantity="one">%dконтакт</item>
<item quantity="few">%dконтакти</item>
<item quantity="many">%dконтактів</item>
<item quantity="other">%dконтактів</item>
</plurals>
<plurals name="MeAndMembers">
<item quantity="one">Я та %dучасник</item>
<item quantity="few">Я та %dучасники</item>
<item quantity="many">Я та %dучасників</item>
<item quantity="other">Я та %dучасників</item>
</plurals>
<plurals name="NewMessages">
<item quantity="one">%dнове повідомлення</item>
<item quantity="few">%dнових повідомення</item>
<item quantity="many">%dнових повідомлень</item>
<item quantity="other">%dнових повідомлень</item>
</plurals>
<plurals name="messages">
<item quantity="one">%dповідомлення</item>
<item quantity="few">%dповідомлення</item>
<item quantity="many">%dповідомлень</item>
<item quantity="other">%dповідомлень</item>
</plurals>
<plurals name="AreYouSureDeleteMessages">
<item quantity="one">Видалити%dповідомлення? Повідомлення видалиться з серверу також.</item>
<item quantity="few">Видалити%dповідомлення? Повідомлення видаляться з серверу також.</item>
<item quantity="many">Видалити%dповідомлень? Повідомлення видаляться з серверу також.</item>
<item quantity="other">Видалити%dповідомлень? Повідомлення видаляться з серверу також.</item>
</plurals>
<!-- Translators: The first string placeholder gets replaced with the
@@ -265,36 +271,43 @@
<plurals name="NewMessagesInChats">
<item quantity="one">%1$sв%2$dрозмові</item>
<item quantity="few">%1$sу %2$dрозмовах</item>
<item quantity="many">%1$sу%2$dрозмовах</item>
<item quantity="other">%1$sу%2$dрозмовах</item>
</plurals>
<plurals name="Chats">
<item quantity="one">%dрозмова</item>
<item quantity="few">%dрозмови</item>
<item quantity="many">%dрозмов</item>
<item quantity="other">%dрозмов</item>
</plurals>
<plurals name="Minutes">
<item quantity="one">%dхвилина</item>
<item quantity="few">%dхвилини</item>
<item quantity="many">%dхвилин</item>
<item quantity="other">%dхвилин</item>
</plurals>
<plurals name="Hours">
<item quantity="one">%dгодина</item>
<item quantity="few">%dгодини</item>
<item quantity="many">%dгодин</item>
<item quantity="other">%dгодин</item>
</plurals>
<plurals name="Days">
<item quantity="one">%dдень</item>
<item quantity="few">%dдні</item>
<item quantity="many">%dднів</item>
<item quantity="other">%dднів</item>
</plurals>
<plurals name="Weeks">
<item quantity="one">%dтиждень</item>
<item quantity="few">%dтижні</item>
<item quantity="many">%dтижнів</item>
<item quantity="other">%dтижнів</item>
</plurals>
<plurals name="Months">
<item quantity="one">%dмісяць</item>
<item quantity="few">%dмісяці</item>
<item quantity="many">%dмісяців</item>
<item quantity="other">%dмісяців</item>
</plurals>
<!-- Translators: The second string placeholder gets replaced with the
@@ -303,6 +316,7 @@
<plurals name="MaxNotifications">
<item quantity="one">Щобільш%1$dсповіщення за%2$s</item>
<item quantity="few">Щобільш%1$dсповіщення за%2$s</item>
<item quantity="many">Щобільш%1$dсповіщень за%2$s</item>
<item quantity="other">Щобільш%1$dсповіщень за%2$s</item>
</plurals>
<!--date formatters-->
@@ -343,6 +357,7 @@
<string name="AskStartChatWith">Почати розмову з <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Аби почати розмову, клацніть на стрілки відповіді.</string>
<string name="NotYetImplemented">Ця функція є недоступною або незавершеною.</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Надіслано за допомогою оповісника Delta Chat: https://delta.chat</string>
<string name="Name" >Псевдо</string>
<string name="EmailAddress">Адреса e-mail</string>
@@ -432,7 +447,7 @@
<string name="Contact">Контакт</string>
<string name="Group">Спільнота</string>
<string name="EditedNameWillBeShared">Кориговане ім\'я пошириться серед усіх членів спільноти.</string>
<string name="QrShowInviteCode">Показати QR-код запрошення</string>
<string name="OobAddrVerified">%1$sпідтверджено.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$sпідтверджено, привітайтеся ...</string>
<string name="QrShowInviteCode">Показати QR-код запрошення</string>
</resources>
+29 -15
View File
@@ -17,7 +17,7 @@
<string name="UnmuteNotifications">Unmute</string>
<string name="Draft">Draft</string>
<!--audio view-->
<string name="NoAudio">Files added to the music library of your device will appear here.</string>
<string name="NoAudio">Files from your music library.</string>
<string name="AttachMusic">Music</string>
<!--documents view-->
<string name="SelectFile">Select File</string>
@@ -83,7 +83,7 @@
<string name="Default">Default</string>
<string name="OnlyIfSilent">Only when silent</string>
<string name="ChatBackground">Chat background</string>
<string name="SendByEnter">Send with </string>
<string name="SendByEnter">Send with </string>
<string name="Help">Help</string>
<string name="Enabled">On</string>
<string name="Disabled">Off</string>
@@ -115,7 +115,7 @@
<!--passcode view-->
<string name="Passcode">Passcode Lock</string>
<string name="ChangePasscode">Change Passcode</string>
<string name="ChangePasscodeInfo">When you set up an additional passcode, a lock icon will appear on the chats page. Tap it to lock the app.\n\nNote: If you forget the passcode, you\'ll need to delete and reinstall the app.</string>
<string name="ChangePasscodeInfo">When you set up an additional passcode, a lock icon will appear atop the chat list. Tap it to lock the app.\n\nNote: If you forget the passcode, you\'ll need to delete and reinstall the app.</string>
<string name="PasscodePIN">PIN</string>
<string name="PasscodePassword">Password</string>
<string name="EnterCurrentPasscode">Enter your current passcode</string>
@@ -128,7 +128,7 @@
<string name="AutoLockInfo">Require passcode if away for a time.</string>
<string name="UnlockFingerprint">Unlock with fingerprint</string>
<string name="FingerprintInfo">Confirm fingerprint to continue</string>
<string name="FingerprintNotRecognized">Fingerprint not recognized. Try again</string>
<string name="FingerprintNotRecognized">Fingerprint not recognized. Try again.</string>
<!--photo gallery view-->
<string name="SaveToGallery">Save to \"Gallery\"</string>
<string name="Of">%1$d of %2$d</string>
@@ -194,7 +194,7 @@
<string name="AttachVoiceMessage">Voice message</string>
<string name="FromSelf">Me</string>
<!--Alert messages-->
<string name="NoHandleAppInstalled">No installed app could open the filetype \'%1$s\', please install one to continue.</string>
<string name="NoHandleAppInstalled">Please install an app that can handle \'%1$s\' files to continue.</string>
<string name="ContactAlreadyInGroup">The contact is already in this group.</string>
<string name="ForwardMessagesTo">Forward selected messages to <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="SendMessagesTo">Send messages to <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
@@ -204,7 +204,7 @@
<!--permissions-->
<string name="PermissionContacts">Access to contacts needed to connect with your friends across all your devices.</string>
<string name="PermissionStorage">Storage access needed to send and save photos, videos, music, and other media.</string>
<string name="PermissionNoAudio">Microphone access needed to record voice messages.</string>
<string name="PermissionNoAudio">Grant microphone access to record voice messages.</string>
<string name="PermissionOpenSettings">Settings</string>
<!--Intro view-->
<string name="Intro1Headline">Delta Chat</string>
@@ -250,8 +250,8 @@
<item quantity="other">%d messages</item>
</plurals>
<plurals name="AreYouSureDeleteMessages">
<item quantity="one">Delete %d message? It will also be deleted from the server.</item>
<item quantity="other">Delete %d messages? These will also be deleted from the server.</item>
<item quantity="one">Delete %d messagehere and from the server.</item>
<item quantity="other">Delete %d messages here and from the server.</item>
</plurals>
<!-- Translators: The first string placeholder gets replaced with the
text "%d new messages", so the complete sentence would be e.g.
@@ -304,7 +304,7 @@
<string name="AccountSettings">Account settings</string>
<string name="MyAccount">My account</string>
<string name="MyName">My name</string>
<string name="MyNameExplain">Your name, as shown to the recipients. If left blank, only your email address will be sent.</string>
<string name="MyNameExplain">Your name, as shown to recipients. If left blank, only your email address will be sent.</string>
<string name="Password">Password</string>
<string name="SmtpPassword">SMTP password</string>
<string name="FromAbove">From above</string>
@@ -329,6 +329,7 @@
<string name="AskStartChatWith">Chat with <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="DeaddropHint">Tap the reply-arrows to start chatting.</string>
<string name="NotYetImplemented">This function is not available or incomplete.</string>
<!-- Translators: The URL should not be localized, it is not clear which languuage the receiver prefers and the language will be detected on the server -->
<string name="DefaultStatusText">Sent with my Delta Chat Messenger: https://delta.chat</string>
<string name="Name" >Name</string>
<string name="EmailAddress">Email address</string>
@@ -391,7 +392,7 @@
<string name="MsgGroupImageDeleted">Group image deleted.</string>
<string name="AskDeleteGroupImage">Are you sure to delete the group image?\n\nThis will affect all devices of all group members.</string>
<string name="ExportImportHeader">Export and import</string>
<string name="ImportExportExplain">Exported files will contain your end-to-end setup! Keep them in a safe place or delete them as soon as possible.</string>
<string name="ImportExportExplain">Exported files will contain your end-to-end Autocrypt setup! Keep them in a safe place or delete them as soon as possible.</string>
<string name="EnterPasswordToContinue">Enter the password for %1$s to continue:</string>
<string name="IncorrectPassword">Incorrect password.</string>
<string name="ImportBackupAsk">Backup found at <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nDo you want to import and use all data and settings from it?</string>
@@ -413,7 +414,7 @@
<string name="Never">Never</string>
<string name="AutocryptKeyTransferInitiate">Send Autocrypt Setup Message</string>
<string name="AutocryptKeyTransfer">Autocrypt Setup Message</string>
<string name="AutocryptKeyTransferMsgBeforeSend">An <![CDATA[<i>]]>Autocrypt Setup Message<![CDATA[</i>]]> securely shares your end-to-end setup with other Autocrypt-compliant devices.\n\nThe setup will be encrypted by a setup code which is displayed here and must be typed on the other device.</string>
<string name="AutocryptKeyTransferMsgBeforeSend">An <![CDATA[<i>]]>Autocrypt Setup Message<![CDATA[</i>]]> securely shares your end-to-end setup with other Autocrypt-compliant apps.\n\nThe setup will be encrypted by a setup code which is displayed here and must be typed on the other device.</string>
<string name="AutocryptKeyTransferMsgAfterSend">Your setup has been sent to yourself. Switch to the other device and open the setup message. You should be prompted for a setup code. Type the following digits into the prompt:\n\n%1$s\n\nOnce you\'re done, your other device will be ready to use Autocrypt.</string>
<string name="AutocryptSetupMessageSubject">Autocrypt Setup Message</string>
<string name="AutocryptSetupMessageGeneralBody">This is the Autocrypt Setup Message used to transfer your end-to-end setup between clients.\n\nTo decrypt and use your setup, open the message in an Autocrypt-compliant client and enter the setup code presented on the generating device.</string>
@@ -431,11 +432,11 @@
<string name="OobFingerprintAskOob">Verify contact and start chatting with <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
<string name="OobFingerprintOk">Contact <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> verified. Start chatting?</string>
<string name="OobFingerprintMismatch">The scanned fingerprint does <![CDATA[<b>]]>not match<![CDATA[</b>]]> the fingerprint last seen for <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
<string name="OobFingerprintWithoutAddr">This QR code contains a fingerprint but no e-mail address.\n\nFor an out-of-band-verification, please establish an encrpyted connection to the recipient first.</string>
<string name="OobFingerprintWithoutAddr">This QR code contains a fingerprint but no email address.\n\nFor an out-of-band-verification, please establish an encrpyted connection to the recipient first.</string>
<string name="OobSecureJoinRequested">%1$s joins.</string>
<string name="CannotDecryptBody">This message cannot be decrypted.\n\n• It might already help to simply reply to this message and ask the sender to send the message again.\n\n• In case you re-installed Delta Chat or another E-Mail-program on this or another device you may want to send an Autocrypt Setup Message from there.</string>
<string name="CannotDecryptBody">This message cannot be decrypted.\n\n• It might already help to simply reply to this message and ask the sender to send the message again.\n\n• In case you re-installed Delta Chat or another email program on this or another device you may want to send an Autocrypt Setup Message from there.</string>
<string name="Autocrypt">Autocrypt</string>
<string name="AutocryptExplain"><![CDATA[<i>]]>Autocrypt<![CDATA[</i>]]> is a new and open specification for e-mail end-to-end encryption.\n\nYour end-to-end setup is created automatically as needed and you can transfer it between devices with <![CDATA[<i>]]>Autocrypt Setup Messages.<![CDATA[</i>]]></string>
<string name="AutocryptExplain"><![CDATA[<i>]]>Autocrypt<![CDATA[</i>]]> is a new and open specification for end-to-end email encryption.\n\nYour end-to-end setup is created automatically as needed and you can transfer it between devices with <![CDATA[<i>]]>Autocrypt Setup Messages.<![CDATA[</i>]]></string>
<string name="NewVerifiedGroup">New verified group</string>
<string name="SharedChats">Shared chats</string>
<string name="VerifiedContact">Verified contact</string>
@@ -443,7 +444,6 @@
<string name="VerifiedGroup">Verified group</string>
<string name="Group">Group</string>
<string name="EditedNameWillBeShared">The edited name will be shared with all group members.</string>
<string name="QrShowInviteCode">Show QR invite code</string>
<string name="E2EEncryptionPreferred">End-to-end encryption preferred.</string>
<string name="OobAddrVerified">%1$s verified.</string>
<string name="OobAddrVerifiedIntroduceMyself">%1$s verified, introduce myself …</string>
@@ -458,4 +458,18 @@
If you do not find a correct grammar for your language you can just use "%1$s (by me)" or "Me: %1$s" -->
<string name="ActionBySelf">%1$s by me.</string>
<string name="ExampleEmailAddr">user@example.org</string>
<string name="QrScanHint">Place your camera over the QR code</string>
<string name="QrShowVerifyCode">Show QR verify code</string>
<string name="QrVerifyContactTitle">QR verify code</string>
<string name="QrVerifyContactHint"><![CDATA[<b>]]>%1$s<![CDATA[</b>]]>\nScan this to setup a verified contact.</string>
<string name="QrShowInviteCode">Show QR invite code</string>
<string name="QrJoinVerifiedGroupTitle">QR invite code</string>
<string name="QrJoinVerifiedGroupHint">Scan this to join the verified group <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>.</string>
<string name="FetchMode">Fetch mode</string>
<string name="FetchModeSaveBattery">Save battery</string>
<string name="FetchModePersistentConnection">Persistent connection</string>
<string name="FetchModeExplain">When using the fetch mode <![CDATA[<i>]]>Save battery<![CDATA[</i>]]>, new messages appear at once if the app is in foreground and with an average delay of 30 seconds if the app is not used. When the device is in doze mode, the delay may be longer. This is the default mode.\n\n<![CDATA[<i>]]>Persistent connection<![CDATA[</i>]]> is typically faster but may require the app to be whitelisted in the system settings to consume more battery.\n\nWhich fetch mode do you want to use?</string>
<string name="PermissionCamera">Access to the camera is needed if you want to take photos or if you want to scan QR codes.</string>
</resources>
@@ -10,6 +10,13 @@
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="Theme.MessengerProj.AppCompat" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">#415e6b</item>
<item name="colorPrimaryDark">#364e59</item>
<item name="android:colorBackground">@android:color/white</item>
<item name="android:windowBackground">@android:color/white</item>
</style>
<style name="Theme.MessengerProj" parent="@android:style/Theme.Holo.Light">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
+1 -1
View File
@@ -59,7 +59,7 @@ Install Development Environment
Now the build should succeed - but the app still misses the native part.
6. Download Android NDK Revision 14b from
[NDK Archives](https://developer.android.com/ndk/downloads/older_releases.html)
[NDK Archives](https://developer.android.com/ndk/downloads/older_releases)
(Newer releases shall not be used currently, they are not compatible,
see issues #197, #220, #248) and unzip the archive which contains a single folder
called `android-ndk-r...`; move this folder eg. to `~/android-ndk-r...`
+1
View File
@@ -16,6 +16,7 @@ TXPREFIX="translations/delta-chat-android.stringsxml/"
SRCPREFIX="../MessengerProj/src/main/res/values"
cp "${TXPREFIX}ca.xml" "${SRCPREFIX}-ca/strings.xml"
cp "${TXPREFIX}da.xml" "${SRCPREFIX}-da/strings.xml"
cp "${TXPREFIX}de.xml" "${SRCPREFIX}-de/strings.xml"
# "${TXPREFIX}en.xml" "${SRCPREFIX}/strings.xml" # we do not copy the source as the source cannot be modified at Trasifex
cp "${TXPREFIX}es.xml" "${SRCPREFIX}-es/strings.xml"
+1
View File
@@ -8,6 +8,7 @@ TXPREFIX="translations/delta-chat-android.stringsxml/"
SRCPREFIX="../MessengerProj/src/main/res/values"
cp "${SRCPREFIX}-ca/strings.xml" "${TXPREFIX}ca.xml"
cp "${SRCPREFIX}-da/strings.xml" "${TXPREFIX}da.xml"
cp "${SRCPREFIX}-de/strings.xml" "${TXPREFIX}de.xml"
cp "${SRCPREFIX}/strings.xml" "${TXPREFIX}en.xml" # also copy back the source, this is the only way to update the english strings
cp "${SRCPREFIX}-es/strings.xml" "${TXPREFIX}es.xml"