mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
Compare commits
79 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9123210f69 | |||
| 630a259a5a | |||
| f0183064ed | |||
| 11bca87a47 | |||
| 3863b74fbd | |||
| 8216ce7d20 | |||
| a7a06ce26b | |||
| e9e4c01e54 | |||
| 47e2fa4a22 | |||
| 90fad460a6 | |||
| 929962c228 | |||
| a55edf0ba0 | |||
| e255926e10 | |||
| 21ed3e06e6 | |||
| 2ceffb283f | |||
| 2e52bacfba | |||
| 6c624e93b3 | |||
| ee5b2371e0 | |||
| 18297213f2 | |||
| 1373e46d04 | |||
| d7c6bac301 | |||
| b9e3a5454e | |||
| 3decd485ea | |||
| 285fcf3df3 | |||
| 0312960e93 | |||
| cfee7400c9 | |||
| e113fb0902 | |||
| deedd1acac | |||
| e1d912158d | |||
| 373e15b08a | |||
| e2bdb0bf13 | |||
| 19de16887c | |||
| 8609892116 | |||
| 76717b908d | |||
| c57ae9861f | |||
| 63a2899fdc | |||
| 2d86c5b10b | |||
| bd5ba8ebaf | |||
| 0e90ea1308 | |||
| ec05602bb1 | |||
| 2c55c93367 | |||
| b37a91cdd9 | |||
| 223c39d26a | |||
| 0a46073552 | |||
| 0325c9531f | |||
| c4ec5c6e1a | |||
| b00e35f341 | |||
| a935425e5d | |||
| 46fc46ee4f | |||
| d7fcf9433d | |||
| ec921e22e8 | |||
| 55bc139c72 | |||
| a5187ed1a2 | |||
| a79cbe9804 | |||
| dd9d10a991 | |||
| 3c78f6a82f | |||
| 4a30940d54 | |||
| 0c0e1a35e2 | |||
| 0fe4827214 | |||
| 80c8b7ef20 | |||
| 93a99cdd2c | |||
| 76dfa1fca5 | |||
| ba1c32fe05 | |||
| 1c77b0bf4e | |||
| 31331b958f | |||
| 80fc718ec8 | |||
| 823a1e2197 | |||
| 8fad2d0226 | |||
| ad69dc4ad4 | |||
| f8f89497a9 | |||
| 4272ac7619 | |||
| 3e5da102a5 | |||
| 51742716ec | |||
| fb7a106617 | |||
| c016c728d3 | |||
| b6c1d4b768 | |||
| 21cb85ce39 | |||
| fa9f13bba8 | |||
| 7feda6323a |
@@ -0,0 +1,23 @@
|
||||
# Thank you for contributing to Delta Chat.
|
||||
|
||||
Delta Chat is divided in two parts: Android and [Core](https://github.com/deltachat/deltachat-core).
|
||||
|
||||
In short, the Android part is about the User Interface. The Interface is translated using [Transifex](https://www.transifex.com/delta-chat/delta-chat-android). The Core part is about handling the connection to the mail server and the chat or e-mail messages as well as providing secure communication by using [Autocrypt](https://autocrypt.org/en/latest/).
|
||||
|
||||
Delta Chat Core is used in the Android and in the [iOS](https://github.com/deltachat/deltachat-ios) version.
|
||||
|
||||
Please try to create your issue to the respective Issue tracker: Here, or in [Core](https://github.com/deltachat/deltachat-core/issues). Don't worry, if you are not sure. We will move the issue if necessary.
|
||||
|
||||
If you intend to create a **feature request** for Delta Chat, please check the exiting requests for
|
||||
* [Android](https://github.com/deltachat/deltachat-android/issues?q=is%3Aissue+label%3A%22feature+request%22+sort%3Aupdated-desc) and
|
||||
* [Core](https://github.com/deltachat/deltachat-core/issues?q=is%3Aissue+label%3A%22feature+request%22+sort%3Aupdated-desc)
|
||||
|
||||
first.
|
||||
|
||||
If you intend to send a **bug report** for Delta Chat, search for bugs (including closed) in
|
||||
* [Android](https://github.com/deltachat/deltachat-android/issues?&q=is%3Aissue) and
|
||||
* [Core](https://github.com/deltachat/deltachat-core/issues?&q=is%3Aissue)
|
||||
|
||||
A **bug** is a reproducable misbehaviour, when something happens but something else should happen instead.
|
||||
|
||||
Did you know there is a [Help](https://delta.chat/en/help) page for Delta Chat?
|
||||
@@ -0,0 +1,34 @@
|
||||
_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._
|
||||
|
||||
**Delta Chat version**
|
||||
|
||||
See settings dialog …
|
||||
|
||||
**Expected behavior**
|
||||
|
||||
What is the expected output?
|
||||
|
||||
**Actual behavior**
|
||||
|
||||
What do you see instead?
|
||||
|
||||
**Steps to reproduce the problem**
|
||||
|
||||
1. …
|
||||
2. …
|
||||
|
||||
**Screen snapshots**
|
||||
|
||||
If applicable …
|
||||
|
||||
**Debug logs**
|
||||
|
||||
If applicable, debug logs can be copied from within the Delta Chat app:
|
||||
|
||||
Open the _Settings_ menu -> _About_ -> _version number|Info_.
|
||||
|
||||
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.
|
||||
@@ -1,5 +1,20 @@
|
||||
# Delta Chat Changelog
|
||||
|
||||
## v0.11.2
|
||||
2017-12-15
|
||||
|
||||
* Add option to initiate Autocrypt Key Transfer
|
||||
* Connect after importing a backup
|
||||
* Add Albanian translation
|
||||
* Update German, Italian, Polish and Russian translations
|
||||
|
||||
## v0.10.0
|
||||
2017-11-29
|
||||
|
||||
* Fix usage of multiple private keys
|
||||
* Fix various memory leaks
|
||||
* Update English, Portuguese and Turkish translations
|
||||
|
||||
## v0.9.9
|
||||
2017-11-18
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ dependencies {
|
||||
|
||||
android {
|
||||
compileSdkVersion 25
|
||||
buildToolsVersion '25.0.2'
|
||||
buildToolsVersion '26.0.2'
|
||||
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
defaultConfig.applicationId = "com.b44t.messenger"
|
||||
@@ -79,13 +79,12 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
defaultConfig.versionCode = 48
|
||||
|
||||
sourceSets.main {
|
||||
jniLibs.srcDir 'libs'
|
||||
jni.srcDirs = [] //disable automatic ndk-build call
|
||||
}
|
||||
|
||||
flavorDimensions "none"
|
||||
productFlavors {
|
||||
/*
|
||||
x86 {
|
||||
@@ -108,19 +107,22 @@ android {
|
||||
}
|
||||
*/
|
||||
fat {
|
||||
versionCode = 3
|
||||
dimension "none"
|
||||
//versionCode = 3
|
||||
}
|
||||
}
|
||||
|
||||
applicationVariants.all { variant ->
|
||||
/*applicationVariants.all { variant ->
|
||||
def abiVersion = variant.productFlavors.get(0).versionCode
|
||||
variant.mergedFlavor.versionCode = defaultConfig.versionCode * 10 + abiVersion;
|
||||
}
|
||||
}*/
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 14 // 14: Android 4.0 Ice Cream Sandwich 2011 (Telegram default), 21: Android 5.0 Lollipop 2014 (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.9.9" // do NOT forget to increase defaultConfig.versionCode!
|
||||
|
||||
versionName "0.11.2" // do NOT forget to increase defaultConfig.versionCode!
|
||||
versionCode 507
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1633,15 +1633,18 @@ LOCAL_SRC_FILES += \
|
||||
./messenger-backend/libs/netpgp/src/writer.c \
|
||||
./messenger-backend/src/mraheader.c \
|
||||
./messenger-backend/src/mrapeerstate.c \
|
||||
./messenger-backend/src/mrarray.c \
|
||||
./messenger-backend/src/mrchat.c \
|
||||
./messenger-backend/src/mrchatlist.c \
|
||||
./messenger-backend/src/mrcontact.c \
|
||||
./messenger-backend/src/mrdehtml.c \
|
||||
./messenger-backend/src/mrhash.c \
|
||||
./messenger-backend/src/mrimap.c \
|
||||
./messenger-backend/src/mrjob.c \
|
||||
./messenger-backend/src/mrkey.c \
|
||||
./messenger-backend/src/mrkeyring.c \
|
||||
./messenger-backend/src/mrloginparam.c \
|
||||
./messenger-backend/src/mrlot.c \
|
||||
./messenger-backend/src/mrmailbox.c \
|
||||
./messenger-backend/src/mrmailbox_configure.c \
|
||||
./messenger-backend/src/mrmailbox_e2ee.c \
|
||||
@@ -1653,7 +1656,6 @@ LOCAL_SRC_FILES += \
|
||||
./messenger-backend/src/mrmsg.c \
|
||||
./messenger-backend/src/mrparam.c \
|
||||
./messenger-backend/src/mrpgp.c \
|
||||
./messenger-backend/src/mrpoortext.c \
|
||||
./messenger-backend/src/mrsaxparser.c \
|
||||
./messenger-backend/src/mrsimplify.c \
|
||||
./messenger-backend/src/mrsmtp.c \
|
||||
|
||||
Submodule MessengerProj/jni/messenger-backend updated: 44667f5890...f488f9b9c1
+226
-137
@@ -117,15 +117,15 @@ void mrosnative_unsetup_thread(mrmailbox_t* mailbox)
|
||||
|
||||
/* tools */
|
||||
|
||||
static jintArray carray2jintArray_n_carray_free(JNIEnv *env, const carray* ca)
|
||||
static jintArray mrarray2jintArray_n_mrarray_unref(JNIEnv *env, const mrarray_t* ca)
|
||||
{
|
||||
int i, icnt = ca? carray_count(ca) : 0;
|
||||
int i, icnt = ca? mrarray_get_cnt(ca) : 0;
|
||||
jintArray ret = (*env)->NewIntArray(env, icnt); if (ret == NULL) { return NULL; }
|
||||
|
||||
if( ca ) {
|
||||
if( icnt ) {
|
||||
void** ca_data = carray_data(ca);
|
||||
if( sizeof(void*)==sizeof(jint) ) {
|
||||
uintptr_t* ca_data = ca->m_array;
|
||||
if( sizeof(uintptr_t)==sizeof(jint) ) {
|
||||
(*env)->SetIntArrayRegion(env, ret, 0, icnt, (jint*)ca_data);
|
||||
}
|
||||
else {
|
||||
@@ -137,7 +137,7 @@ static jintArray carray2jintArray_n_carray_free(JNIEnv *env, const carray* ca)
|
||||
free(temp);
|
||||
}
|
||||
}
|
||||
carray_free(ca);
|
||||
mrarray_unref(ca);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -258,9 +258,9 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_configureAndConnect(JNIEnv *env
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_configureCancel(JNIEnv *env, jclass cls)
|
||||
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_stopOngoingProcess(JNIEnv *env, jclass cls)
|
||||
{
|
||||
mrmailbox_configure_cancel(get_mrmailbox_t(env, cls));
|
||||
mrmailbox_stop_ongoing_process(get_mrmailbox_t(env, cls));
|
||||
}
|
||||
|
||||
|
||||
@@ -287,9 +287,9 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_disconnect(JNIEnv *env, jclass
|
||||
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getKnownContacts(JNIEnv *env, jclass cls, jstring query)
|
||||
{
|
||||
CHAR_REF(query);
|
||||
carray* ca = mrmailbox_get_known_contacts(get_mrmailbox_t(env, cls), queryPtr);
|
||||
mrarray_t* ca = mrmailbox_get_known_contacts(get_mrmailbox_t(env, cls), queryPtr);
|
||||
CHAR_UNREF(query);
|
||||
return carray2jintArray_n_carray_free(env, ca);
|
||||
return mrarray2jintArray_n_mrarray_unref(env, ca);
|
||||
}
|
||||
|
||||
|
||||
@@ -301,8 +301,8 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getBlockedCount(JNIEnv *env, jc
|
||||
|
||||
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getBlockedContacts(JNIEnv *env, jclass cls)
|
||||
{
|
||||
carray* ca = mrmailbox_get_blocked_contacts(get_mrmailbox_t(env, cls));
|
||||
return carray2jintArray_n_carray_free(env, ca);
|
||||
mrarray_t* ca = mrmailbox_get_blocked_contacts(get_mrmailbox_t(env, cls));
|
||||
return mrarray2jintArray_n_mrarray_unref(env, ca);
|
||||
}
|
||||
|
||||
|
||||
@@ -433,10 +433,10 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatName(JNIEnv *env, jclass
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatImage(JNIEnv *env, jclass cls, jint chat_id, jstring image/*NULL=delete*/)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatProfileImage(JNIEnv *env, jclass cls, jint chat_id, jstring image/*NULL=delete*/)
|
||||
{
|
||||
CHAR_REF(image);
|
||||
jint ret = (jint)mrmailbox_set_chat_image(get_mrmailbox_t(env, cls), chat_id, imagePtr/*CHAR_REF() preserves NULL*/);
|
||||
jint ret = (jint)mrmailbox_set_chat_profile_image(get_mrmailbox_t(env, cls), chat_id, imagePtr/*CHAR_REF() preserves NULL*/);
|
||||
CHAR_UNREF(image);
|
||||
return ret;
|
||||
}
|
||||
@@ -499,33 +499,30 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendTextMsg(JNIEnv *env, jclass
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendVcardMsg(JNIEnv *env, jobject obj, jint chat_id, jint contact_id)
|
||||
{
|
||||
return mrmailbox_send_vcard_msg(get_mrmailbox_t(env, obj), chat_id, contact_id);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendMediaMsg(JNIEnv *env, jclass cls, jint chat_id, jint type, jstring file, jstring mime, jint w, jint h, jint ms, jstring author, jstring trackname)
|
||||
{
|
||||
mrmsg_t* msg = mrmsg_new();
|
||||
msg->m_type = type;
|
||||
CHAR_REF(mime);
|
||||
mrparam_set(msg->m_param, 'm', mimePtr);
|
||||
CHAR_UNREF(mime);
|
||||
CHAR_REF(file);
|
||||
mrparam_set(msg->m_param, 'f', filePtr);
|
||||
CHAR_UNREF(file);
|
||||
if( type == MR_MSG_IMAGE || type == MR_MSG_GIF || type == MR_MSG_VIDEO ) {
|
||||
mrparam_set_int(msg->m_param, 'w', w);
|
||||
mrparam_set_int(msg->m_param, 'h', h);
|
||||
}
|
||||
if( type == MR_MSG_AUDIO || type == MR_MSG_VOICE || type == MR_MSG_VIDEO ) {
|
||||
mrparam_set_int(msg->m_param, 'd', ms);
|
||||
}
|
||||
if( type == MR_MSG_AUDIO ) {
|
||||
CHAR_REF(author);
|
||||
mrparam_set(msg->m_param, 'N', authorPtr);
|
||||
CHAR_UNREF(author);
|
||||
CHAR_REF(trackname);
|
||||
mrparam_set(msg->m_param, 'n', tracknamePtr);
|
||||
CHAR_UNREF(trackname);
|
||||
}
|
||||
jint msg_id = mrmailbox_send_msg(get_mrmailbox_t(env, cls), chat_id, msg);
|
||||
mrmsg_unref(msg);
|
||||
jint msg_id = 0;
|
||||
CHAR_REF(file);
|
||||
CHAR_REF(mime);
|
||||
CHAR_REF(author);
|
||||
CHAR_REF(trackname);
|
||||
switch( type ) {
|
||||
case MR_MSG_IMAGE: msg_id = (jint)mrmailbox_send_image_msg(get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr, w, h); break;
|
||||
case MR_MSG_VIDEO: msg_id = (jint)mrmailbox_send_video_msg(get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr, w, h, ms); break;
|
||||
case MR_MSG_VOICE: msg_id = (jint)mrmailbox_send_voice_msg(get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr, ms); break;
|
||||
case MR_MSG_AUDIO: msg_id = (jint)mrmailbox_send_audio_msg(get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr, ms, authorPtr, tracknamePtr); break;
|
||||
default: msg_id = (jint)mrmailbox_send_file_msg (get_mrmailbox_t(env, cls), chat_id, filePtr, mimePtr); break;
|
||||
}
|
||||
CHAR_UNREF(trackname);
|
||||
CHAR_UNREF(author);
|
||||
CHAR_UNREF(mime);
|
||||
CHAR_UNREF(file);
|
||||
return msg_id;
|
||||
}
|
||||
|
||||
@@ -606,11 +603,33 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_cmdline(JNIEnv *env, jclass
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_MrMailbox_imex(JNIEnv *env, jclass cls, jint what, jstring dir)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_initiateKeyTransfer(JNIEnv *env, jclass cls)
|
||||
{
|
||||
jstring setup_code = NULL;
|
||||
char* temp = mrmailbox_initiate_key_transfer(get_mrmailbox_t(env, cls));
|
||||
if( temp ) {
|
||||
setup_code = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
}
|
||||
return setup_code;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_MrMailbox_continueKeyTransfer(JNIEnv *env, jclass cls, jint msg_id, jstring setupCode)
|
||||
{
|
||||
CHAR_REF(setupCode);
|
||||
jboolean ret = mrmailbox_continue_key_transfer(get_mrmailbox_t(env, cls), msg_id, setupCodePtr);
|
||||
CHAR_UNREF(setupCode);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT int Java_com_b44t_messenger_MrMailbox_imex(JNIEnv *env, jclass cls, jint what, jstring dir)
|
||||
{
|
||||
CHAR_REF(dir);
|
||||
mrmailbox_imex(get_mrmailbox_t(env, cls), what, dirPtr, "");
|
||||
jint ret = mrmailbox_imex(get_mrmailbox_t(env, cls), what, dirPtr, "");
|
||||
CHAR_UNREF(dir);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -672,13 +691,15 @@ JNIEXPORT jint Java_com_b44t_messenger_MrChatlist_MrChatlistGetCnt(JNIEnv *env,
|
||||
|
||||
JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetChatByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index)
|
||||
{
|
||||
return (jlong)mrchatlist_get_chat_by_index((mrchatlist_t*)hChatlist, index);
|
||||
mrchatlist_t* chatlist = (mrchatlist_t*)hChatlist;
|
||||
return (jlong)mrmailbox_get_chat(chatlist->m_mailbox, mrchatlist_get_chat_id(chatlist, index));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetMsgByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index)
|
||||
{
|
||||
return (jlong)mrchatlist_get_msg_by_index((mrchatlist_t*)hChatlist, index);
|
||||
mrchatlist_t* chatlist = (mrchatlist_t*)hChatlist;
|
||||
return (jlong)mrmailbox_get_msg(chatlist->m_mailbox, mrchatlist_get_msg_id(chatlist, index));
|
||||
}
|
||||
|
||||
|
||||
@@ -713,62 +734,61 @@ JNIEXPORT void Java_com_b44t_messenger_MrChat_MrChatUnref(JNIEnv *env, jclass c,
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getId(JNIEnv *env, jclass cls)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getId(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrchat_t* ths = get_mrchat_t(env, cls); if( ths == NULL ) { return 0; }
|
||||
mrchat_t* ths = get_mrchat_t(env, obj); if( ths == NULL ) { return 0; }
|
||||
return ths->m_id;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getType(JNIEnv *env, jclass cls)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getType(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrchat_t* ths = get_mrchat_t(env, cls); if( ths == NULL ) { return 0; }
|
||||
mrchat_t* ths = get_mrchat_t(env, obj); if( ths == NULL ) { return 0; }
|
||||
return ths->m_type;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getArchived(JNIEnv *env, jclass cls)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getArchived(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrchat_t* ths = get_mrchat_t(env, cls); if( ths == NULL ) { return 0; }
|
||||
mrchat_t* ths = get_mrchat_t(env, obj); if( ths == NULL ) { return 0; }
|
||||
return ths->m_archived;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getName(JNIEnv *env, jclass cls)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getName(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrchat_t* ths = get_mrchat_t(env, cls); if( ths == NULL ) { return JSTRING_NEW(NULL); }
|
||||
mrchat_t* ths = get_mrchat_t(env, obj); if( ths == NULL ) { return JSTRING_NEW(NULL); }
|
||||
return JSTRING_NEW(ths->m_name);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getSubtitle(JNIEnv *env, jclass cls)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getSubtitle(JNIEnv *env, jobject obj)
|
||||
{
|
||||
const char* temp = mrchat_get_subtitle(get_mrchat_t(env, cls));
|
||||
const char* temp = mrchat_get_subtitle(get_mrchat_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getParam(JNIEnv *env, jclass cls, jint key, jstring def)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getProfileImage(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrchat_t* ths = get_mrchat_t(env, cls);
|
||||
jstring ret = NULL;
|
||||
CHAR_REF(def);
|
||||
char* temp = mrparam_get(ths? ths->m_param:NULL, key, defPtr);
|
||||
if( temp ) {
|
||||
ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
}
|
||||
CHAR_UNREF(def);
|
||||
return ret; /* returns NULL only if key is unset and "def" is NULL */
|
||||
const char* temp = mrchat_get_profile_image(get_mrchat_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrChat_getParamInt(JNIEnv *env, jclass cls, jint key, jint def)
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isUnpromoted(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrchat_t* ths = get_mrchat_t(env, cls);
|
||||
return mrparam_get_int(ths? ths->m_param:NULL, key, def);
|
||||
return mrchat_is_unpromoted(get_mrchat_t(env, obj)) != 0;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isSelfTalk(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return mrchat_is_self_talk(get_mrchat_t(env, obj)) != 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -807,8 +827,8 @@ JNIEXPORT jint Java_com_b44t_messenger_MrChat_MrChatSetDraft(JNIEnv *env, jclass
|
||||
|
||||
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatMedia(JNIEnv *env, jclass cls, jint chat_id, jint msg_type, jint or_msg_type)
|
||||
{
|
||||
carray* ca = mrmailbox_get_chat_media(get_mrmailbox_t(env, cls), chat_id, msg_type, or_msg_type);
|
||||
return carray2jintArray_n_carray_free(env, ca);
|
||||
mrarray_t* ca = mrmailbox_get_chat_media(get_mrmailbox_t(env, cls), chat_id, msg_type, or_msg_type);
|
||||
return mrarray2jintArray_n_mrarray_unref(env, ca);
|
||||
}
|
||||
|
||||
|
||||
@@ -820,31 +840,31 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getNextMedia(JNIEnv *env, jclas
|
||||
|
||||
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatMsgs(JNIEnv *env, jclass cls, jint chat_id, jint flags, jint marker1before)
|
||||
{
|
||||
carray* ca = mrmailbox_get_chat_msgs(get_mrmailbox_t(env, cls), chat_id, flags, marker1before);
|
||||
return carray2jintArray_n_carray_free(env, ca);
|
||||
mrarray_t* ca = mrmailbox_get_chat_msgs(get_mrmailbox_t(env, cls), chat_id, flags, marker1before);
|
||||
return mrarray2jintArray_n_mrarray_unref(env, ca);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_searchMsgs(JNIEnv *env, jclass cls, jint chat_id, jstring query)
|
||||
{
|
||||
CHAR_REF(query);
|
||||
carray* ca = mrmailbox_search_msgs(get_mrmailbox_t(env, cls), chat_id, queryPtr);
|
||||
mrarray_t* ca = mrmailbox_search_msgs(get_mrmailbox_t(env, cls), chat_id, queryPtr);
|
||||
CHAR_UNREF(query);
|
||||
return carray2jintArray_n_carray_free(env, ca);
|
||||
return mrarray2jintArray_n_mrarray_unref(env, ca);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getFreshMsgs(JNIEnv *env, jclass cls)
|
||||
{
|
||||
carray* ca = mrmailbox_get_fresh_msgs(get_mrmailbox_t(env, cls));
|
||||
return carray2jintArray_n_carray_free(env, ca);
|
||||
mrarray_t* ca = mrmailbox_get_fresh_msgs(get_mrmailbox_t(env, cls));
|
||||
return mrarray2jintArray_n_mrarray_unref(env, ca);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatContacts(JNIEnv *env, jclass cls, jint chat_id)
|
||||
{
|
||||
carray* ca = mrmailbox_get_chat_contacts(get_mrmailbox_t(env, cls), chat_id);
|
||||
return carray2jintArray_n_carray_free(env, ca);
|
||||
mrarray_t* ca = mrmailbox_get_chat_contacts(get_mrmailbox_t(env, cls), chat_id);
|
||||
return mrarray2jintArray_n_mrarray_unref(env, ca);
|
||||
}
|
||||
|
||||
|
||||
@@ -929,53 +949,35 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMsg_MrMsgGetToId(JNIEnv *env, jclass c,
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getParam(JNIEnv *env, jobject obj, jint key, jstring def)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getWidth(JNIEnv *env, jobject obj, jint def)
|
||||
{
|
||||
mrmsg_t* ths = get_mrmsg_t(env, obj);
|
||||
jstring ret = NULL;
|
||||
CHAR_REF(def);
|
||||
char* temp = mrparam_get(ths? ths->m_param:NULL, key, defPtr);
|
||||
if( temp ) {
|
||||
ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
}
|
||||
CHAR_UNREF(def);
|
||||
return ret;
|
||||
jint ret = (jint)mrmsg_get_width(get_mrmsg_t(env, obj));
|
||||
return ret? ret : def;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getParamInt(JNIEnv *env, jobject obj, jint key, jint def)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getHeight(JNIEnv *env, jobject obj, jint def)
|
||||
{
|
||||
mrmsg_t* ths = get_mrmsg_t(env, obj);
|
||||
return mrparam_get_int(ths? ths->m_param:NULL, key, def);
|
||||
jint ret = (jint)mrmsg_get_height(get_mrmsg_t(env, obj));
|
||||
return ret? ret : def;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_MrMsg_setParamInt(JNIEnv *env, jobject obj, jint key, jint value)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getDuration(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrmsg_t* ths = get_mrmsg_t(env, obj);
|
||||
mrparam_set_int(ths? ths->m_param:NULL, key, value);
|
||||
return mrmsg_get_duration(get_mrmsg_t(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_MrMsg_saveParamToDisk(JNIEnv *env, jobject obj)
|
||||
JNIEXPORT void Java_com_b44t_messenger_MrMsg_lateFilingMediaSize(JNIEnv *env, jobject obj, jint width, jint height, jint duration)
|
||||
{
|
||||
mrmsg_save_param_to_disk(get_mrmsg_t(env, obj));
|
||||
mrmsg_latefiling_mediasize(get_mrmsg_t(env, obj), width, height, duration);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getBytes(JNIEnv *env, jobject obj)
|
||||
{
|
||||
jint ret = 0;
|
||||
mrmsg_t* ths = get_mrmsg_t(env, obj);
|
||||
if( ths ) {
|
||||
const char* file = mrparam_get(ths->m_param, 'f', NULL);
|
||||
if( file ) {
|
||||
ret = mr_get_filebytes(file);
|
||||
free(file);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
return (jint)mrmsg_get_filebytes(get_mrmsg_t(env, obj));
|
||||
}
|
||||
|
||||
|
||||
@@ -985,21 +987,45 @@ JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getSummaryCPtr(JNIEnv *env, jobjec
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getSummarytext(JNIEnv *env, jobject obj, jint approx_characters)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSummarytext(JNIEnv *env, jobject obj, jint approx_characters)
|
||||
{
|
||||
return JSTRING_NEW(mrmsg_get_summarytext(get_mrmsg_t(env, obj), approx_characters));
|
||||
char* temp = mrmsg_get_summarytext(get_mrmsg_t(env, obj), approx_characters);
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_showPadlock(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return mrmsg_show_padlock(get_mrmsg_t(env, obj));
|
||||
return mrmsg_get_showpadlock(get_mrmsg_t(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getFilename(JNIEnv *env, jobject obj)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFile(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return JSTRING_NEW(mrmsg_get_filename(get_mrmsg_t(env, obj)));
|
||||
char* temp = mrmsg_get_file(get_mrmsg_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilemime(JNIEnv *env, jobject obj)
|
||||
{
|
||||
char* temp = mrmsg_get_filemime(get_mrmsg_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilename(JNIEnv *env, jobject obj)
|
||||
{
|
||||
char* temp = mrmsg_get_filename(get_mrmsg_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1009,12 +1035,40 @@ JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getMediainfoCPtr(JNIEnv *env, jobj
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrMsg_isIncreation(JNIEnv *env, jobject obj)
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isForwarded(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return (jint)mrmsg_is_increation(get_mrmsg_t(env, obj));
|
||||
return mrmsg_is_forwarded(get_mrmsg_t(env, obj)) != 0;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isIncreation(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return mrmsg_is_increation(get_mrmsg_t(env, obj)) != 0;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isSystemcmd(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return mrmsg_is_systemcmd(get_mrmsg_t(env, obj)) != 0;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isSetupMessage(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return mrmsg_is_setupmessage(get_mrmsg_t(env, obj));
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSetupCodeBegin(JNIEnv *env, jobject obj)
|
||||
{
|
||||
char* temp = mrmsg_get_setupcodebegin(get_mrmsg_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* MrContact
|
||||
******************************************************************************/
|
||||
@@ -1040,80 +1094,115 @@ JNIEXPORT void Java_com_b44t_messenger_MrContact_MrContactUnref(JNIEnv *env, jcl
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_MrContactGetName(JNIEnv *env, jclass c, jlong hContact)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getName(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrcontact_t* ths = (mrcontact_t*)hContact; if( ths == NULL ) { return JSTRING_NEW(NULL); }
|
||||
return JSTRING_NEW(ths->m_name);
|
||||
const char* temp = mrcontact_get_name(get_mrcontact_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getAuthName(JNIEnv *env, jclass cls)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getDisplayName(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrcontact_t* ths = get_mrcontact_t(env, cls); if( ths == NULL ) { return JSTRING_NEW(NULL); }
|
||||
return JSTRING_NEW(ths->m_authname);
|
||||
const char* temp = mrcontact_get_display_name(get_mrcontact_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_MrContactGetAddr(JNIEnv *env, jclass c, jlong hContact)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getAddr(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrcontact_t* ths = (mrcontact_t*)hContact; if( ths == NULL ) { return JSTRING_NEW(NULL); }
|
||||
return JSTRING_NEW(ths->m_addr);
|
||||
const char* temp = mrcontact_get_addr(get_mrcontact_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrContact_MrContactIsBlocked(JNIEnv *env, jclass c, jlong hContact)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getNameNAddr(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrcontact_t* ths = (mrcontact_t*)hContact; if( ths == NULL ) { return 0; }
|
||||
return (jint)ths->m_blocked;
|
||||
const char* temp = mrcontact_get_name_n_addr(get_mrcontact_t(env, obj));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
free(temp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jboolean Java_com_b44t_messenger_MrContact_isBlocked(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrcontact_t* ths = get_mrcontact_t(env, obj); if( ths == NULL ) { return 0; }
|
||||
return (jboolean)(ths->m_blocked != 0);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* MrPoortext
|
||||
* MrLot
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_MrPoortext_MrPoortextUnref(JNIEnv *env, jclass c, jlong hPoortext)
|
||||
static mrlot_t* get_mrlot_t(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrpoortext_unref((mrpoortext_t*)hPoortext);
|
||||
static jfieldID fid = 0;
|
||||
if( fid == 0 ) {
|
||||
jclass cls = (*env)->GetObjectClass(env, obj);
|
||||
fid = (*env)->GetFieldID(env, cls, "m_hLot", "J" /*Signature, J=long*/);
|
||||
}
|
||||
if( fid ) {
|
||||
return (mrlot_t*)(*env)->GetLongField(env, obj, fid);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrPoortext_MrPoortextGetText1(JNIEnv *env, jclass c, jlong hPoortext)
|
||||
JNIEXPORT void Java_com_b44t_messenger_MrLot_unref(JNIEnv *env, jclass cls, jlong hLot)
|
||||
{
|
||||
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return JSTRING_NEW(NULL); }
|
||||
mrlot_unref((mrlot_t*)hLot);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrLot_getText1(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return JSTRING_NEW(NULL); }
|
||||
return JSTRING_NEW(ths->m_text1);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrPoortext_MrPoortextGetText1Meaning(JNIEnv *env, jclass c, jlong hPoortext)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrLot_getText1Meaning(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return 0; }
|
||||
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return 0; }
|
||||
return ths->m_text1_meaning;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrPoortext_MrPoortextGetText2(JNIEnv *env, jclass c, jlong hPoortext)
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_MrLot_getText2(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return JSTRING_NEW(NULL); }
|
||||
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return JSTRING_NEW(NULL); }
|
||||
return JSTRING_NEW(ths->m_text2);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jlong Java_com_b44t_messenger_MrPoortext_MrPoortextGetTimestamp(JNIEnv *env, jclass c, jlong hPoortext)
|
||||
JNIEXPORT jlong Java_com_b44t_messenger_MrLot_getTimestamp(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return 0; }
|
||||
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return 0; }
|
||||
return ths->m_timestamp;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrPoortext_MrPoortextGetState(JNIEnv *env, jclass c, jlong hPoortext)
|
||||
JNIEXPORT jint Java_com_b44t_messenger_MrLot_getState(JNIEnv *env, jobject obj)
|
||||
{
|
||||
mrpoortext_t* ths = (mrpoortext_t*)hPoortext; if( ths == NULL ) { return 0; }
|
||||
mrlot_t* ths = get_mrlot_t(env, obj); if( ths == NULL ) { return 0; }
|
||||
return ths->m_state;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void Java_com_b44t_messenger_MrLot_MrLotUnref(JNIEnv *env, jclass c, jlong hLot)
|
||||
{
|
||||
mrlot_unref((mrlot_t*)hLot);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Tools
|
||||
******************************************************************************/
|
||||
|
||||
@@ -307,7 +307,7 @@ public class BaseFragment {
|
||||
}
|
||||
try {
|
||||
visibleDialog = dialog;
|
||||
visibleDialog.setCanceledOnTouchOutside(true);
|
||||
//visibleDialog.setCanceledOnTouchOutside(true); -- we do overwrite this from time to time manually, eg. for showing the setup code. so, not all dialogs should be cancelled when touching outside!
|
||||
visibleDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
|
||||
@@ -820,8 +820,8 @@ public class AndroidUtilities {
|
||||
public static void openForViewOrShare(Activity activity, int msg_id, String cmd)
|
||||
{
|
||||
MrMsg msg = MrMailbox.getMsg(msg_id);
|
||||
String path = msg.getParam('f', "");
|
||||
String mimeType = getMimetype(path, msg.getParam('m', "application/octet-stream"));
|
||||
String path = msg.getFile();
|
||||
String mimeType = getMimetype(path, msg.getFilemime());
|
||||
try {
|
||||
File file = new File(path);
|
||||
if( !file.exists() ) {
|
||||
@@ -892,8 +892,8 @@ public class AndroidUtilities {
|
||||
|
||||
MrMsg msg = MrMailbox.getMsg(msg_id);
|
||||
final int msg_type = msg.getType();
|
||||
String msg_file_path = msg.getParam('f', "");
|
||||
final String msg_mime = msg.getParam('m', "application/octet-stream");
|
||||
String msg_file_path = msg.getFile();
|
||||
final String msg_mime = msg.getFilemime();
|
||||
final String msg_file_name = msg.getFilename();
|
||||
final File sourceFile = new File(msg_file_path);
|
||||
if( !sourceFile.exists() ) {
|
||||
|
||||
@@ -55,7 +55,7 @@ import com.b44t.messenger.MessageObject;
|
||||
import com.b44t.messenger.MrChat;
|
||||
import com.b44t.messenger.MrContact;
|
||||
import com.b44t.messenger.MrMailbox;
|
||||
import com.b44t.messenger.MrPoortext;
|
||||
import com.b44t.messenger.MrLot;
|
||||
import com.b44t.messenger.R;
|
||||
import com.b44t.messenger.TLRPC;
|
||||
import com.b44t.messenger.Components.AvatarDrawable;
|
||||
@@ -75,6 +75,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||
|
||||
public interface ChatMessageCellDelegate {
|
||||
void didPressedUserAvatar(ChatMessageCell cell, TLRPC.User user);
|
||||
void didPressedSetupMessage(ChatMessageCell cell);
|
||||
void didLongPressed(ChatMessageCell cell);
|
||||
void didPressedUrl(MessageObject messageObject, ClickableSpan url, boolean longPress);
|
||||
void didPressedImage(ChatMessageCell cell);
|
||||
@@ -207,6 +208,8 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||
private AvatarDrawable avatarDrawable;
|
||||
private boolean avatarPressed;
|
||||
|
||||
private boolean setupmessagePressed;
|
||||
|
||||
private boolean drawNewchatButton;
|
||||
private boolean newchatPressed;
|
||||
private int newchatStartX;
|
||||
@@ -658,7 +661,11 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||
newchatPressed = true;
|
||||
result = true;
|
||||
invalidate();
|
||||
} else if( currentMessageObject.messageOwner.is_setup_message && currentBackgroundDrawable.getBounds().contains((int)x, (int)y) ) {
|
||||
setupmessagePressed = true;
|
||||
result = true;
|
||||
}
|
||||
|
||||
if (result) {
|
||||
startCheckLongPress();
|
||||
}
|
||||
@@ -683,6 +690,18 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||
avatarPressed = false;
|
||||
}
|
||||
}
|
||||
} else if(setupmessagePressed) {
|
||||
if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||
setupmessagePressed = false;
|
||||
delegate.didPressedSetupMessage(this);
|
||||
}
|
||||
else if(event.getAction() == MotionEvent.ACTION_CANCEL) {
|
||||
setupmessagePressed = false;
|
||||
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
|
||||
if( !currentBackgroundDrawable.getBounds().contains((int)x, (int)y) ) {
|
||||
setupmessagePressed = false;
|
||||
}
|
||||
}
|
||||
} else if (newchatPressed) {
|
||||
if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||
newchatPressed = false;
|
||||
@@ -1014,7 +1033,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||
|
||||
maxWidth = maxWidth - dp(86);
|
||||
|
||||
MrPoortext pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
|
||||
MrLot pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
|
||||
CharSequence stringFinal = TextUtils.ellipsize(pt.getText2(), audioTitlePaint, maxWidth, TextUtils.TruncateAt.MIDDLE);
|
||||
songLayout = new StaticLayout(stringFinal, audioTitlePaint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
|
||||
if (songLayout.getLineCount() > 0) {
|
||||
@@ -1052,7 +1071,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
|
||||
int minutes = duration / 60;
|
||||
int seconds = duration - minutes * 60;
|
||||
String infoString = String.format("%d:%02d, %s", minutes, seconds, formatFileSize(documentAttach.size));
|
||||
if( MrMailbox.getMsg(messageObject.getId()).isIncreation()!=0 ) {
|
||||
if( MrMailbox.getMsg(messageObject.getId()).isIncreation() ) {
|
||||
infoString = ApplicationLoader.applicationContext.getString(R.string.OneMoment);
|
||||
}
|
||||
infoWidth = (int) Math.ceil(infoPaint.measureText(infoString));
|
||||
|
||||
@@ -44,9 +44,9 @@ import com.b44t.messenger.ContactsController;
|
||||
import com.b44t.messenger.EmojiInputView;
|
||||
import com.b44t.messenger.LocaleController;
|
||||
import com.b44t.messenger.MrChat;
|
||||
import com.b44t.messenger.MrLot;
|
||||
import com.b44t.messenger.MrMailbox;
|
||||
import com.b44t.messenger.MrMsg;
|
||||
import com.b44t.messenger.MrPoortext;
|
||||
import com.b44t.messenger.R;
|
||||
import com.b44t.messenger.ImageReceiver;
|
||||
import com.b44t.messenger.ActionBar.Theme;
|
||||
@@ -121,7 +121,7 @@ public class ChatlistCell extends BaseCell {
|
||||
private int avatarWH = AndroidUtilities.dp(52);
|
||||
|
||||
private MrChat m_mrChat = new MrChat(0);
|
||||
private MrPoortext m_summary = new MrPoortext(0);
|
||||
private MrLot m_summary = new MrLot(0);
|
||||
private boolean m_showUnreadCount;
|
||||
|
||||
public ChatlistCell(Context context) {
|
||||
@@ -163,7 +163,7 @@ public class ChatlistCell extends BaseCell {
|
||||
avatarImage.setRoundRadius(AndroidUtilities.dp(26));
|
||||
}
|
||||
|
||||
public void setChat(MrChat mrChat, MrPoortext mrSummary, int i, boolean showUnreadCount) {
|
||||
public void setChat(MrChat mrChat, MrLot mrSummary, int i, boolean showUnreadCount) {
|
||||
m_mrChat = mrChat;
|
||||
m_summary = mrSummary;
|
||||
m_showUnreadCount = showUnreadCount;
|
||||
@@ -265,8 +265,8 @@ public class ChatlistCell extends BaseCell {
|
||||
int title_meaning = m_summary.getText1Meaning();
|
||||
int title_color = Theme.CHATLIST_NAME_TEXT_COLOR;
|
||||
switch( title_meaning ) {
|
||||
case MrPoortext.MR_TEXT1_SELF: title_color = Theme.CHATLIST_SELF_TEXT_COLOR; break;
|
||||
case MrPoortext.MR_TEXT1_DRAFT: title_color = Theme.CHATLIST_DRAFT_TEXT_COLOR; break;
|
||||
case MrLot.MR_TEXT1_SELF: title_color = Theme.CHATLIST_SELF_TEXT_COLOR; break;
|
||||
case MrLot.MR_TEXT1_DRAFT: title_color = Theme.CHATLIST_DRAFT_TEXT_COLOR; break;
|
||||
}
|
||||
SpannableStringBuilder stringBuilder = SpannableStringBuilder.valueOf(String.format("%s: %s", title, mess));
|
||||
stringBuilder.setSpan(new ForegroundColorSpan(title_color), 0, title.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
|
||||
@@ -43,7 +43,9 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.MediaStore;
|
||||
import android.support.v4.content.FileProvider;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.text.style.ClickableSpan;
|
||||
import android.text.style.URLSpan;
|
||||
import android.util.SparseIntArray;
|
||||
@@ -455,7 +457,6 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||
{
|
||||
int do_archive = m_mrChat.getArchived()==0? 1: 0;
|
||||
MrMailbox.archiveChat((int)dialog_id, do_archive);
|
||||
MrMailbox.MrCallback(MrMailbox.MR_EVENT_MSGS_CHANGED, 0, 0);
|
||||
AndroidUtilities.showDoneHint(context);
|
||||
if( do_archive == 1 ) {
|
||||
finishFragment();
|
||||
@@ -849,11 +850,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||
|
||||
TextView emptyView = new TextView(context);
|
||||
|
||||
if( m_mrChat.getParamInt(MrChat.MRP_UNPROMOTED, 0)==1 ) {
|
||||
if( m_mrChat.isUnpromoted() ) {
|
||||
emptyView.setText(context.getString(R.string.MsgNewGroupDraftHint));
|
||||
emptyView.setGravity(Gravity.START);
|
||||
}
|
||||
else if( m_mrChat.getType()==MrChat.MR_CHAT_NORMAL ){
|
||||
else if( m_mrChat.getType()==MrChat.MR_CHAT_NORMAL && !m_mrChat.isSelfTalk() ){
|
||||
String name = m_mrChat.getName();
|
||||
emptyView.setText(AndroidUtilities.replaceTags(String.format(context.getString(R.string.NoMessagesHint), name, name)));
|
||||
emptyView.setGravity(Gravity.START);
|
||||
@@ -2668,6 +2669,12 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void didPressedSetupMessage(ChatMessageCell cell) {
|
||||
Toast.makeText(getParentActivity(), ApplicationLoader.applicationContext.getString(R.string.NotYetImplemented), Toast.LENGTH_SHORT).show();
|
||||
querySetupCode(cell.getMessageObject().getId(), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPerformActions() {
|
||||
return actionBar != null && !actionBar.isActionModeShowed();
|
||||
@@ -2761,7 +2768,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||
public void didPressedImage(ChatMessageCell cell) {
|
||||
MessageObject message = cell.getMessageObject();
|
||||
|
||||
if( message.type == MessageObject.MO_TYPE3_VIDEO && MrMailbox.getMsg(message.getId()).isIncreation()!=0 ) {
|
||||
if( message.type == MessageObject.MO_TYPE3_VIDEO && MrMailbox.getMsg(message.getId()).isIncreation() ) {
|
||||
return; // we're not ready (still compressing), a hint is already shown in the message itself
|
||||
}
|
||||
|
||||
@@ -2906,4 +2913,80 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void querySetupCode(final int msg_id, String[] preload)
|
||||
{
|
||||
if( !MrMailbox.getMsg(msg_id).isSetupMessage()) {
|
||||
return;
|
||||
}
|
||||
|
||||
View gl = View.inflate(getParentActivity(), R.layout.setup_code_grid, null);
|
||||
final EditText[] editTexts = {
|
||||
(EditText) gl.findViewById(R.id.setupCode0), (EditText) gl.findViewById(R.id.setupCode1), (EditText) gl.findViewById(R.id.setupCode2),
|
||||
(EditText) gl.findViewById(R.id.setupCode3), (EditText) gl.findViewById(R.id.setupCode4), (EditText) gl.findViewById(R.id.setupCode5),
|
||||
(EditText) gl.findViewById(R.id.setupCode6), (EditText) gl.findViewById(R.id.setupCode7), (EditText) gl.findViewById(R.id.setupCode8)
|
||||
};
|
||||
AlertDialog.Builder builder1 = new AlertDialog.Builder(getParentActivity());
|
||||
builder1.setView(gl);
|
||||
editTexts[0].setText(MrMailbox.getMsg(msg_id).getSetupCodeBegin());
|
||||
editTexts[0].setSelection(editTexts[0].getText().length());
|
||||
|
||||
for( int i = 0; i < 9; i++ ) {
|
||||
if( preload != null && i < preload.length ) {
|
||||
editTexts[i].setText(preload[i]);
|
||||
editTexts[i].setSelection(editTexts[i].getText().length());
|
||||
}
|
||||
editTexts[i].addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
if( s.length()==4 ) {
|
||||
for ( int i = 0; i < 8; i++ ) {
|
||||
if( editTexts[i].hasFocus() && editTexts[i+1].getText().length()<4 ) {
|
||||
editTexts[i+1].requestFocus();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
builder1.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
|
||||
builder1.setMessage(AndroidUtilities.replaceTags(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransferPleaseEnterCode)));
|
||||
builder1.setNegativeButton(R.string.Cancel, null);
|
||||
builder1.setCancelable(false); // prevent the dialog from being dismissed accidentally (when the dialog is closed, the setup code is gone forever and the user has to create a new setup message)
|
||||
builder1.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
String setup_code = "";
|
||||
final String[] preload = new String[9];
|
||||
for ( int i = 0; i < 9; i++ ) {
|
||||
preload[i] = editTexts[i].getText().toString();
|
||||
setup_code += preload[i];
|
||||
}
|
||||
boolean success = MrMailbox.continueKeyTransfer(msg_id, setup_code);
|
||||
|
||||
AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity());
|
||||
builder2.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
|
||||
builder2.setMessage(AndroidUtilities.replaceTags(ApplicationLoader.applicationContext.getString(success? R.string.AutocryptKeyTransferSucceeded : R.string.AutocryptKeyTransferBadCode)));
|
||||
builder2.setNegativeButton(R.string.Cancel, null);
|
||||
builder2.setPositiveButton(R.string.Retry, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
querySetupCode(msg_id, preload);
|
||||
}
|
||||
});
|
||||
showDialog(builder2.create());
|
||||
}
|
||||
});
|
||||
showDialog(builder1.create());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -477,7 +477,6 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
|
||||
public void onClick(DialogInterface dialogInterface, int clickedEntry) {
|
||||
if( clickedEntry==0 ) {
|
||||
MrMailbox.archiveChat(mrChat.getId(), mrChat.getArchived() == 0 ? 1 : 0);
|
||||
MrMailbox.MrCallback(MrMailbox.MR_EVENT_MSGS_CHANGED, 0, 0);
|
||||
AndroidUtilities.showDoneHint(context);
|
||||
}
|
||||
else if( clickedEntry==1 ) {
|
||||
@@ -970,7 +969,7 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
|
||||
cell.useSeparator = (i != getItemCount() - 1);
|
||||
MrChat mrChat = getChatByIndex(i);
|
||||
|
||||
MrPoortext mrSummary = m_chatlist.getSummaryByIndex(i, mrChat);
|
||||
MrLot mrSummary = m_chatlist.getSummaryByIndex(i, mrChat);
|
||||
cell.setChat(mrChat, mrSummary, i, true);
|
||||
}
|
||||
}
|
||||
@@ -1102,7 +1101,7 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
|
||||
cell.useSeparator = (j != m_chatlistCnt - 1);
|
||||
|
||||
MrChat mrChat = m_chatlist.getChatByIndex(j);
|
||||
MrPoortext mrSummary = m_chatlist.getSummaryByIndex(j, mrChat);
|
||||
MrLot mrSummary = m_chatlist.getSummaryByIndex(j, mrChat);
|
||||
|
||||
cell.setChat(mrChat, mrSummary, -1,
|
||||
true /*always show unread count*/);
|
||||
@@ -1118,7 +1117,7 @@ public class ChatlistActivity extends BaseFragment implements NotificationCenter
|
||||
|
||||
MrMsg mrMsg = MrMailbox.getMsg(m_msgIds[j]);
|
||||
MrChat mrChat = MrMailbox.getChat(mrMsg.getChatId());
|
||||
MrPoortext mrSummary = mrMsg.getSummary(mrChat);
|
||||
MrLot mrSummary = mrMsg.getSummary(mrChat);
|
||||
|
||||
cell.setChat(mrChat, mrSummary, -1,
|
||||
mrMsg.getState()==MrMsg.MR_IN_FRESH /*show unread count only if the message itself is unread*/ );
|
||||
|
||||
@@ -182,7 +182,7 @@ public class ContactsController {
|
||||
}
|
||||
}
|
||||
else if( chatType == MrChat.MR_CHAT_GROUP ) {
|
||||
tempPath = mrChat.getParam(MrChat.MRP_PROFILE_IMAGE, "");
|
||||
tempPath = mrChat.getProfileImage();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -54,10 +54,9 @@ public class MrChat {
|
||||
public native String getName();
|
||||
public native String getSubtitle();
|
||||
|
||||
public static int MRP_UNPROMOTED = 'U';
|
||||
public static int MRP_PROFILE_IMAGE = 'i';
|
||||
public native String getParam(int key, String def);
|
||||
public native int getParamInt(int key, int def);
|
||||
public native String getProfileImage();
|
||||
public native boolean isUnpromoted();
|
||||
public native boolean isSelfTalk();
|
||||
|
||||
public String getDraft() {
|
||||
return MrChatGetDraft(m_hChat);
|
||||
|
||||
@@ -50,8 +50,8 @@ public class MrChatlist {
|
||||
return new MrMsg(MrChatlistGetMsgByIndex(m_hChatlist, index));
|
||||
}
|
||||
|
||||
public MrPoortext getSummaryByIndex(int index, MrChat chat) {
|
||||
return new MrPoortext(MrChatlistGetSummaryByIndex(m_hChatlist, index, chat.getCPtr()));
|
||||
public MrLot getSummaryByIndex(int index, MrChat chat) {
|
||||
return new MrLot(MrChatlistGetSummaryByIndex(m_hChatlist, index, chat.getCPtr()));
|
||||
}
|
||||
|
||||
private long m_hChatlist;
|
||||
|
||||
@@ -42,52 +42,12 @@ public class MrContact {
|
||||
MrContactUnref(m_hContact);
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return MrContactGetName(m_hContact);
|
||||
}
|
||||
public native String getAuthName();
|
||||
|
||||
public String getAddr() {
|
||||
return MrContactGetAddr(m_hContact);
|
||||
}
|
||||
|
||||
public int isBlocked() {
|
||||
return MrContactIsBlocked(m_hContact);
|
||||
}
|
||||
public native String getName();
|
||||
public native String getDisplayName();
|
||||
public native String getAddr();
|
||||
public native String getNameNAddr();
|
||||
public native boolean isBlocked();
|
||||
|
||||
private long m_hContact;
|
||||
private native static void MrContactUnref (long hContact);
|
||||
private native static String MrContactGetName (long hContact);
|
||||
private native static String MrContactGetAddr (long hContact);
|
||||
private native static int MrContactIsBlocked (long hContact);
|
||||
|
||||
|
||||
/* additional functions that are not 1:1 available in the backend
|
||||
**********************************************************************************************/
|
||||
|
||||
public static TLRPC.User contactId2user(int id)
|
||||
{
|
||||
TLRPC.User ret = new TLRPC.User();
|
||||
ret.id = id;
|
||||
return ret;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
String s=MrContactGetName(m_hContact);
|
||||
if(s.isEmpty()) {
|
||||
s=MrContactGetAddr(m_hContact);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
public String getNameNAddr() {
|
||||
String s=MrContactGetName(m_hContact);
|
||||
if(s.isEmpty()) {
|
||||
s=MrContactGetAddr(m_hContact);
|
||||
}
|
||||
else {
|
||||
s+=" ("+MrContactGetAddr(m_hContact)+")";
|
||||
}
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
+12
-32
@@ -19,7 +19,7 @@
|
||||
*
|
||||
*******************************************************************************
|
||||
*
|
||||
* File: MrPoortext.java
|
||||
* File: MrLot.java
|
||||
* Purpose: Wrap around mrpoortext_t
|
||||
*
|
||||
******************************************************************************/
|
||||
@@ -28,47 +28,27 @@
|
||||
package com.b44t.messenger;
|
||||
|
||||
|
||||
public class MrPoortext {
|
||||
public class MrLot {
|
||||
|
||||
public final static int MR_TEXT1_NORMAL = 0;
|
||||
public final static int MR_TEXT1_DRAFT = 1;
|
||||
public final static int MR_TEXT1_USERNAME = 2;
|
||||
public final static int MR_TEXT1_SELF = 3;
|
||||
|
||||
public MrPoortext(long hPoortext) {
|
||||
m_hPoortext = hPoortext;
|
||||
public MrLot(long hLot) {
|
||||
m_hLot = hLot;
|
||||
}
|
||||
|
||||
@Override protected void finalize() throws Throwable {
|
||||
super.finalize();
|
||||
MrPoortextUnref(m_hPoortext);
|
||||
MrLotUnref(m_hLot);
|
||||
}
|
||||
|
||||
public String getText1() {
|
||||
return MrPoortextGetText1(m_hPoortext);
|
||||
}
|
||||
public native String getText1();
|
||||
public native int getText1Meaning();
|
||||
public native String getText2();
|
||||
public native long getTimestamp();
|
||||
public native int getState();
|
||||
|
||||
public int getText1Meaning() {
|
||||
return MrPoortextGetText1Meaning(m_hPoortext);
|
||||
}
|
||||
|
||||
public String getText2() {
|
||||
return MrPoortextGetText2(m_hPoortext);
|
||||
}
|
||||
|
||||
public long getTimestamp() {
|
||||
return MrPoortextGetTimestamp(m_hPoortext);
|
||||
}
|
||||
|
||||
public int getState() {
|
||||
return MrPoortextGetState(m_hPoortext);
|
||||
}
|
||||
|
||||
private long m_hPoortext;
|
||||
private native static void MrPoortextUnref (long hPoortext);
|
||||
private native static String MrPoortextGetText1 (long hPoortext);
|
||||
private native static int MrPoortextGetText1Meaning (long hPoortext);
|
||||
private native static String MrPoortextGetText2 (long hPoortext);
|
||||
private native static long MrPoortextGetTimestamp (long hPoortext);
|
||||
private native static int MrPoortextGetState (long hPoortext);
|
||||
private long m_hLot;
|
||||
private native static void MrLotUnref(long hLot);
|
||||
}
|
||||
@@ -52,7 +52,7 @@ public class MrMailbox {
|
||||
public native static String getBlobdir();
|
||||
|
||||
public native static int configureAndConnect();
|
||||
public native static void configureCancel();
|
||||
public native static void stopOngoingProcess();
|
||||
|
||||
public native static int isConfigured();
|
||||
|
||||
@@ -67,11 +67,13 @@ public class MrMailbox {
|
||||
public native static String getInfo();
|
||||
public native static String cmdline(String cmd);
|
||||
|
||||
public native static String initiateKeyTransfer();
|
||||
public native static boolean continueKeyTransfer(int msg_id, String setup_code);
|
||||
public final static int MR_IMEX_EXPORT_SELF_KEYS = 1;
|
||||
public final static int MR_IMEX_IMPORT_SELF_KEYS = 2;
|
||||
public final static int MR_IMEX_EXPORT_BACKUP = 11;
|
||||
public final static int MR_IMEX_IMPORT_BACKUP = 12;
|
||||
public native static void imex(int what, String dir);
|
||||
public native static int imex(int what, String dir);
|
||||
public native static String imexHasBackup(String dir);
|
||||
public native static int checkPassword(String pw);
|
||||
|
||||
@@ -138,7 +140,7 @@ public class MrMailbox {
|
||||
public native static int addContactToChat (int chat_id, int contact_id);
|
||||
public native static int removeContactFromChat (int chat_id, int contact_id);
|
||||
public native static int setChatName (int chat_id, String name);
|
||||
public native static int setChatImage (int chat_id, String name);
|
||||
public native static int setChatProfileImage (int chat_id, String name);
|
||||
|
||||
public final static int MR_GCM_ADDDAYMARKER = 0x01;
|
||||
public native static int[] getChatMsgs(int chat_id, int flags, int marker1before);
|
||||
@@ -171,6 +173,7 @@ public class MrMailbox {
|
||||
public native static void forwardMsgs(int msg_ids[], int chat_ids);
|
||||
|
||||
public native static int sendTextMsg(int chat_id, String text);
|
||||
public native static int sendVcardMsg(int chat_id, int contact_id);
|
||||
public native static int sendMediaMsg(int chat_id, int type, String file, String mime, int w, int h, int time_ms, String author, String trackname);
|
||||
|
||||
private native static long MrMailboxGetMsg (long hMailbox, int id); // return hMsg which must be unref'd after usage
|
||||
@@ -199,7 +202,6 @@ public class MrMailbox {
|
||||
|
||||
public final static int MR_EVENT_CONFIGURE_PROGRESS = 2041;
|
||||
|
||||
public final static int MR_EVENT_IMEX_ENDED = 2050;
|
||||
public final static int MR_EVENT_IMEX_PROGRESS = 2051;
|
||||
public final static int MR_EVENT_IMEX_FILE_WRITTEN = 2052;
|
||||
|
||||
@@ -227,15 +229,6 @@ public class MrMailbox {
|
||||
});
|
||||
return 0;
|
||||
|
||||
case MR_EVENT_IMEX_ENDED:
|
||||
AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexEnded, (int)data1);
|
||||
}
|
||||
});
|
||||
return 0;
|
||||
|
||||
case MR_EVENT_IMEX_PROGRESS:
|
||||
AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
@Override
|
||||
@@ -333,7 +326,7 @@ public class MrMailbox {
|
||||
return 0;
|
||||
|
||||
case MR_EVENT_GET_STRING:
|
||||
String s = "ErrStrBadId";
|
||||
String s;
|
||||
switch( (int)data1 ) {
|
||||
// the string-IDs are defined in the backend; as this is the only place where they're used, there is no benefit in creating an enum or sth. like that.
|
||||
case 1: s = ApplicationLoader.applicationContext.getString(R.string.NoMessages); break;
|
||||
@@ -369,6 +362,10 @@ public class MrMailbox {
|
||||
case 36: s = "<c#808080>"+ApplicationLoader.applicationContext.getString(R.string.E2eeOffBecauseOfUser)+"</c>"; break;
|
||||
case 37: s = "<c#808080>"+ApplicationLoader.applicationContext.getString(R.string.E2eeOffBecauseOfRecipient)+"</c>"; break;
|
||||
case 40: s = ApplicationLoader.applicationContext.getString(R.string.ArchivedChats); break;
|
||||
case 42: s = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageSubject); break;
|
||||
case 43: s = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageGeneralBody); break;
|
||||
case 50: s = ApplicationLoader.applicationContext.getString(R.string.SelfTalkSubtitle); break;
|
||||
default: s = null; break;
|
||||
}
|
||||
return String2CPtr(s);
|
||||
|
||||
|
||||
@@ -95,20 +95,26 @@ public class MrMsg {
|
||||
return MrMsgGetToId(m_hMsg);
|
||||
}
|
||||
|
||||
public native String getParam(int key, String def);
|
||||
public native int getParamInt(int key, int def);
|
||||
public native void setParamInt(int key, int def);
|
||||
public native void saveParamToDisk();
|
||||
public native int getWidth(int def);
|
||||
public native int getHeight(int def);
|
||||
public native int getDuration();
|
||||
public native void lateFilingMediaSize(int width, int height, int duration);
|
||||
|
||||
public native int getBytes();
|
||||
public MrPoortext getSummary(MrChat chat) { return new MrPoortext(getSummaryCPtr(chat.getCPtr())); }
|
||||
public MrLot getSummary(MrChat chat) { return new MrLot(getSummaryCPtr(chat.getCPtr())); }
|
||||
private native long getSummaryCPtr(long hChat);
|
||||
public native String getSummarytext(int approx_characters);
|
||||
public native int showPadlock();
|
||||
public MrPoortext getMediainfo() { return new MrPoortext(getMediainfoCPtr()); }
|
||||
public MrLot getMediainfo() { return new MrLot(getMediainfoCPtr()); }
|
||||
private native long getMediainfoCPtr();
|
||||
public native String getFile();
|
||||
public native String getFilemime();
|
||||
public native String getFilename();
|
||||
public native int isIncreation();
|
||||
public native boolean isForwarded();
|
||||
public native boolean isSystemcmd();
|
||||
public native boolean isSetupMessage();
|
||||
public native String getSetupCodeBegin();
|
||||
public native boolean isIncreation();
|
||||
|
||||
private long m_hMsg; // must not be renamed as referenced by JNI under the name "m_hMsg"
|
||||
private native static void MrMsgUnref (long hMsg);
|
||||
@@ -152,19 +158,24 @@ public class MrMsg {
|
||||
ret.out = ret.from_id==MrContact.MR_CONTACT_ID_SELF; // true=outgoing message, read eg. in MessageObject.isOutOwner()
|
||||
ret.created_by_mr = true;
|
||||
ret.show_padlock = showPadlock()!=0;
|
||||
ret.is_system_cmd = getParamInt('S', 0)!=0;
|
||||
ret.is_system_cmd = isSystemcmd();
|
||||
ret.is_setup_message = isSetupMessage();
|
||||
|
||||
if( type == MR_MSG_TEXT ) {
|
||||
ret.message = getText();
|
||||
}
|
||||
else if( type == MR_MSG_FILE && isSetupMessage() )
|
||||
{
|
||||
ret.message = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageTapBody);
|
||||
}
|
||||
else if( type == MR_MSG_IMAGE ) {
|
||||
String path = getParam('f', "");
|
||||
String path = getFile();
|
||||
TLRPC.TL_photo photo = null;
|
||||
if( !path.isEmpty() ) {
|
||||
try {
|
||||
TLRPC.TL_photoSize photoSize = new TLRPC.TL_photoSize();
|
||||
photoSize.w = getParamInt('w', 800);
|
||||
photoSize.h = getParamInt('h', 800);
|
||||
photoSize.w = getWidth(800);
|
||||
photoSize.h = getHeight(800);
|
||||
photoSize.size = 0; // not sure what to use here, maybe `getBytes();`?
|
||||
photoSize.location = new TLRPC.TL_fileLocation();
|
||||
photoSize.location.mr_path = path;
|
||||
@@ -198,7 +209,7 @@ public class MrMsg {
|
||||
}
|
||||
}
|
||||
else if( type == MR_MSG_GIF || type == MR_MSG_AUDIO || type == MR_MSG_VOICE || type == MR_MSG_VIDEO || type == MR_MSG_FILE ) {
|
||||
String path = getParam('f', "");
|
||||
String path = getFile();
|
||||
if( !path.isEmpty()) {
|
||||
ret.message = "-1"; // may be misused for video editing information
|
||||
ret.media = new TLRPC.TL_messageMediaDocument();
|
||||
@@ -208,20 +219,20 @@ public class MrMsg {
|
||||
ret.media.document.mr_path = path;
|
||||
ret.media.document.size = getBytes();
|
||||
if( type == MR_MSG_GIF ) {
|
||||
ret.media.document.mime_type = getParam('m', "image/gif");
|
||||
ret.media.document.mime_type = getFilemime();
|
||||
TLRPC.PhotoSize size = new TLRPC.PhotoSize();
|
||||
size.location = new TLRPC.TL_fileLocation();
|
||||
size.location.mr_path = path;
|
||||
size.location.local_id = -ret.id;
|
||||
size.w = getParamInt('w', 320);
|
||||
size.h = getParamInt('h', 240);
|
||||
size.w = getWidth(320);
|
||||
size.h = getHeight(240);
|
||||
size.type = "s";
|
||||
ret.media.document.thumb = size;
|
||||
}
|
||||
else if( type == MR_MSG_AUDIO || type == MR_MSG_VOICE ) {
|
||||
TLRPC.TL_documentAttributeAudio attr = new TLRPC.TL_documentAttributeAudio();
|
||||
attr.voice = type == MR_MSG_VOICE;
|
||||
attr.duration = getParamInt('d', 0) / 1000;
|
||||
attr.duration = getDuration() / 1000;
|
||||
ret.media.document.attributes.add(attr);
|
||||
}
|
||||
else if( type == MR_MSG_VIDEO ) {
|
||||
@@ -235,9 +246,7 @@ public class MrMsg {
|
||||
size.type = "s";
|
||||
ret.media.document.thumb = size;
|
||||
|
||||
setParamInt('w', size.w);
|
||||
setParamInt('h', size.h);
|
||||
saveParamToDisk();
|
||||
lateFilingMediaSize(size.w, size.h, 0);
|
||||
}
|
||||
catch (Exception e) {}
|
||||
}
|
||||
@@ -246,20 +255,20 @@ public class MrMsg {
|
||||
size.location = new TLRPC.TL_fileLocation();
|
||||
size.location.mr_path = tfile.getAbsolutePath();
|
||||
size.location.local_id = -ret.id;
|
||||
size.w = getParamInt('w', 320);
|
||||
size.h = getParamInt('h', 240);
|
||||
size.w = getWidth(320);
|
||||
size.h = getHeight(240);
|
||||
size.type = "s";
|
||||
ret.media.document.thumb = size;
|
||||
}
|
||||
|
||||
TLRPC.TL_documentAttributeVideo attr = new TLRPC.TL_documentAttributeVideo();
|
||||
attr.duration = getParamInt('d', 0) / 1000;
|
||||
attr.w = getParamInt('w', 320);
|
||||
attr.h = getParamInt('h', 240);
|
||||
attr.duration = getDuration() / 1000;
|
||||
attr.w = getWidth(320);
|
||||
attr.h = getHeight(240);
|
||||
ret.media.document.attributes.add(attr);
|
||||
}
|
||||
else {
|
||||
ret.media.document.mime_type = getParam('m', "application/octet-stream");
|
||||
ret.media.document.mime_type = getFilemime();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -271,7 +280,7 @@ public class MrMsg {
|
||||
ret.message = String.format("<unsupported message type #%d for id #%d>", type, ret.id);
|
||||
}
|
||||
|
||||
if( !getParam('a', "").equals("") ) {
|
||||
if( isForwarded() ) {
|
||||
ret.flags |= TLRPC.MESSAGE_FLAG_FWD;
|
||||
}
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ public class MusicPlayerService extends Service implements NotificationCenter.No
|
||||
{
|
||||
AudioInfo audioInfo = MediaController.getInstance().getAudioInfo();
|
||||
|
||||
MrPoortext pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
|
||||
MrLot pt = MrMailbox.getMsg(messageObject.getId()).getMediainfo();
|
||||
String authorName = pt.getText1();
|
||||
String songName = pt.getText2();
|
||||
if( songName == null || songName.length()==0 ) {
|
||||
|
||||
@@ -168,7 +168,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
||||
String nameonly = big.location.volume_id + "_" + big.location.local_id + ".jpg";
|
||||
File fileobj = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), nameonly);
|
||||
String fullpath = fileobj.getAbsolutePath();
|
||||
MrMailbox.setChatImage(chat_id, fullpath);
|
||||
MrMailbox.setChatProfileImage(chat_id, fullpath);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -515,7 +515,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
||||
// show menu to change the group image
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
|
||||
CharSequence[] items;
|
||||
boolean hasPhoto = MrMailbox.getChat(chat_id).getParam(MrChat.MRP_PROFILE_IMAGE, null)!=null;
|
||||
boolean hasPhoto = MrMailbox.getChat(chat_id).getProfileImage()!=null;
|
||||
if ( !hasPhoto ) {
|
||||
items = new CharSequence[]{context.getString(R.string.FromCamera), context.getString(R.string.FromGalley)};
|
||||
} else {
|
||||
@@ -536,7 +536,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
||||
builder.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int i) {
|
||||
if( MrMailbox.setChatImage(chat_id, null)!=0 ) {
|
||||
if( MrMailbox.setChatProfileImage(chat_id, null)!=0 ) {
|
||||
AndroidUtilities.showDoneHint(getParentActivity());
|
||||
}
|
||||
}
|
||||
@@ -841,7 +841,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
||||
settingsNotificationsRow = rowCount++;
|
||||
}
|
||||
|
||||
if( user_id!=0 || chat_id!=MrChat.MR_CHAT_ID_DEADDROP) {
|
||||
if( (user_id!=0 && user_id!=MrContact.MR_CONTACT_ID_SELF) || (chat_id!=0 && chat_id!=MrChat.MR_CHAT_ID_DEADDROP)) {
|
||||
changeNameRow = rowCount++;
|
||||
}
|
||||
|
||||
@@ -870,7 +870,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
||||
boolean blocked = false;
|
||||
if( user_id!=0 ) {
|
||||
MrContact mrContact = MrMailbox.getContact(user_id);
|
||||
blocked = mrContact.isBlocked()!=0;
|
||||
blocked = mrContact.isBlocked();
|
||||
}
|
||||
return blocked;
|
||||
}
|
||||
@@ -889,9 +889,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
||||
mrContact = MrMailbox.getContact(user_id);
|
||||
newString = mrContact.getDisplayName();
|
||||
newString2 = mrContact.getAddr();
|
||||
/*if( !newString.equals(mrContact.getAuthName()) ) { -- not sure if it is really useful to display the auth-name here
|
||||
newString += " (" + mrContact.getAuthName() + ")";
|
||||
}*/
|
||||
}
|
||||
else {
|
||||
mrChat = MrMailbox.getChat(chat_id);
|
||||
@@ -921,6 +918,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter.
|
||||
|
||||
if (user_id != 0) {
|
||||
item.addSubItem(ID_COPY_EMAIL_TO_CLIPBOARD, ApplicationLoader.applicationContext.getString(R.string.CopyToClipboard), 0);
|
||||
}
|
||||
|
||||
if( user_id != 0 && user_id != MrContact.MR_CONTACT_ID_SELF ) {
|
||||
item.addSubItem(ID_BLOCK_CONTACT, userBlocked()? ApplicationLoader.applicationContext.getString(R.string.UnblockContact) : ApplicationLoader.applicationContext.getString(R.string.BlockContact), 0);
|
||||
item.addSubItem(ID_DELETE_CONTACT, ApplicationLoader.applicationContext.getString(R.string.DeleteContact), 0);
|
||||
}
|
||||
|
||||
@@ -99,15 +99,8 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||
}
|
||||
|
||||
public void sendMessageContact(int contact_id, int dialog_id) {
|
||||
MrContact contact = MrMailbox.getContact(contact_id);
|
||||
String msg = contact.getAuthName();
|
||||
if(msg.isEmpty()) {
|
||||
msg = contact.getAddr();
|
||||
}
|
||||
else {
|
||||
msg += ": " + contact.getAddr();
|
||||
}
|
||||
SendMessagesHelper.getInstance().sendMessageText(msg, dialog_id, null);
|
||||
int msg_id = MrMailbox.sendVcardMsg(dialog_id, contact_id);
|
||||
updateInterfaceForNewMessage(dialog_id, true, msg_id);
|
||||
}
|
||||
|
||||
public void sendMessageDocument(TLRPC.TL_document document, VideoEditedInfo videoEditedInfo, String path, long peer, HashMap<String, String> params) {
|
||||
@@ -132,7 +125,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
|
||||
else {
|
||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.messageSendError, msg_id);
|
||||
}
|
||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
|
||||
//NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); -- already send due to MR_EVENT_MSGS_CHANGED which is send by the core on sending messages
|
||||
}
|
||||
|
||||
private void sendMessage__(String message,
|
||||
|
||||
@@ -345,7 +345,7 @@ public class SettingsAccountFragment extends BaseFragment implements Notificatio
|
||||
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, ApplicationLoader.applicationContext.getString(R.string.Cancel), new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
MrMailbox.configureCancel();
|
||||
MrMailbox.stopOngoingProcess();
|
||||
}
|
||||
});
|
||||
progressDialog.show();
|
||||
|
||||
@@ -72,6 +72,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
|
||||
private int settingsShadowRow;
|
||||
|
||||
private int imexHeaderRow;
|
||||
private int initiateKeyTransferRow;
|
||||
private int manageKeysRow;
|
||||
private int backupRow;
|
||||
private int backupShadowRow;
|
||||
@@ -120,6 +121,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
|
||||
settingsShadowRow = rowCount++;
|
||||
|
||||
imexHeaderRow = rowCount++;
|
||||
initiateKeyTransferRow = rowCount++;
|
||||
manageKeysRow = rowCount++;
|
||||
backupRow = rowCount++;
|
||||
backupShadowRow = rowCount++;
|
||||
@@ -232,6 +234,63 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
|
||||
{
|
||||
presentFragment(new SettingsAccountFragment(null));
|
||||
}
|
||||
else if(i==initiateKeyTransferRow )
|
||||
{
|
||||
AlertDialog.Builder builder1 = new AlertDialog.Builder(getParentActivity());
|
||||
builder1.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
|
||||
builder1.setMessage(AndroidUtilities.replaceTags(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransferMsgBeforeSend)));
|
||||
builder1.setNegativeButton(R.string.Cancel, null);
|
||||
builder1.setPositiveButton(R.string.AutocryptKeyTransferInitiate, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
progressDialog = new ProgressDialog(getParentActivity());
|
||||
progressDialog.setMessage(ApplicationLoader.applicationContext.getString(R.string.OneMoment));
|
||||
progressDialog.setCanceledOnTouchOutside(false);
|
||||
progressDialog.setCancelable(false);
|
||||
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, ApplicationLoader.applicationContext.getString(R.string.Cancel), new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
MrMailbox.stopOngoingProcess();
|
||||
}
|
||||
});
|
||||
progressDialog.show();
|
||||
Utilities.searchQueue.postRunnable(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final String sc = MrMailbox.initiateKeyTransfer();
|
||||
AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if( progressDialog != null ) {
|
||||
progressDialog.dismiss();
|
||||
progressDialog = null;
|
||||
}
|
||||
|
||||
if( sc != null ) {
|
||||
String scFormatted = "";
|
||||
try {
|
||||
scFormatted = sc.substring(0, 4) + " - " + sc.substring(5, 9) + " - " + sc.substring(10, 14) + " -\n\n" +
|
||||
sc.substring(15, 19) + " - " + sc.substring(20, 24) + " - " + sc.substring(25, 29) + " -\n\n" +
|
||||
sc.substring(30, 34) + " - " + sc.substring(35, 39) + " - " + sc.substring(40, 44);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
AlertDialog.Builder builder2 = new AlertDialog.Builder(getParentActivity());
|
||||
builder2.setTitle(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransfer));
|
||||
builder2.setMessage(AndroidUtilities.replaceTags(String.format(ApplicationLoader.applicationContext.getString(R.string.AutocryptKeyTransferMsgAfterSend), scFormatted)));
|
||||
builder2.setPositiveButton(R.string.OK, null);
|
||||
builder2.setCancelable(false); // prevent the dialog from being dismissed accidentally (when the dialog is closed, the setup code is gone forever and the user has to create a new setup message)
|
||||
showDialog(builder2.create());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
showDialog(builder1.create());
|
||||
|
||||
}
|
||||
else if(i==manageKeysRow )
|
||||
{
|
||||
imexShowMenu(ApplicationLoader.applicationContext.getString(R.string.E2EManagePrivateKeys),
|
||||
@@ -410,7 +469,7 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
|
||||
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, ApplicationLoader.applicationContext.getString(R.string.Cancel), new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
MrMailbox.imex(0, null);
|
||||
MrMailbox.stopOngoingProcess();
|
||||
}
|
||||
});
|
||||
progressDialog.show();
|
||||
@@ -420,7 +479,18 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
|
||||
MrMailbox.m_lastErrorString = "";
|
||||
}
|
||||
|
||||
MrMailbox.imex(what, imexDir.getAbsolutePath());
|
||||
Utilities.searchQueue.postRunnable(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final int res = MrMailbox.imex(progressWhat, imexDir.getAbsolutePath());
|
||||
AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexEnded, (int)res);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -535,6 +605,9 @@ public class SettingsAdvFragment extends BaseFragment implements NotificationCen
|
||||
String cntStr = String.format("%d", MrMailbox.getBlockedCount());
|
||||
textCell.setTextAndValue(ApplicationLoader.applicationContext.getString(R.string.BlockedContacts), cntStr, true);
|
||||
}
|
||||
else if( i==initiateKeyTransferRow ) {
|
||||
textCell.setText(mContext.getString(R.string.AutocryptKeyTransferInitiate), true);
|
||||
}
|
||||
else if( i==manageKeysRow ) {
|
||||
textCell.setText(mContext.getString(R.string.E2EManagePrivateKeys), true);
|
||||
}
|
||||
|
||||
@@ -258,6 +258,7 @@ public class TLRPC {
|
||||
public boolean created_by_mr;
|
||||
public boolean show_padlock;
|
||||
public boolean is_system_cmd;
|
||||
public boolean is_setup_message;
|
||||
}
|
||||
|
||||
public static class TL_message extends Message {
|
||||
|
||||
@@ -323,7 +323,7 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
|
||||
}
|
||||
|
||||
private ProgressDialog progressDialog = null;
|
||||
private void startImport(String backupFile)
|
||||
private void startImport(final String backupFile)
|
||||
{
|
||||
if( progressDialog!=null ) {
|
||||
progressDialog.dismiss();
|
||||
@@ -337,7 +337,7 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
|
||||
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, ApplicationLoader.applicationContext.getString(R.string.Cancel), new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
MrMailbox.imex(0, null);
|
||||
MrMailbox.stopOngoingProcess();
|
||||
}
|
||||
});
|
||||
progressDialog.show();
|
||||
@@ -347,7 +347,18 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
|
||||
MrMailbox.m_lastErrorString = "";
|
||||
}
|
||||
|
||||
MrMailbox.imex(MrMailbox.MR_IMEX_IMPORT_BACKUP, backupFile);
|
||||
Utilities.searchQueue.postRunnable(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final int res = MrMailbox.imex(MrMailbox.MR_IMEX_IMPORT_BACKUP, backupFile);
|
||||
AndroidUtilities.runOnUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexEnded, (int)res);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -371,6 +382,7 @@ public class WelcomeActivity extends Activity implements NotificationCenter.Noti
|
||||
}
|
||||
|
||||
if( (int)args[0]==1 ) {
|
||||
MrMailbox.connect(); // import does not automatically connect
|
||||
startActivity(new Intent(WelcomeActivity.this, LaunchActivity.class));
|
||||
finish();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<!-- the FrameLayout is needed as View.inflate() without a root discards all layout_-attributes -->
|
||||
|
||||
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginLeft="24dp"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginRight="24dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:columnCount="6"
|
||||
android:rowCount="1">
|
||||
|
||||
<!-- 1st row -->
|
||||
|
||||
<EditText
|
||||
android:id="@+id/setupCode0"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:inputType="numberDecimal"
|
||||
android:maxLength="4"
|
||||
android:minEms="3"/>
|
||||
|
||||
<TextView
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text=" - "
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/setupCode1"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:inputType="numberDecimal"
|
||||
android:maxLength="4"
|
||||
android:minEms="3"/>
|
||||
|
||||
<TextView
|
||||
android:text=" - "
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/setupCode2"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:inputType="numberDecimal"
|
||||
android:maxLength="4"
|
||||
android:minEms="3"/>
|
||||
|
||||
<TextView
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text=" - "
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"/>
|
||||
|
||||
<!-- 2nd row -->
|
||||
|
||||
<EditText
|
||||
android:id="@+id/setupCode3"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:inputType="numberDecimal"
|
||||
android:maxLength="4"
|
||||
android:minEms="3"/>
|
||||
|
||||
<TextView
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text=" - "
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/setupCode4"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:inputType="numberDecimal"
|
||||
android:maxLength="4"
|
||||
android:minEms="3"/>
|
||||
|
||||
<TextView
|
||||
android:layout_marginBottom="8dp"
|
||||
android:text=" - "
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/setupCode5"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:inputType="numberDecimal"
|
||||
android:maxLength="4"
|
||||
android:minEms="3"/>
|
||||
|
||||
<TextView
|
||||
android:text=" - "
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"/>
|
||||
|
||||
<!-- 3rd row -->
|
||||
|
||||
<EditText
|
||||
android:id="@+id/setupCode6"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:inputType="numberDecimal"
|
||||
android:maxLength="4"
|
||||
android:minEms="3"/>
|
||||
|
||||
<TextView
|
||||
android:text=" - "
|
||||
android:layout_marginBottom="8dp"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/setupCode7"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:inputType="numberDecimal"
|
||||
android:maxLength="4"
|
||||
android:minEms="3"/>
|
||||
|
||||
<TextView
|
||||
android:text=" - "
|
||||
android:layout_marginBottom="8dp"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/setupCode8"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:inputType="numberDecimal"
|
||||
android:maxLength="4"
|
||||
android:minEms="3"/>
|
||||
|
||||
<TextView
|
||||
android:text=" "
|
||||
android:layout_marginBottom="8dp"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat"/>
|
||||
|
||||
</GridLayout>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -41,9 +41,9 @@
|
||||
<string name="From">Von</string>
|
||||
<string name="NoRecent">Keine aktuellen</string>
|
||||
<string name="TypeMessage">Nachricht</string>
|
||||
<string name="SlideToCancel">WISCHEN UM ABZUBRECHEN</string>
|
||||
<string name="SaveToDownloads">In Downloads speichern</string>
|
||||
<string name="SaveToMusic">In Musik speichern</string>
|
||||
<string name="SlideToCancel">Wischen um abzubrechen</string>
|
||||
<string name="SaveToDownloads">In „Downloads“ speichern</string>
|
||||
<string name="SaveToMusic">In „Musik“ speichern</string>
|
||||
<string name="Share">Teilen</string>
|
||||
<string name="SendItems">%1$s senden</string>
|
||||
<string name="ClearRecentEmoji">Zuletzt benutzte Emoji leeren?</string>
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="Default">Standard</string>
|
||||
<string name="OnlyIfSilent">Wenn lautlos</string>
|
||||
<string name="ChatBackground">Chat-Hintergrundbild</string>
|
||||
<string name="SendByEnter">Mit Taste „Enter“ senden</string>
|
||||
<string name="SendByEnter">Mit Eingabetaste senden</string>
|
||||
<string name="Help">Hilfe</string>
|
||||
<string name="Enabled">An</string>
|
||||
<string name="Disabled">Aus</string>
|
||||
@@ -151,13 +151,13 @@
|
||||
<string name="Sharpen">Schärfe</string>
|
||||
<string name="Fade">Verblassen</string>
|
||||
<string name="Tint">Tönung</string>
|
||||
<string name="TintShadows">TIEFEN</string>
|
||||
<string name="TintHighlights">LICHTER</string>
|
||||
<string name="TintShadows">Tiefen</string>
|
||||
<string name="TintHighlights">Lichter</string>
|
||||
<string name="Curves">Kurven</string>
|
||||
<string name="CurvesAll">ALLE</string>
|
||||
<string name="CurvesRed">ROT</string>
|
||||
<string name="CurvesGreen">GRÜN</string>
|
||||
<string name="CurvesBlue">BLAU</string>
|
||||
<string name="CurvesAll">Alle</string>
|
||||
<string name="CurvesRed">Rot</string>
|
||||
<string name="CurvesGreen">Grün</string>
|
||||
<string name="CurvesBlue">Blau</string>
|
||||
<string name="Blur">Unschärfe</string>
|
||||
<string name="BlurOff">Aus</string>
|
||||
<string name="BlurLinear">Linear</string>
|
||||
@@ -184,7 +184,7 @@
|
||||
<string name="FromGalley">Aus der Galerie</string>
|
||||
<string name="Set">Wählen</string>
|
||||
<string name="OK">OK</string>
|
||||
<string name="Crop">SCHNEIDEN</string>
|
||||
<string name="Crop">Schneiden</string>
|
||||
<!--messages-->
|
||||
<string name="AttachPhoto">Bild</string>
|
||||
<string name="AttachVideo">Video</string>
|
||||
@@ -239,7 +239,7 @@
|
||||
</plurals>
|
||||
<plurals name="MeAndMembers">
|
||||
<item quantity="one">Ich und %d Mitglied</item>
|
||||
<item quantity="other">Ich und %d Mitglieder</item>
|
||||
<item quantity="other">%d Mitglieder und ich</item>
|
||||
</plurals>
|
||||
<plurals name="NewMessages">
|
||||
<item quantity="one">%d neue Nachricht</item>
|
||||
@@ -409,4 +409,15 @@
|
||||
<string name="LeaveGroup">Gruppe verlassen</string>
|
||||
<string name="AskLeaveGroup">Diese Gruppe verlassen?</string>
|
||||
<string name="Never">Niemals</string>
|
||||
<string name="AutocryptKeyTransferInitiate">Autocrypt-Key-Transfer starten</string>
|
||||
<string name="AutocryptKeyTransfer">Autocrypt-Key-Transfer</string>
|
||||
<string name="AutocryptKeyTransferMsgBeforeSend">Der <![CDATA[<i>]]>Autocrypt-Key-Transfer<![CDATA[</i>]]> erfordert, dass das andere Gerät Autocrypt-kompatibel ist.\n\nSie können dann Ihren privaten Schlüssel an sich selbst schicken. Der Schlüssel wird mit einem <![CDATA[<i>]]>Setup Code<![CDATA[</i>]]> geschützt; dieser wird hier angezeigt und muss auf dem anderen Gerät eingetippt werden.</string>
|
||||
<string name="AutocryptKeyTransferMsgAfterSend">Ihr Schüssel wurde an Sie selbst verschickt. Wechseln sie nun zum anderen Gerät und öffnen die Setup-Nachricht. Sie werden dann aufgefordert einen Setup-Code einzugeben. Tippen Sie dort die folgenden Zahlen ein:\n\n%1$s\n\nWenn Sie fertig sind, ist Autocrypt auf dem anderen Gerät eingerichet.</string>
|
||||
<string name="AutocryptSetupMessageSubject">Autocrypt-Setup-Nachricht</string>
|
||||
<string name="AutocryptSetupMessageGeneralBody">Diese Autocrypt-Setup-Nachricht wird verwendet um Ihren Schlüssel von einem Gerät auf das andere zu übertragen.\n\nUm Ihren Schlüssel zu verwenden, öffnen Sie diese Nachricht in einer Autocrypt-kompatiblen E-Mail-App und geben Sie den Setup-Code ein, der Ihnen auf dem andern Gerät angezeigt wurde.</string>
|
||||
<string name="AutocryptSetupMessageTapBody">Diese Autocrypt-Setup-Nachricht wird verwendet um Ihren Schlüssel von einem Gerät auf das andere zu übertragen.\n\nTippen Sie auf diese Nachricht, um den Schlüssel zu verwenden.</string>
|
||||
<string name="AutocryptKeyTransferPleaseEnterCode">Bitte geben Sie den Setup-Code ein, der auf dem anderen Gerät angezeigt wird.</string>
|
||||
<string name="AutocryptKeyTransferBadCode">Ungültiger Setup-Code. Bitte versuchen Sie es erneut.\n\nWenn Sie den Setup-Code nicht mehr haben, können Sie auch jederzeit einen neue Autocrypt-Setup-Nachricht mit einem neuen Setup-Code erzeugen.</string>
|
||||
<string name="AutocryptKeyTransferSucceeded">Ihr Schlüssel wurde erfolgreich übertragen. Dieses Gerät wird nun Autocrypt mit demselben Schlüssel wie das Andere verwenden.</string>
|
||||
<string name="Retry">Wiederholen</string>
|
||||
</resources>
|
||||
|
||||
@@ -410,4 +410,4 @@ La dernière clé importée sera utilisée comme nouvelle clé par défaut</stri
|
||||
<string name="LeaveGroup">Quitter le groupe</string>
|
||||
<string name="AskLeaveGroup">Êtes-vous sûr de vouloir quitter ce groupe?</string>
|
||||
<string name="Never">Jamais</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
@@ -409,4 +409,15 @@
|
||||
<string name="LeaveGroup">Abbandona gruppo</string>
|
||||
<string name="AskLeaveGroup">Sei sicuro di voler abbandonare il gruppo?</string>
|
||||
<string name="Never">Mai</string>
|
||||
<string name="AutocryptKeyTransferInitiate">Avviato trasferimento chiavi Autocrypt</string>
|
||||
<string name="AutocryptKeyTransfer">Trasferimento chiavi Autocrypt</string>
|
||||
<string name="AutocryptKeyTransferMsgBeforeSend">Il <![CDATA[<i>]]>trasferimento chiavi Autocrypt<![CDATA[</i>]]> richiede che il client email sull\'altro dispositivo sia compatibile con Autocrypt.\n\nSarà quindi possibile inviare la chiave a se stessi. La chiave verrà cifrata con un codice di configurazione che verrà mostrato qui e dovrà essere digitato sull\'altro dispositivo.</string>
|
||||
<string name="AutocryptKeyTransferMsgAfterSend">La chiave è stata inviata. Passare all\'altro dispositivo e aprire il messaggio di configurazione. Verrà richiesto un codice. Digitare il codice seguente:\n\n%1$s\n\nUna volta terminato, l\'altro dispositivo sarà pronto per usare Autocrypt.</string>
|
||||
<string name="AutocryptSetupMessageSubject">Massaggio di configurazione Autocrypt</string>
|
||||
<string name="AutocryptSetupMessageGeneralBody">Questo è il messaggio di configurazione di Autocrypt usato per trasferire la propria chiave tra più client.\n\nPer decifrare e usare la chiave, aprire il messaggio in un client compatibile con Autocrypt e digitare il codice di configurazione visibile sul dispositivo dal quale si è generata la chiave.</string>
|
||||
<string name="AutocryptSetupMessageTapBody">Questo è il messaggio di configurazione di Autocrypt usato per trasferire la propria chiave tra più client.\n\nPer decifrare e usare la chiave, aprire questo messaggio.</string>
|
||||
<string name="AutocryptKeyTransferPleaseEnterCode">Inserire il codice di configurazione mostrato sull\'altro dispositivo.</string>
|
||||
<string name="AutocryptKeyTransferBadCode">Codice di configurazione errato.\n\nSe non si ricorda il codice di configurazione, avviare nuovamente il trafserimento chiavi sull\'altro dispositivo.</string>
|
||||
<string name="AutocryptKeyTransferSucceeded">Chiave trasferita con successo. Questo dispositivo è pronto per usare Autocrypt con la stessa chiave dell\'altro dispositivo.</string>
|
||||
<string name="Retry">Riprovare</string>
|
||||
</resources>
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
<string name="FingerprintInfo">Bekreft fingeravtrykk for å fortsette</string>
|
||||
<string name="FingerprintNotRecognized">Fingeravtrykket ble ikke gjenkjent. Prøv igjen</string>
|
||||
<!--photo gallery view-->
|
||||
<string name="SaveToGallery">Lagre i \"Galleri"\</string>
|
||||
<string name="SaveToGallery">Lagre i \"Galleri\"</string>
|
||||
<string name="Of">%1$d av %2$d</string>
|
||||
<string name="Gallery">Galleri</string>
|
||||
<string name="AllPhotos">Alle bilder</string>
|
||||
@@ -358,4 +358,4 @@
|
||||
<string name="LeaveGroup">Forlat gruppe</string>
|
||||
<string name="AskLeaveGroup">Er du sikker på at du vil forlate denne gruppen?</string>
|
||||
<string name="Never">Aldri</string>
|
||||
</resources>
|
||||
</resources>
|
||||
|
||||
@@ -437,4 +437,15 @@
|
||||
<string name="LeaveGroup">Opuść grupę</string>
|
||||
<string name="AskLeaveGroup">Czy na pewno chcesz opuścić tą grupę?</string>
|
||||
<string name="Never">Nigdy</string>
|
||||
<string name="AutocryptKeyTransferInitiate">Rozpocznij tranfer klucza automatycznego szyfrowania</string>
|
||||
<string name="AutocryptKeyTransfer">Tranfer klucza automatycznego szyfrowania</string>
|
||||
<string name="AutocryptKeyTransferMsgBeforeSend"><![CDATA[<i>]]>Tranfer klucza automatycznego szyfrowania<![CDATA[</i>]]> wymaga, aby klient poczty na drugim urządzeniu był zgodny z automatycznym szyfrowaniem.\n\nMożesz wysłać klucz do siebie. Klucz zostanie zaszyfrowany za pomocą wyświetlonego tutaj kodu konfiguracyjnego, który należy wpisać na drugim urządzeniu.</string>
|
||||
<string name="AutocryptKeyTransferMsgAfterSend">Klucz został wysłany do ciebie. Przejdź do innego urządzenia i otwórz wiadomość konfiguracyjną. Zostanie wyświetlona prośba o podanie kodu konfiguracyjnego. Wpisz następujące cyfry w podpowiedzi:\n\n%1$s\n\nGdy skończysz, drugie urządzenie będzie gotowe do użycia funkcji automatycznego szyfrowania.</string>
|
||||
<string name="AutocryptSetupMessageSubject">Wiadomość konfiguracyjna automatycznego szyfrowania</string>
|
||||
<string name="AutocryptSetupMessageGeneralBody">Jest to wiadomość konfiguracyjna automatycznego szyfrowania służąca do przesyłania klucza między klientami.\n\nAby odszyfrować i użyć klucza, otwórz wiadomość w kliencie zgodnym z automatycznym szyfrowaniem i wprowadź kod konfiguracyjny przedstawiony na urządzeniu generującym.</string>
|
||||
<string name="AutocryptSetupMessageTapBody">Jest to wiadomość konfiguracyjna automatycznego szyfrowania służąca do przesyłania klucza między klientami.\n\nAby odszyfrować i użyć klucza, dotknij tą wiadomość.</string>
|
||||
<string name="AutocryptKeyTransferPleaseEnterCode">Wprowadź kod konfiguracyjny wyświetlany na drugim urządzeniu.</string>
|
||||
<string name="AutocryptKeyTransferBadCode">Zły kod konfiguracyjny. Spróbuj ponownie.\n\nJeśli nie pamiętasz kodu konfiguracji, po prostu uruchom ponownie transfer klucza na drugim urządzeniu.</string>
|
||||
<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>
|
||||
</resources>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<string name="UnmuteNotifications">Restaurar som</string>
|
||||
<string name="Draft">Rascunho</string>
|
||||
<!--audio view-->
|
||||
<string name="NoAudio">Por favor, adicione músicas à sua biblioteca para vê-las aqui.</string>
|
||||
<string name="NoAudio">Músicas adicionados à biblioteca do dispositivo serão exibidas aqui.</string>
|
||||
<string name="AttachMusic">Música</string>
|
||||
<!--documents view-->
|
||||
<string name="SelectFile">Selecione um arquivo</string>
|
||||
@@ -41,7 +41,7 @@
|
||||
<string name="From">De</string>
|
||||
<string name="NoRecent">Nada recente</string>
|
||||
<string name="TypeMessage">Mensagem</string>
|
||||
<string name="SlideToCancel">DESLIZE PARA CANCELAR</string>
|
||||
<string name="SlideToCancel">Deslize para cancelar</string>
|
||||
<string name="SaveToDownloads">Salvar em downloads</string>
|
||||
<string name="SaveToMusic">Salvar em músicas</string>
|
||||
<string name="Share">Compartilhar</string>
|
||||
@@ -205,7 +205,7 @@
|
||||
<string name="PermissionContacts">Delta Chat precisa acessar seus contatos para que você possa se conectar aos seus amigos em todos os seus dispositivos.</string>
|
||||
<string name="PermissionStorage">Delta Chat precisa acessar seu armazenamento para que você possa enviar e salvar fotos, vídeos, músicas e outras mídias.</string>
|
||||
<string name="PermissionNoAudio">Delta Chat precisa acessar seu microfone para que você possa enviar mensagens de voz.</string>
|
||||
<string name="PermissionOpenSettings">Configurações de ajuste</string>
|
||||
<string name="PermissionOpenSettings">Configurações</string>
|
||||
<!--Intro view-->
|
||||
<string name="Intro1Headline">Delta Chat</string>
|
||||
<string name="Intro1Message">O aplicativo com a <![CDATA[<b>maior base de contatos</b>]]> do mundo.<![CDATA[<br/><b>Grátis</b>]]> e <![CDATA[<b>seguro</b>]]>.</string>
|
||||
@@ -222,7 +222,7 @@
|
||||
<string name="Intro5Headline">Grátis</string>
|
||||
<string name="Intro5Message"><![CDATA[<b>Delta Chat</b>]]> será sempre grátis, de<![CDATA[<br/>]]>Código livre e sem propagandas.</string>
|
||||
|
||||
<string name="Intro6Headline">Seguro</string>
|
||||
<string name="Intro6Headline">Criptografado</string>
|
||||
<string name="Intro6Message"><![CDATA[<b>Criptografia</b>]]> com as tecnologias mais usadas. Suas mensagens ficam no servidor de e-mail.</string>
|
||||
|
||||
<string name="Intro7Headline">Confiável</string>
|
||||
@@ -398,4 +398,15 @@
|
||||
<string name="ExportPrivateKeys">Exportar chaves privadas</string>
|
||||
<string name="ImportPrivateKeys">Importar chaves privadas</string>
|
||||
<string name="ImportPrivateKeysAsk2">Importar chaves privadas de <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• As chaves existentes não serão apagadas\n\n• A última chave importada será usada como padrão</string>
|
||||
<string name="NoRecentEmoji">Emojis recentemente usados.</string>
|
||||
<string name="E2eeOffBecauseOfUser">Para habilitar a criptografia ponta a ponta revise as configurações do aplicativo.</string>
|
||||
<string name="E2eeOffBecauseOfRecipient">> A criptografia ponta a ponta será empregada se o destinatário habilitá-la também.</string>
|
||||
<string name="NotNow">Agora não</string>
|
||||
<string name="ArchiveChat">Arquivar conversa</string>
|
||||
<string name="UnarchiveChat">Desarquivar conversa</string>
|
||||
<string name="ArchivedChats">Conversas arquivadas</string>
|
||||
<string name="Archived">Arquivado</string>
|
||||
<string name="LeaveGroup">Sair do grupo</string>
|
||||
<string name="AskLeaveGroup">Tem certeza que deseja sair do grupo?</string>
|
||||
<string name="Never">Jamais</string>
|
||||
</resources>
|
||||
|
||||
@@ -437,4 +437,15 @@
|
||||
<string name="LeaveGroup">Выйти из группы</string>
|
||||
<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="AutocryptKeyTransferMsgAfterSend">Вы отправили ключ себе. Теперь перейдите к другому устройству и откройте сообщение настройки. Будет предложено ввести код настройки. Введите следующие цифры:\n\n%1$s\n\nКак только Вы это сделаете, другое устройство будет готово использовать Autocrypt.</string>
|
||||
<string name="AutocryptSetupMessageSubject">Сообщение настройки Autocrypt</string>
|
||||
<string name="AutocryptSetupMessageGeneralBody">Это сообщение настройки Autocrypt, используемое для передачи ключа между клиентами.\n\nДля расшифровки и использования Вашего ключа откройте это сообщение в почтовом клиенте, совместимом с Autocrypt, и введите код, показываемый на устройстве, с которого отправлено сообщение.</string>
|
||||
<string name="AutocryptSetupMessageTapBody">Это сообщение настройки Autocrypt, используемое для передачи Вашего ключа между клиентами.\n\nЧтобы расшифровать и начать использовать Ваш ключ, нажмите на это сообщение.</string>
|
||||
<string name="AutocryptKeyTransferPleaseEnterCode">Пожалуйста, введите код настройки, показанный на другом устройстве.</string>
|
||||
<string name="AutocryptKeyTransferBadCode">Неверный код настройки. Пожалуйста, повторите.\n\nЕсли Вы не помните код настройки, вернитесь к исходному устройству и передайте ключ ещё раз.</string>
|
||||
<string name="AutocryptKeyTransferSucceeded">Ключ передан успешно. Сейчас это устройство может использовать Autocrypt с тем же ключом, что и на другом устройстве.</string>
|
||||
<string name="Retry">Повторить</string>
|
||||
</resources>
|
||||
|
||||
@@ -0,0 +1,393 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
|
||||
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="AppName">Fjalosje Delta</string>
|
||||
<!--chats view-->
|
||||
<string name="Settings">Rregullime</string>
|
||||
<string name="NewGroup">Grup i ri</string>
|
||||
<string name="NoResult">S’ka përfundime.</string>
|
||||
<string name="NoChats">Ende pa fjalosje.</string>
|
||||
<string name="DeleteChat">Fshije fjalosjen</string>
|
||||
<string name="SelectChat">Përzgjidhni fjalosje…</string>
|
||||
<string name="Search">Kërko</string>
|
||||
<string name="MuteNotifications">Mos shfaq njoftime</string>
|
||||
<string name="MuteFor">Mos i shfaq për %1$s</string>
|
||||
<string name="UnmuteNotifications">Shfaqi</string>
|
||||
<string name="Draft">Skicë</string>
|
||||
<!--audio view-->
|
||||
<string name="NoAudio">Kartelat e shtuara te mediateka e pajisjes suaj do të shfaqen këtu.</string>
|
||||
<string name="AttachMusic">Muzikë</string>
|
||||
<!--documents view-->
|
||||
<string name="SelectFile">Përzgjidhni Kartelë</string>
|
||||
<string name="FreeOfTotal">%1$s nga %2$s të lira</string>
|
||||
<string name="ErrorHint">Gabim i panjohur</string>
|
||||
<string name="AccessError">Gabim hyrjeje</string>
|
||||
<string name="NoFiles">Ende pa kartela…</string>
|
||||
<string name="NotMounted">S’ka depozitë të montuar</string>
|
||||
<string name="UsbActive">Shpërngulje USB në ecuri e sipër</string>
|
||||
<string name="InternalStorage">Depozitë e Brendshme</string>
|
||||
<string name="ExternalStorage">Depozitë e Jashtme</string>
|
||||
<string name="SystemRoot">Rrënjë e Sistemit</string>
|
||||
<string name="SdCard">Diskth SD</string>
|
||||
<string name="Folder">Dosje</string>
|
||||
<string name="GalleryInfo">Për dërgim figurash të pangjeshura</string>
|
||||
<!--chat view-->
|
||||
<string name="ChatGallery">Galeri</string>
|
||||
<string name="ChatCamera">Kamerë</string>
|
||||
<string name="NoMessages">S’ka mesazhe.</string>
|
||||
<string name="ForwardedMessage">Mesazh i përcjellë</string>
|
||||
<string name="From">Nga</string>
|
||||
<string name="TypeMessage">Mesazh</string>
|
||||
<string name="SaveToDownloads">Ruaje te \"Shkarkime\"</string>
|
||||
<string name="SaveToMusic">Ruaje te \"Muzikë\"</string>
|
||||
<string name="AddShortcut">Shtoje widget-in te kreu</string>
|
||||
<string name="ShortcutAdded">Widget-i u shtua tek kreu</string>
|
||||
<!--notification-->
|
||||
<string name="Reply">Përgjigjuni</string>
|
||||
<string name="ReplyToGroup">Përgjigjiuni %1$s</string>
|
||||
<string name="ReplyToContact">Përgjigjiuni %1$s</string>
|
||||
<!--contacts view-->
|
||||
<string name="NoContacts">Ende pa kontakte.</string>
|
||||
<!--group create view-->
|
||||
<string name="SendMessageTo">Dërgoni mesazh te…</string>
|
||||
<string name="EnterGroupNamePlaceholder">Jepni emër grupi</string>
|
||||
<!--group info view-->
|
||||
<string name="AddMember">Shtoni anëtar</string>
|
||||
<string name="Notifications">Njoftime</string>
|
||||
<string name="RemoveMember">Hiqni anëtar</string>
|
||||
<!--contact info view-->
|
||||
<string name="NewContactTitle">Kontakt i ri</string>
|
||||
<string name="BlockContact">Bllokoje kontaktin</string>
|
||||
<string name="DeleteContact">Fshije kontaktin</string>
|
||||
<string name="Info">Të dhëna</string>
|
||||
<!--settings view-->
|
||||
<string name="TextSize">Madhësi shkronjash mesazhi</string>
|
||||
<string name="UnblockContact">Zhbllokoje kontaktin</string>
|
||||
<string name="NoBlocked">Ende pa kontakte të bllokuar</string>
|
||||
<string name="DefaultForNormalMessages">Mesazhe normale</string>
|
||||
<string name="MessagePreview">Paraparje mesazhesh</string>
|
||||
<string name="Sound">Tingull</string>
|
||||
<string name="Vibrate">Dridhu</string>
|
||||
<string name="ResetAllNotifications">Ktheji krejt njoftimet te parazgjedhjet</string>
|
||||
<string name="NotificationsAndSounds">Njoftime dhe tinguj</string>
|
||||
<string name="BlockedContacts">Kontakte të bllokuar</string>
|
||||
<string name="Default">Parazgjedhje</string>
|
||||
<string name="ChatBackground">Sfond fjalosjeje</string>
|
||||
<string name="SendByEnter">Dërgoje me \"Enter\"</string>
|
||||
<string name="Help">Ndihmë</string>
|
||||
<string name="Enabled">On</string>
|
||||
<string name="Disabled">Off</string>
|
||||
<string name="LedColor">Ngjyrë LED</string>
|
||||
<string name="Short">E shkurtër</string>
|
||||
<string name="Long">E gjatë</string>
|
||||
<string name="RaiseToSpeak">Rriteni që të flisni</string>
|
||||
<string name="EditName">Përpunoni emrin</string>
|
||||
<string name="NotificationsPriority">Shiheni</string>
|
||||
<string name="NotificationsPriorityDefault">Përparësi normale</string>
|
||||
<string name="NotificationsPriorityHigh">Përparësi e lartë</string>
|
||||
<string name="NotificationsPriorityMax">Përparësia më lartë</string>
|
||||
<string name="RepeatNotifications">Ripërsëriti njoftimet</string>
|
||||
<string name="NotificationsOther">Tjetër</string>
|
||||
<string name="SmartNotifications">Kufizo njoftimet</string>
|
||||
<string name="SmartNotificationsSoundAtMost">Maks.</string>
|
||||
<string name="SmartNotificationsTimes">herë</string>
|
||||
<string name="SmartNotificationsWithin">brenda</string>
|
||||
<string name="SmartNotificationsMinutes">minutash</string>
|
||||
<!--cache view-->
|
||||
<string name="CacheSettings">Depozitë</string>
|
||||
<string name="KeepMedia">Mbaje Median</string>
|
||||
<string name="KeepMediaInfo">Foto, video dhe kartela të tjera prej bisedash në re, që <![CDATA[<b>nuk i keni hapur</b>]]> gjatë kësaj periudhe, do të hiqen prej pajisjes, për të kursyer hapësirë disku.</string>
|
||||
<string name="KeepMediaForever">Përgjithmonë</string>
|
||||
<!--passcode view-->
|
||||
<string name="Passcode">Kyçje Kodkalimi</string>
|
||||
<string name="ChangePasscode">Ndryshoni Kodkalimin</string>
|
||||
<string name="ChangePasscodeInfo">Kur rregulloni një kodkalim shtesë, te faqja e bisedave do të shfaqet një ikonë dryni. Prekeni që të kyçet aplikacioni.\n\nShënim: nëse harroni kodkalimin, do t’ju duhet të fshini dhe ri-instaloni aplikacionin.</string>
|
||||
<string name="PasscodePIN">PIN</string>
|
||||
<string name="PasscodePassword">Fjalëkalim</string>
|
||||
<string name="EnterCurrentPasscode">Jepni kodkalimin tuaj të tanishëm</string>
|
||||
<string name="EnterNewFirstPasscode">Jepni një kodkalim</string>
|
||||
<string name="EnterNewPasscode">Jepni kodkalimin tuaj të ri</string>
|
||||
<string name="EnterYourPasscode">Jepni kodkalimin tuaj</string>
|
||||
<string name="ReEnterYourPasscode">Rijepeni kodkalimin tuaj të ri</string>
|
||||
<string name="PasscodeDoNotMatch">Kodkalimet nuk përputhen</string>
|
||||
<string name="AutoLock">Vetëkyçe</string>
|
||||
<string name="AutoLockInfo">Kërko kodkalim nëse largohet për njëfarë koe.</string>
|
||||
<string name="UnlockFingerprint">Shkyçe me shenja gishtash</string>
|
||||
<string name="FingerprintInfo">Që të vazhdohet, konfirmoni shenja gishtash</string>
|
||||
<string name="FingerprintNotRecognized">Shenja gishtash që nuk njihen. Riprovoni</string>
|
||||
<!--photo gallery view-->
|
||||
<string name="SaveToGallery">Ruaje te \"Galeri\"</string>
|
||||
<string name="Gallery">Galeri</string>
|
||||
<string name="AllPhotos">Krejt Fotot</string>
|
||||
<string name="AllVideo">Krejt Videot</string>
|
||||
<string name="NoPhotos">Ende pa foto</string>
|
||||
<string name="NoVideo">Ende pa video</string>
|
||||
<string name="CropImage">Qetheni figurën</string>
|
||||
<string name="EditImage">Përpunoni figurën</string>
|
||||
<string name="Enhance">Përmirësoje</string>
|
||||
<string name="Highlights">Theksime</string>
|
||||
<string name="Contrast">Kontrast</string>
|
||||
<string name="Exposure">Ekspozim</string>
|
||||
<string name="Warmth">Ngrohtësi</string>
|
||||
<string name="Saturation">Ngopje</string>
|
||||
<string name="Shadows">Hij</string>
|
||||
<string name="Sharpen">Mprehe</string>
|
||||
<string name="Fade">Zbehe</string>
|
||||
<string name="Tint">Ngjyrosje</string>
|
||||
<string name="TintShadows">Hije</string>
|
||||
<string name="TintHighlights">Theksime</string>
|
||||
<string name="Curves">Kurba</string>
|
||||
<string name="CurvesAll">Krejt</string>
|
||||
<string name="CurvesRed">E kuqe</string>
|
||||
<string name="CurvesGreen">E gjelbër</string>
|
||||
<string name="CurvesBlue">Blu</string>
|
||||
<string name="BlurOff">Off</string>
|
||||
<string name="BlurLinear">Lineare</string>
|
||||
<string name="BlurRadial">Radiale</string>
|
||||
<string name="DiscardChanges">Të hidhen tej ndryshimet></string>
|
||||
<string name="ClearButton">Pastroje</string>
|
||||
<string name="PickerPhotos">Foto</string>
|
||||
<string name="PickerVideo">Video</string>
|
||||
<!--privacy settings-->
|
||||
<string name="PrivacySettings">Privatësi dhe siguri</string>
|
||||
<string name="SecurityTitle">Siguri</string>
|
||||
<!--edit video view-->
|
||||
<string name="SendVideo">Dërgoni Video</string>
|
||||
<!--button titles-->
|
||||
<string name="Done">U bë</string>
|
||||
<string name="Open">Hape</string>
|
||||
<string name="Cancel">Anuloje</string>
|
||||
<string name="Edit">Përpunoni</string>
|
||||
<string name="Send">Dërgoje</string>
|
||||
<string name="CopyToClipboard">Kopjoje në të papastër</string>
|
||||
<string name="Delete">Fshije</string>
|
||||
<string name="Forward">Përcille</string>
|
||||
<string name="FromCamera">Prej kamerës</string>
|
||||
<string name="FromGalley">Nga \"Galeri\"</string>
|
||||
<string name="OK">OK</string>
|
||||
<string name="Crop">Qethe</string>
|
||||
<!--messages-->
|
||||
<string name="AttachPhoto">Foto</string>
|
||||
<string name="AttachVideo">Video</string>
|
||||
<string name="AttachGif">GIF</string>
|
||||
<string name="AttachContact">Kontakt</string>
|
||||
<string name="AttachDocument">Kartelë</string>
|
||||
<string name="AttachVoiceMessage">Mesazh zanor</string>
|
||||
<string name="FromSelf">Unë</string>
|
||||
<!--Alert messages-->
|
||||
<string name="NoHandleAppInstalled">Asnjë aplikacion nga të instaluarit s\’e hap dot llojin \'%1$s\' e kartelave, ju lutemi, që të vazhdohet, instaloni një të tillë.</string>
|
||||
<string name="ContactAlreadyInGroup">Kontakti gjendet tashmë në këtë grup.</string>
|
||||
<string name="ForwardMessagesTo">Përcillja mesazhet e përzgjedhur <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
|
||||
<string name="SendMessagesTo">Të dërgohen mesazhet te <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>?</string>
|
||||
<string name="AreYouSureDeleteThisChat">Të fshihet kjo bisedë? S\’do të shfaqet më te lista e bisedave, mesazhet e saj do të mbeten në shërbyes.</string>
|
||||
<string name="AreYouSureBlockContact">Jeni i sigurt se doni ta bllokoni këtë kontakt?</string>
|
||||
<string name="AreYouSureDeleteContact">Jeni i sigurt se doni ta fshini këtë kontakt?</string>
|
||||
<!--permissions-->
|
||||
<string name="PermissionContacts">Lypset hyrje te kontaktet për t’ju lidhur me shokët tuaj nga cilado pajisje juaj.</string>
|
||||
<string name="PermissionStorage">Për dërgim dhe ruajte fotosh, videosh, muzike dhe media të tjera, lypset hyrje te depozita.</string>
|
||||
<string name="PermissionNoAudio">Për dërgim mesazhesh zanorë, lypset hyrje te mikrofoni.</string>
|
||||
<string name="PermissionOpenSettings">Rregullime</string>
|
||||
<!--Intro view-->
|
||||
<string name="Intro1Headline">Fjalosje Delta</string>
|
||||
<string name="Intro1Message">Lajmëtari me <![CDATA[<b>publikun më të gjerë</b>]]> në botë.<![CDATA[<br/><b>I lirë</b>]]> dhe <![CDATA[<b>i pavarur</b>]]>.</string>
|
||||
|
||||
<string name="Intro2Headline">I pavarur</string>
|
||||
<string name="Intro2Message"><![CDATA[<b>I pavarur</b>]]> nga kompjutera apo shërbime të huaja. Aplikacioni përdor vetëm shërbyesin tuaj të email-eve.</string>
|
||||
|
||||
<string name="Intro3Headline">I shpejtë</string>
|
||||
<string name="Intro3Message"><![CDATA[<b>Dërgim mesazhesh</b>]]> brenda pak sekondash.<![CDATA[<br/>]]>Ndërfaqe e shpejtë.</string>
|
||||
|
||||
<string name="Intro4Headline">I fuqishëm</string>
|
||||
<string name="Intro4Message">Fjalosje, figura, video, mesazhe audio, etj <![CDATA[<b>Pa kufi</b>]]>. I aftë për punë me shumë klientë.</string>
|
||||
|
||||
<string name="Intro5Headline">I lirë</string>
|
||||
<string name="Intro5Message"><![CDATA[<b>Delta Chat</b>]]> është i lirë, përgjithmonë.<![CDATA[<br/>]]>Me burim të hapët. Pa reklama. Pa pajtime. Pa kyçje brenda një platforme nga tregtues.</string>
|
||||
|
||||
<string name="Intro6Headline">I fshehtëzuar</string>
|
||||
<string name="Intro6Message"><![CDATA[<b>I fshehtëzuar</b>]]> me krejt algoritmet e zakonshëm. Mesazhet mbeten në shërbyesit tuaj.</string>
|
||||
|
||||
<string name="Intro7Headline">I besueshëm</string>
|
||||
|
||||
<string name="IntroStartMessaging">Filloni të Shkëmbeni Mesazhe</string>
|
||||
<!--plural-->
|
||||
<plurals name="Members">
|
||||
<item quantity="one">%d anëtar</item>
|
||||
<item quantity="other">%d anëtarë</item>
|
||||
</plurals>
|
||||
<plurals name="Contacts">
|
||||
<item quantity="one">%d kontakte</item>
|
||||
<item quantity="other">%d kontakte</item>
|
||||
</plurals>
|
||||
<plurals name="MeAndMembers">
|
||||
<item quantity="one">%d anëtar dhe unë</item>
|
||||
<item quantity="other">%d anëtarë dhe unë</item>
|
||||
</plurals>
|
||||
<plurals name="NewMessages">
|
||||
<item quantity="one">%d mesazh i ri</item>
|
||||
<item quantity="other">%d mesazhe të rinj</item>
|
||||
</plurals>
|
||||
<plurals name="messages">
|
||||
<item quantity="one">%d mesazh</item>
|
||||
<item quantity="other">%d mesazhe</item>
|
||||
</plurals>
|
||||
<plurals name="AreYouSureDeleteMessages">
|
||||
<item quantity="one">Të fshihen %d mesazh? Do të fshihet edhe nga shërbyesi.</item>
|
||||
<item quantity="other">Të fshihen %d mesazhe? Këta do të fshihen edhe nga shërbyesi.</item>
|
||||
</plurals>
|
||||
<plurals name="NewMessagesInChats">
|
||||
<item quantity="one">%1$s në %2$d fjalosje</item>
|
||||
<item quantity="other">%1$s në %2$d fjalosje</item>
|
||||
</plurals>
|
||||
<plurals name="Chats">
|
||||
<item quantity="one">%d fjalosje</item>
|
||||
<item quantity="other">%d fjalosje</item>
|
||||
</plurals>
|
||||
<plurals name="Minutes">
|
||||
<item quantity="one">%d minutë</item>
|
||||
<item quantity="other">%d minuta</item>
|
||||
</plurals>
|
||||
<plurals name="Hours">
|
||||
<item quantity="one">%d orë</item>
|
||||
<item quantity="other">%d orë</item>
|
||||
</plurals>
|
||||
<plurals name="Days">
|
||||
<item quantity="one">%d ditë</item>
|
||||
<item quantity="other">%d ditë</item>
|
||||
</plurals>
|
||||
<plurals name="Weeks">
|
||||
<item quantity="one">%d javë</item>
|
||||
<item quantity="other">%d javë</item>
|
||||
</plurals>
|
||||
<plurals name="Months">
|
||||
<item quantity="one">%d muaj</item>
|
||||
<item quantity="other">%d muaj</item>
|
||||
</plurals>
|
||||
<plurals name="MaxNotifications">
|
||||
<item quantity="one">E shumta %1$d njoftime brenda %2$s</item>
|
||||
<item quantity="other">E shumta %1$d njoftime brenda %2$s</item>
|
||||
</plurals>
|
||||
<!--date formatters-->
|
||||
<string name="formatterMonthYear">MMMM yyyy</string>
|
||||
<string name="formatterMonth">dd MMM</string>
|
||||
<string name="formatterYear">dd.MM.yyyy</string>
|
||||
<string name="chatDate">EEE, d MMMM</string>
|
||||
<string name="chatFullDate">EEE, d MMMM, yyyy</string>
|
||||
<string name="formatterWeek">EEE</string>
|
||||
<string name="formatterDay24H">HH:mm</string>
|
||||
<string name="formatterDay12H">h:mm a</string>
|
||||
<string name="AccountSettings">Rregullime llogarie</string>
|
||||
<string name="MyAccount">Llogaria ime</string>
|
||||
<string name="MyName">Emri im</string>
|
||||
<string name="MyNameExplain">Emri juaj, si u shfaqet marrësve. Në u lëntë i zbrazët, do të dërgohet vetëm adresa juaj email.</string>
|
||||
<string name="Password">Fjalëkalim</string>
|
||||
<string name="SmtpPassword">Fjalëkalim SMTP</string>
|
||||
<string name="FromAbove">Nga sipër</string>
|
||||
<string name="SmtpLoginname">Emër hyrjeje për SMTP</string>
|
||||
<string name="SmtpPort">Portë SMTP</string>
|
||||
<string name="Automatic">Automatike</string>
|
||||
<string name="ImapServer">Shërbyes IMAP</string>
|
||||
<string name="ImapLoginname">Emër hyrjeje për IMAP</string>
|
||||
<string name="SmtpServer">Shërbyes SMTP</string>
|
||||
<string name="ImapPort">Portë IMAP</string>
|
||||
<string name="InboxHeadline">Të marrë</string>
|
||||
<string name="OutboxHeadline">Të dërguar</string>
|
||||
<string name="MyAccountExplain">Për furnizues të njohur shërbimesh email, rregullimet shtesë përcaktohen vetvetiu.</string>
|
||||
<string name="MyAccountExplain2" >Ndonjëherë, <![CDATA[<b>]]>IMAP lypset të aktivizohet<![CDATA[</b>]]> te pjesa e dukshme e sistemit email web.\n\nNëse hasni probleme, këshillohuni me furnizuesin e email-it ose me shokë tuajt.</string>
|
||||
<string name="AccountNotConfigured">Llogari e paformësuar</string>
|
||||
<string name="AboutThisProgram">Mbi Delta Chat-in</string>
|
||||
<string name="NotSet">E papërcaktuar</string>
|
||||
<string name="NewChat">Fjalosje e re</string>
|
||||
<string name="Deaddrop">Kërkesa kontakti</string>
|
||||
<string name="DeaddropInChatlist">Shfaq te listë fjalosjesh kërkesa kontakti</string>
|
||||
<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>
|
||||
<string name="DefaultStatusText">Dërguar me Lajmëtarin tim Delta Chat: https://delta.chat</string>
|
||||
<string name="Name" >Emër</string>
|
||||
<string name="EmailAddress">Adresë email</string>
|
||||
<string name="CannotDeleteContact">S’fshihen dot kontakte në përdorim, në vend të kësaj bëni bllokim kontakti.</string>
|
||||
<string name="BadEmailAddress">Adresë email e gabuar</string>
|
||||
<string name="ContactCreated">Kontakti u krijua</string>
|
||||
<string name="ViewProfile">Shihni profilin</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">Një sekondë…</string>
|
||||
<string name="NoChatsHelp">Nisni të shkëmbeni mesazhe duke shtypur butonin \"Fjalosje e re\" poshtë djathtas, ose prekni butonin \"Menu\" për më tepër mundësi.</string>
|
||||
<string name="Intro7Message"><![CDATA[<b>Delta Chat</b>]]> është i parrezik për përdorim në biznes, i përputhshëm dhe i bazuar në standarde.</string>
|
||||
<string name="InviteMenuEntry">Dërgoni ftesa</string>
|
||||
<string name="InviteText">Tani përdor Delta Chat-in - %1$s - mund të dërgoni mesazh te %2$s</string>
|
||||
<string name="AdvancedSettings">Rregullime të mëtejshme</string>
|
||||
<string name="AskResetNotifications">Të kthehen te parazgjedhjet krejt rregullimet mbi njoftime dhe tinguj për faqen e tanishme, kontaktet dhe grupet?</string>
|
||||
<string name="AttachFiles">Bashkëngjitni kartela</string>
|
||||
<string name="ErrGroupNameEmpty">Ju lutemi, jepni një emër për grupin.</string>
|
||||
<string name="MsgNewGroupDraftHint">Hartoni mesazhin e parë, duke u lejuar të tjerëve të përgjigjen brenda këtij grupi.\n\n• S\’ka problem që Delta Chat-in s\’e përdorin tërë anëtarët.\n\n• Dërgimi i mesazhit të parë mund të dojë pak kohë.</string>
|
||||
<string name="MsgNewGroupDraft">Tungjatjeta, sapo krijova grupin \"%1$s\" për ne.</string>
|
||||
<string name="MsgGroupNameChanged">Emri i grupit ndryshoi nga \"%1$s\" në \"%2$s\".</string>
|
||||
<string name="MsgGroupImageChanged">Figura e grupit ndryshoi.</string>
|
||||
<string name="MsgMemberAddedToGroup">U shtua anëtari %1$s.</string>
|
||||
<string name="MsgMemberRemovedFromToGroup">U hoq anëtari %1$s.</string>
|
||||
<string name="AskAddMemberToGroup">Të shtohet <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> te grupi?</string>
|
||||
<string name="AskRemoveMemberFromGroup">Të hiqet <![CDATA[<b>]]>%1$s<![CDATA[</b>]]> nga grupi?</string>
|
||||
<string name="ErrSelfNotInGroup">Që të kryeni këtë veprim, duhet të jeni një anëtar i grupit.</string>
|
||||
<string name="MsgGroupLeft">Grupi u la.</string>
|
||||
<string name="NoMessagesHint">Dërgoje mesazhin te <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>:\n\n• S\’ka problem nëse <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> nuk përdor Delta Chat-in.\n\n• Dërgimi i mesazhit të parë mund të dojë pak kohë.</string>
|
||||
<string name="SendNRcvReadReceipts">Merrni dhe dërgoni fatura kthimesh</string>
|
||||
<string name="PreferE2EEncryption">Parapëlqe fshehtëzim skaj-më-skaj</string>
|
||||
<string name="E2EManagePrivateKeys">Administroni kyçe privatë</string>
|
||||
<string name="E2ECompareKeys">Krahasoni kyçe</string>
|
||||
<string name="ForwardToTitle">Përcille te…</string>
|
||||
<string name="SelectContact">Zgjidhni një kontakt</string>
|
||||
<string name="DoneHint">U bë.</string>
|
||||
<string name="FileNotFound">S’u gjet dot %1$s.</string>
|
||||
<string name="Error">Gabim: %1$s</string>
|
||||
<string name="NoNetwork">Rrjet i pakapshëm.</string>
|
||||
<string name="Audio">Audio</string>
|
||||
<string name="PleaseCutVideoToMaxSize">Ju lutemi, prijeni videon në një madhësi më të vogël se %1$s.</string>
|
||||
<string name="PermNotificationTitle">I lidhur te %1$s</string>
|
||||
<string name="PermNotificationText">Po pritet për mesazhe…</string>
|
||||
<string name="SettingsFor">Rregullime për %1$s</string>
|
||||
<string name="AutoplayGifs">Vetëluaji GIF-et</string>
|
||||
<string name="HelpUrl">https://delta.chat/en/help</string>
|
||||
<string name="EncryptedMessage">Mesazh i fshehtëzuar</string>
|
||||
<string name="Encryption">Fshehtëzim</string>
|
||||
<string name="EncrinfoE2E">U aktivizua fshehtëzimi skaj-më-skaj.</string>
|
||||
<string name="EncrinfoE2EExplain">Nëse te pajisja tjetër përputhen krejt shenjat e gishtave, lidhja është e parrezik.</string>
|
||||
<string name="EncrinfoTransport">Shpërngulje-fshehtëzim të paktën deri te shërbyesi im.</string>
|
||||
<string name="EncrinfoNone">Pa fshehtëzim te shërbyesi im.</string>
|
||||
<string name="EncrinfoNoE2EExplain">Fshehtëzimi skaj-më-skaj do të përdoret kur edhe nga marrësi përdoret Delta Chat ose tjetër aplikacion Autocrypt.</string>
|
||||
<string name="EncrinfoFingerprints">Shenja gishtash</string>
|
||||
<string name="Backup">Kopjeruajtje</string>
|
||||
<string name="ImportBackupExplain2">Që të importohet një kopjeruajtje, kopjojeni kopjeruajtjen te <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> dhe ri-instaloni aplikacionin.</string>
|
||||
<string name="ReadReceiptMailBody">Kjo është një faturë kthimi për mesazhin \"%1$s\".\n\nKjo faturë kthimi dëshmon vetëm se mesazhi u shfaq te pajisja e marrësit. S\’ka garanci që marrësi ta ketë lexuar lëndën e mesazhit.</string>
|
||||
<string name="ReadReceipt">Faturë kthimi</string>
|
||||
<string name="NameAndStatus">Emër dhe gjendje</string>
|
||||
<string name="MyStatus">Gjendja ime</string>
|
||||
<string name="MyStatusExplain">Veç vendesh të tjera, gjendja tregohet edhe te poshtëshënime email-esh.</string>
|
||||
<string name="MsgGroupImageDeleted">Figura e grupit u fshi.</string>
|
||||
<string name="AskDeleteGroupImage">Jeni të sigurt se doni të fshihet figura e grupit?\n\nKjo do të prekë krejt pajisjet e krejt anëtarëve të grupit.</string>
|
||||
<string name="ExportImportHeader">Eksportim dhe importim</string>
|
||||
<string name="ImportExportExplain">Kartelat e eksportuara do të përmbajnë kyçe private! Mbajini në një vend të parrezik, ose fshijini sa më shpejt të jetë e mundur.</string>
|
||||
<string name="EnterPasswordToContinue">Që të vazhdohet, jepni fjalëkalimin për %1$s:</string>
|
||||
<string name="IncorrectPassword">Fjalëkalim i pasaktë.</string>
|
||||
<string name="ImportBackupAsk">U gjet kopjeruajtje te <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.\n\nDoni të importohet dhe të përdoren krejt të dhënat dhe rregullimet prej saj?</string>
|
||||
<string name="ImportBackup">Importoje kopjeruajtjen</string>
|
||||
<string name="NoBackupFound">S\’u gjetën kopjeruajtje.\n\nKopjojeni kopjeruajtjen te <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> dhe riprovoni. Ose, shtypni \"Nisni të shkëmbeni mesazhe\" që të ecni sipas procesit normal të rregullimit.</string>
|
||||
<string name="FilesSuccessfullyExported">Kartelat u eksportuan te <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
|
||||
<string name="ExportBackup">Eksporto kopjeruajtje</string>
|
||||
<string name="ExportPrivateKeys">Eksporto kyçe private</string>
|
||||
<string name="ImportPrivateKeys">Importo kyçe private</string>
|
||||
<string name="ImportPrivateKeysAsk2">Të importohen kyçe privatë prej <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Kyçet private ekzistuese nuk do të fshihen\n\n• Si kyç i ri parazgjedhje do të përdoret kyçi i fundit i importuar</string>
|
||||
<string name="NoRecentEmoji">Këtu do të shfaqen emoji-t e përdorura së fundi.</string>
|
||||
<string name="E2eeOffBecauseOfUser">Për aktivizim të fshehtëzimit skaj-më-skaj, i vini shenjë mundësisë përkatëse te rregullimet tuaja.</string>
|
||||
<string name="E2eeOffBecauseOfRecipient">Fshehtëzimi skaj-më-skaj do të përdoret nëse e aktivizon edhe pala tjetër.</string>
|
||||
<string name="NotNow">Jo tani</string>
|
||||
<string name="ArchiveChat">Arkivoje bisedën</string>
|
||||
<string name="UnarchiveChat">Çarkivoje bisedën</string>
|
||||
<string name="ArchivedChats">Biseda të arkivuara</string>
|
||||
<string name="Archived">E arkivuar</string>
|
||||
<string name="LeaveGroup">Braktiseni grupin</string>
|
||||
<string name="AskLeaveGroup">Jeni i sigurt se doni ta braktisni grupin?</string>
|
||||
<string name="Never">Kurrë</string>
|
||||
</resources>
|
||||
@@ -39,10 +39,15 @@
|
||||
<string name="SaveToMusic">Müziğe kaydet</string>
|
||||
<string name="Share">Paylaş</string>
|
||||
<string name="SendItems">%1$sgönder</string>
|
||||
<string name="ClearRecentEmoji">En son duygu simgeleri temizlensin mi?</string>
|
||||
<string name="AddShortcut">Ana ekrana gereç ekleme</string>
|
||||
<string name="ShortcutAdded">Gereç ana ekrana eklendi</string>
|
||||
<!--notification-->
|
||||
<string name="Reply">Yanıtlama</string>
|
||||
<string name="ReplyToGroup">%1$se yanıt ver</string>
|
||||
<string name="ReplyToContact">%1$se yanıt ver</string>
|
||||
<!--contacts view-->
|
||||
<string name="NoContacts">Henüz kişi yok.</string>
|
||||
<string name="EnterGroupNamePlaceholder">Grup adı girin</string>
|
||||
<!--group info view-->
|
||||
<string name="AddMember">Üye ekle</string>
|
||||
@@ -84,6 +89,7 @@
|
||||
<string name="NotificationsOther">Diğer</string>
|
||||
<string name="SmartNotifications">Sınır bildirimleri</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-->
|
||||
<string name="CacheSettings">Depolama</string>
|
||||
<string name="KeepMedia">Ortamı tut</string>
|
||||
@@ -122,8 +128,8 @@
|
||||
<string name="Shadows">Gölgeler</string>
|
||||
<string name="Sharpen">Keskinleştirme</string>
|
||||
<string name="Fade">Soldurma</string>
|
||||
<string name="TintShadows">GÖLGELER</string>
|
||||
<string name="TintHighlights">VURGULAMALAR</string>
|
||||
<string name="TintShadows">Gölgeler</string>
|
||||
<string name="TintHighlights">Vurgulamalar</string>
|
||||
<string name="Curves">Eğriler</string>
|
||||
<string name="CurvesAll">HEPSİ</string>
|
||||
<string name="CurvesRed">KIRMIZI</string>
|
||||
@@ -162,13 +168,26 @@
|
||||
<string name="AttachVoiceMessage">Sesli ileti</string>
|
||||
<string name="AreYouSureBlockContact">Bu kişiyi engellemek istediğinizden emin misiniz?</string>
|
||||
<string name="AreYouSureDeleteContact">Bu kişiyi silmek istediğizden emin misiniz?</string>
|
||||
<string name="PermissionOpenSettings">Ayarları değiştir</string>
|
||||
<string name="PermissionOpenSettings">Ayarlar</string>
|
||||
<!--Intro view-->
|
||||
<string name="Intro1Headline">Delta Chat</string>
|
||||
<string name="Intro2Headline">Bağımsız</string>
|
||||
<string name="Intro3Headline">Hızlı</string>
|
||||
<string name="Intro4Headline">Muhteşem</string>
|
||||
<string name="Intro6Headline">Güvenli</string>
|
||||
<!--plural-->
|
||||
<plurals name="Members">
|
||||
<item quantity="one">%düye</item>
|
||||
<item quantity="other">%d üye</item>
|
||||
</plurals>
|
||||
<plurals name="Contacts">
|
||||
<item quantity="one">%d kişi</item>
|
||||
<item quantity="other">%d kişi</item>
|
||||
</plurals>
|
||||
<plurals name="MeAndMembers">
|
||||
<item quantity="one">%d üye ve ben</item>
|
||||
<item quantity="other">%d üye ve ben</item>
|
||||
</plurals>
|
||||
<plurals name="NewMessages">
|
||||
<item quantity="one">%d yeni ileti</item>
|
||||
<item quantity="other">%dyeni ileti</item>
|
||||
@@ -189,8 +208,20 @@
|
||||
<item quantity="one">%d saat</item>
|
||||
<item quantity="other">%d saat</item>
|
||||
</plurals>
|
||||
<string name="formatterYear">dd.MM.yyyy</string>
|
||||
<string name="formatterDay24H">HH:mm</string>
|
||||
<plurals name="Days">
|
||||
<item quantity="one">%d gün</item>
|
||||
<item quantity="other">%d gün</item>
|
||||
</plurals>
|
||||
<plurals name="Weeks">
|
||||
<item quantity="one">%d hafta</item>
|
||||
<item quantity="other">%d hafta</item>
|
||||
</plurals>
|
||||
<plurals name="Months">
|
||||
<item quantity="one">%d ay</item>
|
||||
<item quantity="other">%d ay</item>
|
||||
</plurals>
|
||||
<string name="formatterYear">gg.AA.yyyy</string>
|
||||
<string name="formatterDay24H">SS:dd</string>
|
||||
<string name="AccountSettings">Hesap ayarları</string>
|
||||
<string name="MyAccount">Hesabım</string>
|
||||
<string name="MyName">Adım</string>
|
||||
@@ -221,9 +252,11 @@
|
||||
<string name="MsgMemberAddedToGroup">%1$s üye eklendi</string>
|
||||
<string name="MsgMemberRemovedFromToGroup">%1$s üye silindi.</string>
|
||||
<string name="E2ECompareKeys">Anahtarları karşılaştır</string>
|
||||
<string name="SelectContact">Bir kişi seçin</string>
|
||||
<string name="DoneHint">Tamam.</string>
|
||||
<string name="NoNetwork">Ağ kullanılamıyor.</string>
|
||||
<string name="Audio">Ses</string>
|
||||
<string name="PermNotificationText">İletiler bekliyor ...</string>
|
||||
<string name="SettingsFor">%1$siçin ayarlar</string>
|
||||
<string name="AutoplayGifs">GİFleri otomatik oynat</string>
|
||||
<string name="HelpUrl">https://delta.chat/en/help</string>
|
||||
@@ -236,4 +269,14 @@
|
||||
<string name="MsgGroupImageDeleted">Grup resmi silindi</string>
|
||||
<string name="ExportImportHeader">Dışa aktarım ve içe aktarım</string>
|
||||
<string name="IncorrectPassword">Geçersiz parola</string>
|
||||
<string name="ImportBackup">Yedeklemeyi içe aktar</string>
|
||||
<string name="ExportBackup">Yedeklemeyi dışa aktar</string>
|
||||
<string name="ExportPrivateKeys">Özel anahtarları dışa aktar</string>
|
||||
<string name="ImportPrivateKeys">Özel anahtarları içe aktar</string>
|
||||
<string name="NoRecentEmoji">Son kullanılan duygu simgeleri burada gösterilecek.</string>
|
||||
<string name="NotNow">Şimdi değil</string>
|
||||
<string name="ArchivedChats">Arşivlenmiş söyleşiler</string>
|
||||
<string name="Archived">Arşivlenmiş</string>
|
||||
<string name="LeaveGroup">Gruptan ayrıl</string>
|
||||
<string name="Never">Asla</string>
|
||||
</resources>
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
<string name="NoRecent">No recent</string>
|
||||
<string name="TypeMessage">Message</string>
|
||||
<string name="SlideToCancel">Slide to cancel</string>
|
||||
<string name="SaveToDownloads">Save to \"Downloads"\</string>
|
||||
<string name="SaveToMusic">Save to "\Music"\</string>
|
||||
<string name="SaveToDownloads">Save to \"Downloads\"</string>
|
||||
<string name="SaveToMusic">Save to \"Music\"</string>
|
||||
<string name="Share">Share</string>
|
||||
<string name="SendItems">Send %1$s</string>
|
||||
<string name="ClearRecentEmoji">Clear recent emoji?</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 Enter key</string>
|
||||
<string name="Help">Help</string>
|
||||
<string name="Enabled">On</string>
|
||||
<string name="Disabled">Off</string>
|
||||
@@ -339,7 +339,7 @@
|
||||
<!-- 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">One moment …</string>
|
||||
<string name="NoChatsHelp">Start messaging by pressing the \"New chat"\ button in the bottom right, or tap the \"Menu"\ button for more options.</string>
|
||||
<string name="NoChatsHelp">Start messaging by pressing the \"New chat\" button in the bottom right, or tap the \"Menu\" button for more options.</string>
|
||||
<string name="Intro7Message"><![CDATA[<b>Delta Chat</b>]]> is safe for business use, compatible and standards-based.</string>
|
||||
<string name="InviteMenuEntry">Send invitations</string>
|
||||
<string name="InviteText">I\'m using Delta Chat messenger now - %1$s - you can text me at %2$s</string>
|
||||
@@ -360,7 +360,7 @@
|
||||
<string name="NoMessagesHint">Send message to <![CDATA[<b>]]>%1$s<![CDATA[</b>]]>:\n\n• It is okay if <![CDATA[<b>]]>%2$s<![CDATA[</b>]]> does not use Delta Chat.\n\n• Delivering the first message may take a while.</string>
|
||||
<string name="SendNRcvReadReceipts">Receive and send return receipts</string>
|
||||
<string name="PreferE2EEncryption">Prefer end-to-end encryption</string>
|
||||
<string name="E2EManagePrivateKeys">Manage private keys</string>
|
||||
<string name="E2EManagePrivateKeys">Manage secret keys</string>
|
||||
<string name="E2ECompareKeys">Compare keys</string>
|
||||
<string name="ForwardToTitle">Forward to …</string>
|
||||
<string name="SelectContact">Choose a contact</string>
|
||||
@@ -393,7 +393,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 private keys! Keep them in a safe place or delete them as soon as possible.</string>
|
||||
<string name="ImportExportExplain">Exported files will contain secret keys! 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>
|
||||
@@ -401,12 +401,12 @@
|
||||
<string name="NoBackupFound">No backups found.\n\nCopy the backup to <![CDATA[<i>]]>%1$s<![CDATA[</i>]]> and try again. Alternatively, press \"Start messaging\" to go with the normal setup process.</string>
|
||||
<string name="FilesSuccessfullyExported">Files exported to <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>.</string>
|
||||
<string name="ExportBackup">Export backup</string>
|
||||
<string name="ExportPrivateKeys">Export private keys</string>
|
||||
<string name="ImportPrivateKeys">Import private keys</string>
|
||||
<string name="ImportPrivateKeysAsk2">Import private keys from <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Existing private keys will not be deleted\n\n• The last imported key will be used as the new default key</string>
|
||||
<string name="ExportPrivateKeys">Export secret keys</string>
|
||||
<string name="ImportPrivateKeys">Import secret keys</string>
|
||||
<string name="ImportPrivateKeysAsk2">Import secret keys from <![CDATA[<i>]]>%1$s<![CDATA[</i>]]>?\n\n• Existing secret keys will not be deleted\n\n• The last imported key will be used as the new default key</string>
|
||||
<string name="NoRecentEmoji">Recently used emoji will be shown here.</string>
|
||||
<string name="E2eeOffBecauseOfUser">To enable end-to-end-encryption, check the corresponding option in your settings.</string>
|
||||
<string name="E2eeOffBecauseOfRecipient">>End-to-end encryption will be employed if the other party enables the setting too.</string>
|
||||
<string name="E2eeOffBecauseOfRecipient">End-to-end encryption will be employed if the other party enables the setting too.</string>
|
||||
<string name="NotNow">Not now</string>
|
||||
<string name="ArchiveChat">Archive chat</string>
|
||||
<string name="UnarchiveChat">Unarchive chat</string>
|
||||
@@ -415,4 +415,16 @@
|
||||
<string name="LeaveGroup">Leave group</string>
|
||||
<string name="AskLeaveGroup">Are you sure you want to leave this group?</string>
|
||||
<string name="Never">Never</string>
|
||||
<string name="AutocryptKeyTransferInitiate">Initiate Autocrypt Key Transfer</string>
|
||||
<string name="AutocryptKeyTransfer">Autocrypt Key Transfer</string>
|
||||
<string name="AutocryptKeyTransferMsgBeforeSend">The <![CDATA[<i>]]>Autocrypt Key Transfer<![CDATA[</i>]]> requires that the mail client on the other device is Autocrypt-compliant.\n\nYou can then send your secret key to yourself. The key will be encrypted by a setup code which is displayed here and must be typed on the other device.</string>
|
||||
<string name="AutocryptKeyTransferMsgAfterSend">Your key 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 key between clients.\n\nTo decrypt and use your key, open the message in an Autocrypt-compliant client and enter the setup code presented on the generating device.</string>
|
||||
<string name="AutocryptSetupMessageTapBody">This is the Autocrypt Setup Message used to transfer your key between clients.\n\nTo decrypt and use your key, tap on this message.</string>
|
||||
<string name="AutocryptKeyTransferPleaseEnterCode">Please enter the setup code that is displayed on the other device.</string>
|
||||
<string name="AutocryptKeyTransferBadCode">Bad setup code. Please try again.\n\nIf you do not remember the setup code, just initiate the key transfer on the other device again.</string>
|
||||
<string name="AutocryptKeyTransferSucceeded">Key transferred successfully. This device is now ready to use Autocrypt with the same key as the other device.</string>
|
||||
<string name="Retry">Retry</string>
|
||||
<string name="SelfTalkSubtitle">Messages I sent to myself</string>
|
||||
</resources>
|
||||
|
||||
+1
-1
@@ -5,6 +5,6 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.3.3'
|
||||
classpath 'com.android.tools.build:gradle:3.0.1'
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
#Fri Mar 03 14:17:13 CET 2017
|
||||
#Thu Dec 14 21:54:25 CET 2017
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
|
||||
|
||||
+23
-5
@@ -1,20 +1,38 @@
|
||||
|
||||
The following checklists are there not to forget things ... to be continued.
|
||||
|
||||
# Add Release on F-Droid
|
||||
|
||||
1. deltachat-core: "draft a new release", if required
|
||||
2. deltachat-android: check CHANGES.md against core and android commit list from last release
|
||||
3. deltachat-android: `$ ./update-core.sh` followed by a `git push`
|
||||
4. deltachat-android: "Draft a new release" using a version number in for Form v1.2.3
|
||||
# Release new Core version
|
||||
|
||||
1. deltachat-core: bump version, commit, push
|
||||
2. deltachat-core on Github: "Draft a new release" with the version form `v1.2.3`
|
||||
|
||||
|
||||
# Release new Android version
|
||||
|
||||
Release core, if needed, then:
|
||||
|
||||
1. deltachat-android: check CHANGLOG.md, commit, push
|
||||
2. deltachat-android/tools: `$ ./update-core.sh`, push
|
||||
3. deltachat-android/tools: `$ ./txpull`, if there are changes: commit, push
|
||||
4. deltachat-android: bump version, commit, push
|
||||
5. deltachat-android on Github: "Draft a new release" with the version form `v1.2.3`
|
||||
|
||||
... some days later, F-Droid should be updated.
|
||||
|
||||
For an additional APK:
|
||||
|
||||
6. in Android Studio select "Build / Build APK"
|
||||
7. rename the generated APK to `deltachat-v1.2.3.apk`
|
||||
8. upload the APK to the created Github release
|
||||
|
||||
|
||||
# Add language
|
||||
|
||||
1. add `MessengerProj/src/main/res/values-<LANG>/strings.xml`
|
||||
2. add copy command to `tools/txpull.sh` and `tools/txpush.sh`
|
||||
|
||||
|
||||
# Update source languges on Transifex
|
||||
|
||||
1. call `./txpull` to overwrite local translation files with the ones from Transifex, the source is not updated
|
||||
|
||||
@@ -21,6 +21,7 @@ cp "${TXPREFIX}nl.xml" "${SRCPREFIX}-nl/strings.xml"
|
||||
cp "${TXPREFIX}pl.xml" "${SRCPREFIX}-pl/strings.xml"
|
||||
cp "${TXPREFIX}pt.xml" "${SRCPREFIX}-pt/strings.xml"
|
||||
cp "${TXPREFIX}ru.xml" "${SRCPREFIX}-ru/strings.xml"
|
||||
cp "${TXPREFIX}sq.xml" "${SRCPREFIX}-sq/strings.xml"
|
||||
cp "${TXPREFIX}sr.xml" "${SRCPREFIX}-sr/strings.xml"
|
||||
cp "${TXPREFIX}ta.xml" "${SRCPREFIX}-ta/strings.xml"
|
||||
cp "${TXPREFIX}te.xml" "${SRCPREFIX}-te/strings.xml"
|
||||
|
||||
@@ -27,6 +27,7 @@ cp "${SRCPREFIX}-nl/strings.xml" "${TXPREFIX}nl.xml"
|
||||
cp "${SRCPREFIX}-pl/strings.xml" "${TXPREFIX}pl.xml"
|
||||
cp "${SRCPREFIX}-pt/strings.xml" "${TXPREFIX}pt.xml"
|
||||
cp "${SRCPREFIX}-ru/strings.xml" "${TXPREFIX}ru.xml"
|
||||
cp "${SRCPREFIX}-sq/strings.xml" "${TXPREFIX}sq.xml"
|
||||
cp "${SRCPREFIX}-sr/strings.xml" "${TXPREFIX}sr.xml"
|
||||
cp "${SRCPREFIX}-ta/strings.xml" "${TXPREFIX}ta.xml"
|
||||
cp "${SRCPREFIX}-te/strings.xml" "${TXPREFIX}te.xml"
|
||||
|
||||
Reference in New Issue
Block a user