aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md5
-rw-r--r--src/main/java/eu/siacs/conversations/crypto/OtrEngine.java2
-rw-r--r--src/main/java/eu/siacs/conversations/generator/MessageGenerator.java1
-rw-r--r--src/main/java/eu/siacs/conversations/parser/MessageParser.java40
-rw-r--r--src/main/java/eu/siacs/conversations/persistance/FileBackend.java138
-rw-r--r--src/main/java/eu/siacs/conversations/services/XmppConnectionService.java28
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationActivity.java8
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationFragment.java28
-rw-r--r--src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java2
-rw-r--r--src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java3
-rw-r--r--src/main/java/eu/siacs/conversations/utils/CryptoHelper.java3
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java75
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java3
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/jingle/JingleSocks5Transport.java17
-rw-r--r--src/main/res/values-ar-rEG/strings.xml1
-rw-r--r--src/main/res/values-bg/strings.xml6
-rw-r--r--src/main/res/values-ca/strings.xml1
-rw-r--r--src/main/res/values-cs/strings.xml4
-rw-r--r--src/main/res/values-el/strings.xml10
-rw-r--r--src/main/res/values-es/strings.xml6
-rw-r--r--src/main/res/values-eu/strings.xml3
-rw-r--r--src/main/res/values-fr/strings.xml1
-rw-r--r--src/main/res/values-id/strings.xml343
-rw-r--r--src/main/res/values-it/strings.xml1
-rw-r--r--src/main/res/values-ja/strings.xml4
-rw-r--r--src/main/res/values-nl/strings.xml4
-rw-r--r--src/main/res/values-pl/strings.xml333
-rw-r--r--src/main/res/values-ru/strings.xml36
-rw-r--r--src/main/res/values-sk/strings.xml1
-rw-r--r--src/main/res/values-sr/strings.xml4
-rw-r--r--src/main/res/values-sv/strings.xml4
31 files changed, 957 insertions, 158 deletions
diff --git a/README.md b/README.md
index ac075fd3..5519e47f 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
Conversations: the very last word in instant messaging
-[![Google Play](http://developer.android.com/images/brand/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=eu.siacs.conversations)
+[![Google Play](http://developer.android.com/images/brand/en_generic_rgb_wo_60.png)](https://play.google.com/store/apps/details?id=eu.siacs.conversations) [![Amazon App Store](https://images-na.ssl-images-amazon.com/images/G/01/AmazonMobileApps/amazon-apps-store-us-black.png)](http://www.amazon.com/dp/B00WD35AAC/)
![screenshots](https://raw.githubusercontent.com/siacs/Conversations/master/screenshots.png)
@@ -17,7 +17,8 @@ Conversations: the very last word in instant messaging
## Features
* End-to-end encryption with either [OTR](https://otr.cypherpunks.ca/) or [OpenPGP](http://www.openpgp.org/about_openpgp/)
-* Sending and receiving images
+* Send and receive images as well as other kind of files
+* Share your location via an external [plug-in](https://play.google.com/store/apps/details?id=eu.siacs.conversations.sharelocation)
* Indication when your contact has read your message
* Intuitive UI that follows Android Design guidelines
* Pictures / Avatars for your Contacts
diff --git a/src/main/java/eu/siacs/conversations/crypto/OtrEngine.java b/src/main/java/eu/siacs/conversations/crypto/OtrEngine.java
index 263f6089..0dc7c37e 100644
--- a/src/main/java/eu/siacs/conversations/crypto/OtrEngine.java
+++ b/src/main/java/eu/siacs/conversations/crypto/OtrEngine.java
@@ -182,7 +182,7 @@ public class OtrEngine extends OtrCryptoEngineImpl implements OtrEngineHost {
packet.setBody(body);
packet.addChild("private", "urn:xmpp:carbons:2");
packet.addChild("no-copy", "urn:xmpp:hints");
- packet.addChild("no-store", "urn:xmpp:hints");
+ packet.addChild("no-permanent-store", "urn:xmpp:hints");
try {
Jid jid = Jid.fromSessionID(session);
diff --git a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java
index a60c5613..474a3e1d 100644
--- a/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java
+++ b/src/main/java/eu/siacs/conversations/generator/MessageGenerator.java
@@ -71,6 +71,7 @@ public class MessageGenerator extends AbstractGenerator {
MessagePacket packet = preparePacket(message, addDelay);
packet.addChild("private", "urn:xmpp:carbons:2");
packet.addChild("no-copy", "urn:xmpp:hints");
+ packet.addChild("no-permanent-store", "urn:xmpp:hints");
try {
packet.setBody(otrSession.transformSending(message.getBody())[0]);
return packet;
diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java
index 8ae9b642..76d01468 100644
--- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java
+++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java
@@ -391,15 +391,17 @@ public class MessageParser extends AbstractParser implements
private void parseNonMessage(Element packet, Account account) {
final Jid from = packet.getAttributeAsJid("from");
+ if (account.getJid().equals(from)) {
+ return;
+ }
if (extractChatState(from == null ? null : mXmppConnectionService.find(account,from), packet)) {
mXmppConnectionService.updateConversationUi();
}
- Element invite = extractInvite(packet);
- if (invite != null) {
- Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, from, true);
+ Invite invite = extractInvite(packet);
+ if (invite != null && invite.jid != null) {
+ Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, invite.jid, true);
if (!conversation.getMucOptions().online()) {
- Element password = invite.findChild("password");
- conversation.getMucOptions().setPassword(password == null ? null : password.getContent());
+ conversation.getMucOptions().setPassword(invite.password);
mXmppConnectionService.databaseBackend.updateConversation(conversation);
mXmppConnectionService.joinMuc(conversation);
mXmppConnectionService.updateConversationUi();
@@ -439,16 +441,30 @@ public class MessageParser extends AbstractParser implements
}
}
- private Element extractInvite(Element message) {
- Element x = message.findChild("x","http://jabber.org/protocol/muc#user");
- if (x == null) {
- x = message.findChild("x","jabber:x:conference");
+ private class Invite {
+ Jid jid;
+ String password;
+ Invite(Jid jid, String password) {
+ this.jid = jid;
+ this.password = password;
}
- if (x != null && x.hasChild("invite")) {
- return x;
+ }
+
+ private Invite extractInvite(Element message) {
+ Element x = message.findChild("x","http://jabber.org/protocol/muc#user");
+ if (x != null) {
+ Element invite = x.findChild("invite");
+ if (invite != null) {
+ Element pw = x.findChild("password");
+ return new Invite(message.getAttributeAsJid("from"), pw != null ? pw.getContent(): null);
+ }
} else {
- return null;
+ x = message.findChild("x","jabber:x:conference");
+ if (x != null) {
+ return new Invite(x.getAttributeAsJid("jid"),x.getAttribute("password"));
+ }
}
+ return null;
}
private void parseEvent(final Element event, final Jid from, final Account account) {
diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java
index c499d499..cb79b0e9 100644
--- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java
+++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java
@@ -1,6 +1,7 @@
package eu.siacs.conversations.persistance;
import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -42,8 +43,7 @@ public class FileBackend {
private static int IMAGE_SIZE = 1920;
- private SimpleDateFormat imageDateFormat = new SimpleDateFormat(
- "yyyyMMdd_HHmmssSSS", Locale.US);
+ private final SimpleDateFormat imageDateFormat = new SimpleDateFormat("yyyyMMdd_HHmmssSSS", Locale.US);
private XmppConnectionService mXmppConnectionService;
@@ -110,9 +110,7 @@ public class FileBackend {
scalledW = size;
scalledH = (int) (h / ((double) w / size));
}
- Bitmap scalledBitmap = Bitmap.createScaledBitmap(originalBitmap,
- scalledW, scalledH, true);
- return scalledBitmap;
+ return Bitmap.createScaledBitmap(originalBitmap, scalledW, scalledH, true);
} else {
return originalBitmap;
}
@@ -148,31 +146,34 @@ public class FileBackend {
}
public DownloadableFile copyFileToPrivateStorage(Message message, Uri uri) throws FileCopyException {
+ Log.d(Config.LOGTAG, "copy " + uri.toString() + " to private storage");
+ String mime = mXmppConnectionService.getContentResolver().getType(uri);
+ String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mime);
+ message.setRelativeFilePath(message.getUuid() + "." + extension);
+ DownloadableFile file = mXmppConnectionService.getFileBackend().getFile(message);
+ file.getParentFile().mkdirs();
+ OutputStream os = null;
+ InputStream is = null;
try {
- Log.d(Config.LOGTAG, "copy " + uri.toString() + " to private storage");
- String mime = mXmppConnectionService.getContentResolver().getType(uri);
- String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mime);
- message.setRelativeFilePath(message.getUuid() + "." + extension);
- DownloadableFile file = mXmppConnectionService.getFileBackend().getFile(message);
- file.getParentFile().mkdirs();
- file.createNewFile();
- OutputStream os = new FileOutputStream(file);
- InputStream is = mXmppConnectionService.getContentResolver().openInputStream(uri);
+ if (!file.createNewFile()) {
+ throw new FileCopyException(R.string.error_io_exception);
+ }
+ os = new FileOutputStream(file);
+ is = mXmppConnectionService.getContentResolver().openInputStream(uri);
byte[] buffer = new byte[1024];
- int length;
- while ((length = is.read(buffer)) > 0) {
+ int length;
+ while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
- }
+ }
os.flush();
- os.close();
- is.close();
- Log.d(Config.LOGTAG, "output file name " + mXmppConnectionService.getFileBackend().getFile(message));
- return file;
- } catch (FileNotFoundException e) {
- throw new FileCopyException(R.string.error_file_not_found);
} catch (IOException e) {
throw new FileCopyException(R.string.error_io_exception);
+ } finally {
+ close(os);
+ close(is);
}
+ Log.d(Config.LOGTAG, "output file name " + mXmppConnectionService.getFileBackend().getFile(message));
+ return file;
}
public DownloadableFile copyImageToPrivateStorage(Message message, Uri image)
@@ -182,40 +183,41 @@ public class FileBackend {
private DownloadableFile copyImageToPrivateStorage(Message message,
Uri image, int sampleSize) throws FileCopyException {
+ DownloadableFile file = getFile(message);
+ file.getParentFile().mkdirs();
+ InputStream is = null;
+ OutputStream os = null;
try {
- InputStream is = mXmppConnectionService.getContentResolver()
- .openInputStream(image);
- DownloadableFile file = getFile(message);
- file.getParentFile().mkdirs();
- file.createNewFile();
+ if (!file.createNewFile()) {
+ throw new FileCopyException(R.string.error_io_exception);
+ }
+ is = mXmppConnectionService.getContentResolver().openInputStream(image);
+ os = new FileOutputStream(file);
+
Bitmap originalBitmap;
BitmapFactory.Options options = new BitmapFactory.Options();
int inSampleSize = (int) Math.pow(2, sampleSize);
- Log.d(Config.LOGTAG, "reading bitmap with sample size "
- + inSampleSize);
+ Log.d(Config.LOGTAG, "reading bitmap with sample size " + inSampleSize);
options.inSampleSize = inSampleSize;
originalBitmap = BitmapFactory.decodeStream(is, null, options);
is.close();
if (originalBitmap == null) {
throw new FileCopyException(R.string.error_not_an_image_file);
}
- Bitmap scalledBitmap = resize(originalBitmap, IMAGE_SIZE);
- originalBitmap = null;
+ Bitmap scaledBitmap = resize(originalBitmap, IMAGE_SIZE);
int rotation = getRotation(image);
if (rotation > 0) {
- scalledBitmap = rotate(scalledBitmap, rotation);
+ scaledBitmap = rotate(scaledBitmap, rotation);
}
- OutputStream os = new FileOutputStream(file);
- boolean success = scalledBitmap.compress(
- Bitmap.CompressFormat.WEBP, 75, os);
+
+ boolean success = scaledBitmap.compress(Bitmap.CompressFormat.WEBP, 75, os);
if (!success) {
throw new FileCopyException(R.string.error_compressing_image);
}
os.flush();
- os.close();
long size = file.getSize();
- int width = scalledBitmap.getWidth();
- int height = scalledBitmap.getHeight();
+ int width = scaledBitmap.getWidth();
+ int height = scaledBitmap.getHeight();
message.setBody(Long.toString(size) + ',' + width + ',' + height);
return file;
} catch (FileNotFoundException e) {
@@ -223,8 +225,7 @@ public class FileBackend {
} catch (IOException e) {
throw new FileCopyException(R.string.error_io_exception);
} catch (SecurityException e) {
- throw new FileCopyException(
- R.string.error_security_exception_during_image_copy);
+ throw new FileCopyException(R.string.error_security_exception_during_image_copy);
} catch (OutOfMemoryError e) {
++sampleSize;
if (sampleSize <= 3) {
@@ -232,23 +233,24 @@ public class FileBackend {
} else {
throw new FileCopyException(R.string.error_out_of_memory);
}
+ } finally {
+ close(os);
+ close(is);
}
}
private int getRotation(Uri image) {
+ InputStream is = null;
try {
- InputStream is = mXmppConnectionService.getContentResolver()
- .openInputStream(image);
+ is = mXmppConnectionService.getContentResolver().openInputStream(image);
return ExifHelper.getOrientation(is);
} catch (FileNotFoundException e) {
return 0;
+ } finally {
+ close(is);
}
}
- public Bitmap getImageFromMessage(Message message) {
- return BitmapFactory.decodeFile(getFile(message).getAbsolutePath());
- }
-
public Bitmap getThumbnail(Message message, int size, boolean cacheOnly)
throws FileNotFoundException {
Bitmap thumbnail = mXmppConnectionService.getBitmapCache().get(
@@ -257,8 +259,7 @@ public class FileBackend {
File file = getFile(message);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = calcSampleSize(file, size);
- Bitmap fullsize = BitmapFactory.decodeFile(file.getAbsolutePath(),
- options);
+ Bitmap fullsize = BitmapFactory.decodeFile(file.getAbsolutePath(),options);
if (fullsize == null) {
throw new FileNotFoundException();
}
@@ -271,13 +272,11 @@ public class FileBackend {
public Uri getTakePhotoUri() {
StringBuilder pathBuilder = new StringBuilder();
- pathBuilder.append(Environment
- .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
+ pathBuilder.append(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
pathBuilder.append('/');
pathBuilder.append("Camera");
pathBuilder.append('/');
- pathBuilder.append("IMG_" + this.imageDateFormat.format(new Date())
- + ".jpg");
+ pathBuilder.append("IMG_" + this.imageDateFormat.format(new Date()) + ".jpg");
Uri uri = Uri.parse("file://" + pathBuilder.toString());
File file = new File(uri.toString());
file.getParentFile().mkdirs();
@@ -325,13 +324,13 @@ public class FileBackend {
String filename = getAvatarPath(avatar.getFilename());
file = new File(filename + ".tmp");
file.getParentFile().mkdirs();
+ OutputStream os = null;
try {
file.createNewFile();
- FileOutputStream mFileOutputStream = new FileOutputStream(file);
+ os = new FileOutputStream(file);
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.reset();
- DigestOutputStream mDigestOutputStream = new DigestOutputStream(
- mFileOutputStream, digest);
+ DigestOutputStream mDigestOutputStream = new DigestOutputStream(os, digest);
mDigestOutputStream.write(avatar.getImageAsBytes());
mDigestOutputStream.flush();
mDigestOutputStream.close();
@@ -349,6 +348,8 @@ public class FileBackend {
return false;
} catch (NoSuchAlgorithmException e) {
return false;
+ } finally {
+ close(os);
}
}
avatar.size = file.length();
@@ -356,8 +357,7 @@ public class FileBackend {
}
public String getAvatarPath(String avatar) {
- return mXmppConnectionService.getFilesDir().getAbsolutePath()
- + "/avatars/" + avatar;
+ return mXmppConnectionService.getFilesDir().getAbsolutePath()+ "/avatars/" + avatar;
}
public Uri getAvatarUri(String avatar) {
@@ -368,10 +368,11 @@ public class FileBackend {
if (image == null) {
return null;
}
+ InputStream is = null;
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = calcSampleSize(image, size);
- InputStream is = mXmppConnectionService.getContentResolver().openInputStream(image);
+ is = mXmppConnectionService.getContentResolver().openInputStream(image);
Bitmap input = BitmapFactory.decodeStream(is, null, options);
if (input == null) {
return null;
@@ -384,6 +385,8 @@ public class FileBackend {
}
} catch (FileNotFoundException e) {
return null;
+ } finally {
+ close(is);
}
}
@@ -391,10 +394,11 @@ public class FileBackend {
if (image == null) {
return null;
}
+ InputStream is = null;
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = calcSampleSize(image,Math.max(newHeight, newWidth));
- InputStream is = mXmppConnectionService.getContentResolver().openInputStream(image);
+ is = mXmppConnectionService.getContentResolver().openInputStream(image);
Bitmap source = BitmapFactory.decodeStream(is, null, options);
int sourceWidth = source.getWidth();
@@ -414,8 +418,11 @@ public class FileBackend {
return dest;
} catch (FileNotFoundException e) {
return null;
+ } catch (IOException e) {
+ return null;
+ } finally {
+ close(is);
}
-
}
public Bitmap cropCenterSquare(Bitmap input, int size) {
@@ -522,4 +529,13 @@ public class FileBackend {
public boolean isFileAvailable(Message message) {
return getFile(message).exists();
}
+
+ public static void close(Closeable stream) {
+ if (stream != null) {
+ try {
+ stream.close();
+ } catch (IOException e) {
+ }
+ }
+ }
}
diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
index 3e8ce65f..ec0b3f92 100644
--- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
@@ -36,6 +36,7 @@ import org.openintents.openpgp.util.OpenPgpServiceConnection;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
@@ -174,13 +175,22 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
public void onContactStatusChanged(Contact contact, boolean online) {
Conversation conversation = find(getConversations(), contact);
if (conversation != null) {
- if (online && contact.getPresences().size() > 1) {
+ if (online) {
conversation.endOtrIfNeeded();
+ if (contact.getPresences().size() == 1) {
+ sendUnsentMessages(conversation);
+ }
} else {
- conversation.resetOtrSession();
- }
- if (online && (contact.getPresences().size() == 1)) {
- sendUnsentMessages(conversation);
+ if (contact.getPresences().size() >= 1) {
+ if (conversation.hasValidOtrSession()) {
+ String otrResource = conversation.getOtrSession().getSessionID().getUserID();
+ if (!(Arrays.asList(contact.getPresences().asStringArray()).contains(otrResource))) {
+ conversation.endOtrIfNeeded();
+ }
+ }
+ } else {
+ conversation.endOtrIfNeeded();
+ }
}
}
}
@@ -1537,6 +1547,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
for (Jid invite : jids) {
invite(conversation, invite);
}
+ if (account.countPresences() > 1) {
+ directInvite(conversation, account.getJid().toBareJid());
+ }
if (callback != null) {
callback.success(conversation);
}
@@ -2022,6 +2035,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
sendMessagePacket(conversation.getAccount(), packet);
}
+ public void directInvite(Conversation conversation, Jid jid) {
+ MessagePacket packet = mMessageGenerator.directInvite(conversation,jid);
+ sendMessagePacket(conversation.getAccount(),packet);
+ }
+
public void resetSendingToWaiting(Account account) {
for (Conversation conversation : getConversations()) {
if (conversation.getAccount() == account) {
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
index a44311b4..e5389dd6 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
@@ -929,10 +929,10 @@ public class ConversationActivity extends XmppActivity
}
private void handleViewConversationIntent(final Intent intent) {
- final String uuid = (String) intent.getExtras().get(CONVERSATION);
- final String downloadUuid = (String) intent.getExtras().get(MESSAGE);
- final String text = intent.getExtras().getString(TEXT, "");
- final String nick = intent.getExtras().getString(NICK, null);
+ final String uuid = intent.getStringExtra(CONVERSATION);
+ final String downloadUuid = intent.getStringExtra(MESSAGE);
+ final String text = intent.getStringExtra(TEXT);
+ final String nick = intent.getStringExtra(NICK);
if (selectConversationByUuid(uuid)) {
this.mConversationFragment.reInit(getSelectedConversation());
if (nick != null) {
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index a3a02b27..5b1e9b4d 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -8,7 +8,6 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
import android.content.IntentSender.SendIntentException;
-import android.net.Uri;
import android.os.Bundle;
import android.text.InputType;
import android.view.ContextMenu;
@@ -315,8 +314,8 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
@Override
public View onCreateView(final LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
- final View view = inflater.inflate(R.layout.fragment_conversation,
- container, false);
+ final View view = inflater.inflate(R.layout.fragment_conversation,container, false);
+ view.setOnClickListener(null);
mEditMessage = (EditMessage) view.findViewById(R.id.textinput);
setupIme();
mEditMessage.setOnClickListener(new OnClickListener() {
@@ -719,21 +718,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
final ConversationActivity activity = (ConversationActivity) getActivity();
if (this.conversation != null) {
updateSnackBar(this.conversation);
- final Contact contact = this.conversation.getContact();
- if (this.conversation.isBlocked()) {
-
- } else if (!contact.showInRoster()
- && contact
- .getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
-
- } else if (conversation.getMode() == Conversation.MODE_SINGLE) {
- makeFingerprintWarning();
- } else if (!conversation.getMucOptions().online()
- && conversation.getAccount().getStatus() == Account.State.ONLINE) {
-
- } else if (this.conversation.isMuted()) {
-
- }
conversation.populateWithMessages(ConversationFragment.this.messageList);
for (final Message message : this.messageList) {
if (message.getEncryption() == Message.ENCRYPTION_PGP
@@ -780,6 +764,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
} catch (final NoSuchElementException ignored) {
}
+ askForPassphraseIntent = null;
activity.xmppConnectionService.updateMessage(message);
}
@@ -879,10 +864,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
}
}
- protected void makeFingerprintWarning() {
-
- }
-
protected void showSnackbar(final int message, final int action,
final OnClickListener clickListener) {
snackbar.setVisibility(View.VISIBLE);
@@ -1019,6 +1000,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
}
public void appendText(String text) {
+ if (text == null) {
+ return;
+ }
String previous = this.mEditMessage.getText().toString();
if (previous.length() != 0 && !previous.endsWith(" ")) {
text = " " + text;
diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
index dbad9e00..7aa7b1c2 100644
--- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
@@ -468,7 +468,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
} else {
this.mServerInfoSm.setText(R.string.server_info_unavailable);
}
- if (features.pubsub()) {
+ if (features.pep()) {
this.mServerInfoPep.setText(R.string.server_info_available);
} else {
this.mServerInfoPep.setText(R.string.server_info_unavailable);
diff --git a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java
index 3f72b723..e8ab8dae 100644
--- a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java
@@ -163,8 +163,7 @@ public class PublishProfilePictureActivity extends XmppActivity {
if (jid != null) {
this.account = xmppConnectionService.findAccountByJid(jid);
if (this.account.getXmppConnection() != null) {
- this.support = this.account.getXmppConnection()
- .getFeatures().pubsub();
+ this.support = this.account.getXmppConnection().getFeatures().pep();
}
if (this.avatarUri == null) {
if (this.account.getAvatar() != null
diff --git a/src/main/java/eu/siacs/conversations/utils/CryptoHelper.java b/src/main/java/eu/siacs/conversations/utils/CryptoHelper.java
index eb7e2c3c..466bc409 100644
--- a/src/main/java/eu/siacs/conversations/utils/CryptoHelper.java
+++ b/src/main/java/eu/siacs/conversations/utils/CryptoHelper.java
@@ -91,6 +91,9 @@ public final class CryptoHelper {
}
public static String prettifyFingerprint(String fingerprint) {
+ if (fingerprint.length() < 40) {
+ return fingerprint;
+ }
StringBuilder builder = new StringBuilder(fingerprint);
builder.insert(8, " ");
builder.insert(17, " ");
diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
index 1351226b..cf580df1 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
@@ -90,7 +90,7 @@ public class XmppConnection implements Runnable {
private boolean shouldBind = true;
private boolean shouldAuthenticate = true;
private Element streamFeatures;
- private final HashMap<String, List<String>> disco = new HashMap<>();
+ private final HashMap<Jid, Info> disco = new HashMap<>();
private String streamId = null;
private int smVersion = 3;
@@ -334,6 +334,7 @@ public class XmppConnection implements Runnable {
} catch (final NumberFormatException ignored) {
}
sendServiceDiscoveryInfo(account.getServer());
+ sendServiceDiscoveryInfo(account.getJid().toBareJid());
sendServiceDiscoveryItems(account.getServer());
sendInitialPing();
} else if (nextTag.isStart("r")) {
@@ -734,6 +735,7 @@ public class XmppConnection implements Runnable {
features.blockListRequested = false;
disco.clear();
sendServiceDiscoveryInfo(account.getServer());
+ sendServiceDiscoveryInfo(account.getJid().toBareJid());
sendServiceDiscoveryItems(account.getServer());
if (bindListener != null) {
bindListener.onBind(account);
@@ -741,34 +743,35 @@ public class XmppConnection implements Runnable {
sendInitialPing();
}
- private void sendServiceDiscoveryInfo(final Jid server) {
- if (disco.containsKey(server.toDomainJid().toString())) {
- if (account.getServer().equals(server.toDomainJid())) {
+ private void sendServiceDiscoveryInfo(final Jid jid) {
+ if (disco.containsKey(jid)) {
+ if (account.getServer().equals(jid)) {
enableAdvancedStreamFeatures();
}
} else {
final IqPacket iq = new IqPacket(IqPacket.TYPE.GET);
- iq.setTo(server.toDomainJid());
+ iq.setTo(jid);
iq.query("http://jabber.org/protocol/disco#info");
this.sendIqPacket(iq, new OnIqPacketReceived() {
@Override
public void onIqPacketReceived(final Account account, final IqPacket packet) {
final List<Element> elements = packet.query().getChildren();
- final List<String> features = new ArrayList<>();
+ final Info info = new Info();
for (final Element element : elements) {
if (element.getName().equals("identity")) {
- if ("irc".equals(element.getAttribute("type"))) {
- //add fake feature to not confuse irc and real muc
- features.add("siacs:no:muc");
+ String type = element.getAttribute("type");
+ String category = element.getAttribute("category");
+ if (type != null && category != null) {
+ info.identities.add(new Pair<>(category,type));
}
} else if (element.getName().equals("feature")) {
- features.add(element.getAttribute("var"));
+ info.features.add(element.getAttribute("var"));
}
}
- disco.put(server.toDomainJid().toString(), features);
+ disco.put(jid, info);
- if (account.getServer().equals(server.toDomainJid())) {
+ if (account.getServer().equals(jid)) {
enableAdvancedStreamFeatures();
for (final OnAdvancedStreamFeaturesLoaded listener : advancedStreamFeaturesLoadedListeners) {
listener.onAdvancedStreamFeaturesAvailable(account);
@@ -987,9 +990,9 @@ public class XmppConnection implements Runnable {
public List<String> findDiscoItemsByFeature(final String feature) {
final List<String> items = new ArrayList<>();
- for (final Entry<String, List<String>> cursor : disco.entrySet()) {
- if (cursor.getValue().contains(feature)) {
- items.add(cursor.getKey());
+ for (final Entry<Jid, Info> cursor : disco.entrySet()) {
+ if (cursor.getValue().features.contains(feature)) {
+ items.add(cursor.getKey().toString());
}
}
return items;
@@ -1008,10 +1011,12 @@ public class XmppConnection implements Runnable {
}
public String getMucServer() {
- for (final Entry<String, List<String>> cursor : disco.entrySet()) {
- final List<String> value = cursor.getValue();
- if (value.contains("http://jabber.org/protocol/muc") && !value.contains("jabber:iq:gateway") && !value.contains("siacs:no:muc")) {
- return cursor.getKey();
+ for (final Entry<Jid, Info> cursor : disco.entrySet()) {
+ final Info value = cursor.getValue();
+ if (value.features.contains("http://jabber.org/protocol/muc")
+ && !value.features.contains("jabber:iq:gateway")
+ && !value.identities.contains(new Pair<>("conference","irc"))) {
+ return cursor.getKey().toString();
}
}
return null;
@@ -1066,6 +1071,11 @@ public class XmppConnection implements Runnable {
this.lastConnect = 0;
}
+ private class Info {
+ public final ArrayList<String> features = new ArrayList<>();
+ public final ArrayList<Pair<String,String>> identities = new ArrayList<>();
+ }
+
public class Features {
XmppConnection connection;
private boolean carbonsEnabled = false;
@@ -1077,8 +1087,8 @@ public class XmppConnection implements Runnable {
}
private boolean hasDiscoFeature(final Jid server, final String feature) {
- return connection.disco.containsKey(server.toDomainJid().toString()) &&
- connection.disco.get(server.toDomainJid().toString()).contains(feature);
+ return connection.disco.containsKey(server) &&
+ connection.disco.get(server).features.contains(feature);
}
public boolean carbons() {
@@ -1094,24 +1104,35 @@ public class XmppConnection implements Runnable {
}
public boolean sm() {
- return streamId != null;
+ return streamId != null
+ || (connection.streamFeatures != null && connection.streamFeatures.hasChild("sm"));
}
public boolean csi() {
return connection.streamFeatures != null && connection.streamFeatures.hasChild("csi", "urn:xmpp:csi:0");
}
- public boolean pubsub() {
- return hasDiscoFeature(account.getServer(),
- "http://jabber.org/protocol/pubsub#publish");
+ public boolean pep() {
+ final Pair<String,String> needle = new Pair<>("pubsub","pep");
+ Info info = disco.get(account.getServer());
+ if (info != null && info.identities.contains(needle)) {
+ return true;
+ } else {
+ info = disco.get(account.getJid().toBareJid());
+ return info != null && info.identities.contains(needle);
+ }
}
public boolean mam() {
- return hasDiscoFeature(account.getServer(), "urn:xmpp:mam:0");
+ if (hasDiscoFeature(account.getJid().toBareJid(), "urn:xmpp:mam:0")) {
+ return true;
+ } else {
+ return hasDiscoFeature(account.getServer(), "urn:xmpp:mam:0");
+ }
}
public boolean advancedStreamFeaturesLoaded() {
- return disco.containsKey(account.getServer().toString());
+ return disco.containsKey(account.getServer());
}
public boolean rosterVersioning() {
diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
index 3677bf4f..9866af03 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
@@ -11,6 +11,7 @@ import android.util.Base64;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.DownloadableFile;
+import eu.siacs.conversations.persistance.FileBackend;
import eu.siacs.conversations.utils.CryptoHelper;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.OnIqPacketReceived;
@@ -172,6 +173,7 @@ public class JingleInbandTransport extends JingleTransport {
connection.updateProgress((int) ((((double) (this.fileSize - this.remainingSize)) / this.fileSize) * 100));
}
} catch (IOException e) {
+ FileBackend.close(fileInputStream);
this.onFileTransmissionStatusChanged.onFileTransferAborted();
}
}
@@ -198,6 +200,7 @@ public class JingleInbandTransport extends JingleTransport {
connection.updateProgress((int) ((((double) (this.fileSize - this.remainingSize)) / this.fileSize) * 100));
}
} catch (IOException e) {
+ FileBackend.close(fileOutputStream);
this.onFileTransmissionStatusChanged.onFileTransferAborted();
}
}
diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleSocks5Transport.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleSocks5Transport.java
index c3419580..72015a05 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleSocks5Transport.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleSocks5Transport.java
@@ -11,6 +11,7 @@ import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import eu.siacs.conversations.entities.DownloadableFile;
+import eu.siacs.conversations.persistance.FileBackend;
import eu.siacs.conversations.utils.CryptoHelper;
public class JingleSocks5Transport extends JingleTransport {
@@ -126,25 +127,19 @@ public class JingleSocks5Transport extends JingleTransport {
} catch (NoSuchAlgorithmException e) {
callback.onFileTransferAborted();
} finally {
- try {
- if (fileInputStream != null) {
- fileInputStream.close();
- }
- } catch (IOException e) {
- callback.onFileTransferAborted();
- }
+ FileBackend.close(fileInputStream);
}
}
}).start();
}
- public void receive(final DownloadableFile file,
- final OnFileTransmissionStatusChanged callback) {
+ public void receive(final DownloadableFile file, final OnFileTransmissionStatusChanged callback) {
new Thread(new Runnable() {
@Override
public void run() {
+ OutputStream fileOutputStream = null;
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.reset();
@@ -152,7 +147,7 @@ public class JingleSocks5Transport extends JingleTransport {
socket.setSoTimeout(30000);
file.getParentFile().mkdirs();
file.createNewFile();
- OutputStream fileOutputStream = file.createOutputStream();
+ fileOutputStream = file.createOutputStream();
if (fileOutputStream == null) {
callback.onFileTransferAborted();
return;
@@ -183,6 +178,8 @@ public class JingleSocks5Transport extends JingleTransport {
callback.onFileTransferAborted();
} catch (NoSuchAlgorithmException e) {
callback.onFileTransferAborted();
+ } finally {
+ FileBackend.close(fileOutputStream);
}
}
}).start();
diff --git a/src/main/res/values-ar-rEG/strings.xml b/src/main/res/values-ar-rEG/strings.xml
index 3acf8e54..35eff49f 100644
--- a/src/main/res/values-ar-rEG/strings.xml
+++ b/src/main/res/values-ar-rEG/strings.xml
@@ -260,7 +260,6 @@
<string name="could_not_change_password">لايمكن تغيير كلمة السر</string>
<string name="otr_session_not_started">ارسل رساله لبدأ محادثة مشفّرة</string>
<string name="ask_question">أسال سؤال</string>
- <string name="smp_explain_question">إذا كنت و جهة اتصالك لديكم سر مشترك غير معروف لأحد آخر (مثل جملة مكرره بينكم او تاريخ ما يخصكم كتاريخ آخر لقاء بينكم ) استخدماه للتحقق من بصمات الأصابع \n\n عليك توفير تلميحا أو سؤال لجهة الإتصال بك للحصول على تلك الإجابه وبدأ التواصل</string>
<string name="smp_explain_answer">سترغب جهة الإتصال بتأكيد بصمتك عبر السر المشترك بينكما لذلك أخبره تلميحا أو إسأله سؤالا يذكره بالسر ليكتبه برده</string>
<string name="shared_secret_hint_should_not_be_empty">التلميح الذي يراه صديقك لا يمكن ان يكون فارغ</string>
<string name="shared_secret_can_not_be_empty">السر المشترك بينكما لا يمكن ان يترك فارغا !!</string>
diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml
index 2f89f3ae..b4810f51 100644
--- a/src/main/res/values-bg/strings.xml
+++ b/src/main/res/values-bg/strings.xml
@@ -359,7 +359,7 @@
<string name="could_not_change_password">Неуспешна промяна на паролата</string>
<string name="otr_session_not_started">Изпратете съобщение, за да започнете нешифрован разговор</string>
<string name="ask_question">Задаване на въпрос</string>
- <string name="smp_explain_question">Ако Вие и контакта Ви имате някаква тайна информация, която никой друг не знае (като някаква шега или пък просто какво сте обядвали, когато сте се срещнали за последно), можете да я използвате, за да проверите отпечатъците си един на друг.\n\nМожете да подсигурите подсказка или въпрос, на който контакта Ви да отговори, като има предвид, че главните и малките букви се броят за различни.</string>
+ <string name="smp_explain_question">Ако Вие и контактът Ви имате някаква тайна информация, която никой друг не знае (като някаква шега или пък просто какво сте обядвали, когато сте се срещнали за последно), можете да я използвате, за да проверите отпечатъците си един на друг.\n\nМожете да подсигурите подсказка или въпрос, на който контактът Ви да отговори, като има предвид, че главните и малките букви се броят за различни.</string>
<string name="smp_explain_answer">Вашият контакт би искал да провери отпечатъка Ви, като Ви попита за обща тайна информация. Контактът Ви предостави следната подсказка или въпрос, който да Ви насочи към тази тайна.</string>
<string name="shared_secret_hint_should_not_be_empty">Подсказката Ви не трябва да е празна</string>
<string name="shared_secret_can_not_be_empty">Общата Ви тайна не може да е празна</string>
@@ -427,6 +427,10 @@
<string name="no_application_found_to_display_location">Няма намерено приложение за показване на местоположението</string>
<string name="location">Местоположение</string>
<string name="received_location">Получено местоположение</string>
+ <string name="title_undo_swipe_out_conversation">Conversation се затвори</string>
+ <string name="title_undo_swipe_out_muc">Напуснахте беседата</string>
+ <string name="pref_dont_trust_system_cas_title">Да не се вярва на системните сертификати</string>
+ <string name="pref_dont_trust_system_cas_summary">Всички сертификати трябва да бъдат одобрени на ръка</string>
<plurals name="select_contact">
<item quantity="one">Изберете %d контакт</item>
<item quantity="other">Изберете %d контакта</item>
diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml
index e50fa740..a0861b16 100644
--- a/src/main/res/values-ca/strings.xml
+++ b/src/main/res/values-ca/strings.xml
@@ -359,7 +359,6 @@
<string name="could_not_change_password">No s\'ha pogut canviar la contrasenya</string>
<string name="otr_session_not_started">Començar a enviar un missatge de conversació xifrat</string>
<string name="ask_question">Fer una pregunta</string>
- <string name="smp_explain_question">Si vosté i el seu contacte tenen un secret en comú que ningú més sap (com una broma o simplement el que tenia per dinar l\'última vegada que es va trobar) pot utilitzar aquest secret per comprovar les empremtes dactilars de cadascú. \ n\ n Proporcionarás una pista o una pregunta per a la seu contacte que respondrà amb una resposta entre majúscules i minúscules.</string>
<string name="smp_explain_answer">El seu contacte l\'hi agradaria verificar la seva empremta digital per un repte amb un secret compartit.El seu contacte proporciona el següent suggeriment o pregunta per aquest secret.</string>
<string name="shared_secret_hint_should_not_be_empty">El seu suggeriment no pot estar buit</string>
<string name="shared_secret_can_not_be_empty">El teu secret compartit no pot estar buit</string>
diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml
index 0c08fa7a..192df52f 100644
--- a/src/main/res/values-cs/strings.xml
+++ b/src/main/res/values-cs/strings.xml
@@ -427,6 +427,10 @@
<string name="no_application_found_to_display_location">Nebyla nalezena aplikace pro zobrazení pozice</string>
<string name="location">Pozice</string>
<string name="received_location">Přijmout pozici</string>
+ <string name="title_undo_swipe_out_conversation">Conversation zavřena</string>
+ <string name="title_undo_swipe_out_muc">Opustil(a) konferenci</string>
+ <string name="pref_dont_trust_system_cas_title">Nedůvěřovat systémovým CA</string>
+ <string name="pref_dont_trust_system_cas_summary">Všechny certifikáty musí být schváleny ručně</string>
<plurals name="select_contact">
<item quantity="one">Vybrat %d kontakt</item>
<item quantity="few">Vybrat %d kontakty</item>
diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml
index 48dc4034..ec1da08c 100644
--- a/src/main/res/values-el/strings.xml
+++ b/src/main/res/values-el/strings.xml
@@ -359,7 +359,7 @@
<string name="could_not_change_password">Δεν ήταν δυνατή η αλλαγή του συνθηματικού</string>
<string name="otr_session_not_started">Αποστολή μηνύματος για την έναρξη κρυπτογραφημένης συνομιλίας</string>
<string name="ask_question">Ερώτηση</string>
- <string name="smp_explain_question">Αν εσείς και η επαφή σας έχετε ένα κοινό μυστικό που κανείς άλλος δεν γνωρίζει (κάτι σαν δικό σας αστείο ή απλώς τι φάγατε την τελευταία φορά που συναντηθήκατε) μπορείτε να χρησιμοποιήσετε αυτό το μυστικό για νε επαληθεύσετε τα αποτυπώματά σας.\n\nΠροσφέρετε έναν υπαινιγμό ή μια ερώτηση για την επαφή σας, που θα απαντήσει με μια φράση στην οποία έχουν διαφοροποίηση τα πεζά από τα κεφαλαία.</string>
+ <string name="smp_explain_question">Αν εσείς και η επαφή σας έχετε ένα κοινό μυστικό που κανείς άλλος δεν γνωρίζει (κάτι σαν δικό σας αστείο ή απλώς τι φάγατε την τελευταία φορά που συναντηθήκατε) μπορείτε να χρησιμοποιήσετε αυτό το μυστικό για να επαληθεύσετε τα αποτυπώματά σας.\n\nΠροσφέρετε έναν υπαινιγμό ή μια ερώτηση για την επαφή σας, που θα απαντήσει με μια φράση στην οποία έχουν διαφοροποίηση τα πεζά από τα κεφαλαία.</string>
<string name="smp_explain_answer">Η επαφή σας θα ήθελε να επαληθεύσει το αποτύπωμά σας χρησιμοποιώντας ένα κοινό μυστικό. Η επαφή σας προμήθευση τον παρακάτω υπαινιγμό ή ερώτηση για το μυστικό αυτό.</string>
<string name="shared_secret_hint_should_not_be_empty">Ο υπαινιγμός σας δεν μπορεί να είναι κενός</string>
<string name="shared_secret_can_not_be_empty">Το κοινό μυστικό σας δεν μπορεί να είναι κενό</string>
@@ -427,4 +427,12 @@
<string name="no_application_found_to_display_location">Δεν βρέθηκε εφαρμογή για την απεικόνιση τοποθεσίας</string>
<string name="location">Τοποθεσία</string>
<string name="received_location">Ελήφθη τοποθεσία</string>
+ <string name="title_undo_swipe_out_conversation">Η συζήτηση έκλεισε</string>
+ <string name="title_undo_swipe_out_muc">Έφυγε από την συνδιάσκεψη</string>
+ <string name="pref_dont_trust_system_cas_title">Μη έμπιστες αρχές πιστοποίησης συστήματος</string>
+ <string name="pref_dont_trust_system_cas_summary">Όλα τα πιστοποιητικά πρέπει να εγκριθούν χειροκίνητα</string>
+ <plurals name="select_contact">
+ <item quantity="one">Επιλογή %d επαφής</item>
+ <item quantity="other">Επιλογή %d επαφών</item>
+ </plurals>
</resources>
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index 44d8abb2..d7c6a885 100644
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -359,7 +359,7 @@
<string name="could_not_change_password">No se puede cambiar la contraseña</string>
<string name="otr_session_not_started">Enviar mensaje para empezar una conversación cifrada</string>
<string name="ask_question">Haz una pregunta</string>
- <string name="smp_explain_question">Si tu contacto y tú tenéis un secreto en común que nadie más sabe (como un pequeño juego o broma o simplemente lo que tomasteis para comer la última vez os visteis) podéis usar ese secreto para verificar la huella digital de cada uno.\n\nPuedes usar una sugerencia o pregunta para hacer a tu contacto que deberá responder distinguiendo mayúsculas y minúsculas.</string>
+ <string name="smp_explain_question">Si tu contacto y tú tenéis un secreto en común que nadie más sabe (como una broma o simplemente lo que tomasteis para comer la última vez que os visteis) podéis usar ese secreto para verificar la huella digital de cada uno.\n\nPuedes usar una sugerencia o pregunta para hacer a tu contacto que deberá responder distinguiendo mayúsculas y minúsculas.</string>
<string name="smp_explain_answer">Tu contacto quiere verificar tu huella digital a través de un secreto compartido. Te hace la siguiente sugerencia o pregunta para ese secreto.</string>
<string name="shared_secret_hint_should_not_be_empty">La pregunta no puede ser vacía</string>
<string name="shared_secret_can_not_be_empty">El secreto compartido no puede ser vacío</string>
@@ -427,6 +427,10 @@
<string name="no_application_found_to_display_location">No se ha encontrado ninguna aplicación para mostrar la ubicación</string>
<string name="location">Ubicación</string>
<string name="received_location">Ubicación recibida</string>
+ <string name="title_undo_swipe_out_conversation">Conversación cerrada</string>
+ <string name="title_undo_swipe_out_muc">Has salido de la conversación</string>
+ <string name="pref_dont_trust_system_cas_title">No confiar en los CAs del sistema</string>
+ <string name="pref_dont_trust_system_cas_summary">Todos los certificados deben ser aprobados manualmente</string>
<plurals name="select_contact">
<item quantity="one">Seleccionado %d contacto</item>
<item quantity="other">Seleccionados %d contactos</item>
diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml
index b6d1fa3c..3c9dee1b 100644
--- a/src/main/res/values-eu/strings.xml
+++ b/src/main/res/values-eu/strings.xml
@@ -359,7 +359,6 @@
<string name="could_not_change_password">Pasahitza ezin izan da aldatu</string>
<string name="otr_session_not_started">Mezu bat bidali enkripatutako elkarrizketa hasteko</string>
<string name="ask_question">Galdetu</string>
- <string name="smp_explain_question">Zu eta zure kontaktua beste inor ezagutzen ez duen elkarren arteko sekreturen bat baduzue (ohiko txantxa edo azkenengo aldian bazkaldu zenutena adibidez) bakoitzaren hatz-markak egiaztatzeko sekretu hori erabili dezakezue.\n\nIradokizun edo galdera bat eman behar duzu zure kontaktuak erantzun dezan, letra larri eta xeheak bereiziz.</string>
<string name="smp_explain_answer">Zure kontaktuak zure hatz-marka egiaztatu nahi du partekatutako sekretu batekin erronka eginez. Zure kontaktuak hurrengo iradokizuna edo sekretu horren galdera eman du.</string>
<string name="shared_secret_hint_should_not_be_empty">Zure iradokizuna ez luke hutsik egon behar</string>
<string name="shared_secret_can_not_be_empty">Zure partekatutako sekretua ezin da hutsik egon</string>
@@ -427,6 +426,8 @@
<string name="no_application_found_to_display_location">Kokapena erakutsi dezakeen aplikaziorik ez da aurkitu</string>
<string name="location">Kokapena</string>
<string name="received_location">Kokapena jaso da</string>
+ <string name="title_undo_swipe_out_conversation">Elkarrizketa itxi egin da</string>
+ <string name="title_undo_swipe_out_muc">Konferentzia utzi egin da</string>
<plurals name="select_contact">
<item quantity="one">Hautatu kontaktu %d</item>
<item quantity="other">Hautatu %d kontaktu</item>
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index 47c28517..4baef67f 100644
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -359,7 +359,6 @@
<string name="could_not_change_password">Impossible de changer le mot de passe</string>
<string name="otr_session_not_started">Envoyez un message pour commencer la conversation chiffrée</string>
<string name="ask_question">Poser une question</string>
- <string name="smp_explain_question">Si vous et votre contact avez un secret en commun connu par vous deux uniquement (comme une histoire personnelle ou même comme ce que vous avez mangé lors de votre dernière rencontre) vous pouvez utiliser ce secret pour vérifier vos empreintes respectives.\n\nVous envoyez un indice ou une question à votre contact qui devra répondre en faisant attention à la casse.</string>
<string name="smp_explain_answer">Votre contact voudrait vous identifier de manière sûre grâce à un secret commun. Il vous envoie le message ou la question suivante.</string>
<string name="shared_secret_hint_should_not_be_empty">Votre indice ne devrait pas être vide</string>
<string name="shared_secret_can_not_be_empty">Votre secret ne peut être vide</string>
diff --git a/src/main/res/values-id/strings.xml b/src/main/res/values-id/strings.xml
new file mode 100644
index 00000000..6c2dedb6
--- /dev/null
+++ b/src/main/res/values-id/strings.xml
@@ -0,0 +1,343 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+ <string name="action_settings">Pengaturan</string>
+ <string name="action_add">Percakapan Baru</string>
+ <string name="action_accounts">Pengaturan Akun</string>
+ <string name="action_end_conversation">Akhiri Percakapan</string>
+ <string name="action_contact_details">Detil Kontak</string>
+ <string name="action_muc_details">Detil conference</string>
+ <string name="action_secure">Amankan Percakapan</string>
+ <string name="action_add_account">Tambah Akun</string>
+ <string name="action_edit_contact">Ubah Nama</string>
+ <string name="action_add_phone_book">Tambah ke buku telepon</string>
+ <string name="action_delete_contact">Hapus dari roster</string>
+ <string name="action_block_contact">Blokir kontak</string>
+ <string name="action_unblock_contact">Batal blokir kontak</string>
+ <string name="action_block_domain">Blokir domain</string>
+ <string name="action_unblock_domain">Batal blokir domain</string>
+ <string name="title_activity_manage_accounts">Pengaturan Akun</string>
+ <string name="title_activity_settings">Pengaturan</string>
+ <string name="title_activity_conference_details">Conference Detil</string>
+ <string name="title_activity_contact_details">Kontak Detil</string>
+ <string name="title_activity_sharewith">Bagikan dengan Conversation</string>
+ <string name="title_activity_start_conversation">Mulai Percakapan</string>
+ <string name="title_activity_choose_contact">Pilih kontak</string>
+ <string name="title_activity_block_list">Daftar blokir</string>
+ <string name="just_now">sekarang</string>
+ <string name="minute_ago">1 min lalu</string>
+ <string name="minutes_ago">%d min lalu</string>
+ <string name="unread_conversations">Percakapan belum dibaca</string>
+ <string name="sending">mengirim...</string>
+ <string name="encrypted_message">Menerjemahkan pesan. Tunggu sebentar...</string>
+ <string name="nick_in_use">Nick ini sudah digunakan</string>
+ <string name="admin">Administrator</string>
+ <string name="owner">Pemilik</string>
+ <string name="moderator">Moderator</string>
+ <string name="participant">Peserta</string>
+ <string name="visitor">Pengunjung</string>
+ <string name="remove_contact_text">Apakah Anda ingin menghapus %s dari roster Anda? Percakapan yang terkait dengan kontak ini tidak akan dihapus.</string>
+ <string name="block_contact_text">Apakah Anda ingin memblokir pesan dari %s?</string>
+ <string name="unblock_contact_text">Apakah Anda ingin membuka blokir %s dan membolehkannya untuk mengirim pesan?</string>
+ <string name="block_domain_text">Blokir semua kontak dari %s?</string>
+ <string name="unblock_domain_text">Batalkan blokir semua kontak dari %s?</string>
+ <string name="contact_blocked">Kontak terblokir</string>
+ <string name="remove_bookmark_text">Apakah Anda ingin menghapus %s dari bookmark? Percakapan yang terkait dengan bookmark ini tidak akan dihapus.</string>
+ <string name="register_account">Daftarkan akun baru di server</string>
+ <string name="change_password_on_server">Ganti password di server</string>
+ <string name="share_with">Bagikan dengan...</string>
+ <string name="start_conversation">Mulai Percakapan</string>
+ <string name="invite_contact">Undang Kontak</string>
+ <string name="contacts">Kontak</string>
+ <string name="cancel">Batal</string>
+ <string name="set">Atur</string>
+ <string name="add">Tambah</string>
+ <string name="edit">Ubah</string>
+ <string name="delete">Hapus</string>
+ <string name="block">Blokir</string>
+ <string name="unblock">Batalkan blokir</string>
+ <string name="save">Simpan</string>
+ <string name="ok">YA</string>
+ <string name="crash_report_title">Percakapan terhenti</string>
+ <string name="crash_report_message">Dengan mengirimkan laporan kesalahan Anda membantu pengembangan Conversations\n&lt;b&gt;Perhatian:&lt;/&gt;Conversations akan menggunakan akun XMPP Anda untuk mengirim laporan kesalahan untuk pengembang.</string>
+ <string name="send_now">Kirim sekarang</string>
+ <string name="send_never">Jangan tanya lagi</string>
+ <string name="problem_connecting_to_account">Tidak terhubung ke akun</string>
+ <string name="problem_connecting_to_accounts">Tidak bisa terhubung ke banyak akun</string>
+ <string name="touch_to_fix">Sentuh untuk mengatur akun</string>
+ <string name="attach_file">Sisipkan berkas</string>
+ <string name="not_in_roster">Kontak tidak ada dalam roster Anda. Ingin menambahkannya?</string>
+ <string name="add_contact">Tambah kontak</string>
+ <string name="send_failed">pengiriman gagal</string>
+ <string name="send_rejected">ditolak</string>
+ <string name="preparing_image">Mempersiapkan gambar untuk transmisi</string>
+ <string name="action_clear_history">Bersihkan riwayat</string>
+ <string name="clear_conversation_history">Hapus Riwayat Percakapan</string>
+ <string name="clear_histor_msg">Apakah Anda ingin menghapus semua pesan dalam Percakapan ini\n\n<b>Peringatan:</b>ini tidak akan mempengaruhi pesan yang disimpan pada perangkat atau server lain.</string>
+ <string name="delete_messages">Hapus pesan</string>
+ <string name="choose_presence">Pilih kehadiran untuk kontak</string>
+ <string name="send_plain_text_message">Kirim pesan teks biasa</string>
+ <string name="send_otr_message">Kirim pesan terenskripsi OTR</string>
+ <string name="send_pgp_message">Kirim pesan terenskripsi OpenPGP</string>
+ <string name="your_nick_has_been_changed">Nick kamu telah dirubah</string>
+ <string name="download_image">Unduh Gambar</string>
+ <string name="send_unencrypted">Kirim tidak terenkripsi</string>
+ <string name="decryption_failed">Dekripsi gagal. Mungkin Anda tidak memiliki kunci pribadi yang tepat.</string>
+ <string name="openkeychain_required">OpenKeychain</string>
+ <string name="restart">Mulai ulang</string>
+ <string name="install">Pasang</string>
+ <string name="offering">menawarkan...</string>
+ <string name="waiting">menunggu...</string>
+ <string name="no_pgp_key">Tidak ada kunci OpenPGP ditemukan</string>
+ <string name="no_pgp_keys">Tidak ada kunci OpenPGP ditemukan</string>
+ <string name="contacts_have_no_pgp_keys">Percakapan tidak dapat mengenkripsi pesan Anda karena kontak tidak mengumumkan kunci publik mereka.\n\n<small>Silakan meminta kontak Anda untuk setup OpenPGP.</small></string>
+ <string name="encrypted_message_received"><i>Pesan terenkripsi diterima. Sentuh untuk membongkar dan melihatnya.</i></string>
+ <string name="pref_general">Umum</string>
+ <string name="pref_xmpp_resource">XMPP resource</string>
+ <string name="pref_xmpp_resource_summary">Identifikasi nama klien ini dengan</string>
+ <string name="pref_accept_files">Terima berkas</string>
+ <string name="pref_accept_files_summary">Otomatis menerima berkas lebih kecil dari...</string>
+ <string name="pref_notification_settings">Pengaturan Notifikasi</string>
+ <string name="pref_notifications">Notifikasi</string>
+ <string name="pref_notifications_summary">Notifikasikan jika pesan baru tiba</string>
+ <string name="pref_vibrate">Getar</string>
+ <string name="pref_vibrate_summary">Juga aktifkan getaran bila pesan baru tiba</string>
+ <string name="pref_sound">Suara</string>
+ <string name="pref_sound_summary">mainkan suara saat menerima notifikasi</string>
+ <string name="pref_conference_notifications">Notifikasi Conference</string>
+ <string name="pref_conference_notifications_summary">Selalu memberitahukan bila pesan conference baru diterima daripada hanya dicetak tebal</string>
+ <string name="pref_notification_grace_period">Tenggang waktu pemberitahuan</string>
+ <string name="pref_notification_grace_period_summary">Nonaktifkan pemberitahuan untuk waktu yang singkat setelah salinan diterima</string>
+ <string name="pref_advanced_options">Opsi Lanjutan</string>
+ <string name="pref_never_send_crash">Jangan kirim laporan kerusakan</string>
+ <string name="pref_never_send_crash_summary">Dengan mengirimkan kesalahan Anda membantu pengembangan Aplikasi Conversations</string>
+ <string name="pref_confirm_messages">Konfirmasi Pesan</string>
+ <string name="pref_confirm_messages_summary">Biarkan kontak Anda tahu kapan Anda telah menerima dan membaca pesan</string>
+ <string name="pref_ui_options">Opsi Tampilan</string>
+ <string name="openpgp_error">OpenKeychain melaporkan kesalahan</string>
+ <string name="error_decrypting_file">I/O Error menerjemahkan berkas</string>
+ <string name="accept">Menerima</string>
+ <string name="error">Sebuah kesalahan terjadi</string>
+ <string name="pref_grant_presence_updates">Memberikan perubahan kehadiran</string>
+ <string name="pref_grant_presence_updates_summary">Terlebih dahulu meminta dan berlangganan kehadiran untuk kontak Anda buat</string>
+ <string name="subscriptions">Langganan</string>
+ <string name="your_account">Akun anda</string>
+ <string name="keys">Kunci</string>
+ <string name="send_presence_updates">Kirim pembaruan kehadiran</string>
+ <string name="receive_presence_updates">Terima pembaruan kehadiran</string>
+ <string name="ask_for_presence_updates">Tanya untuk pembaruan kehadiran</string>
+ <string name="attach_choose_picture">Pilih gambar</string>
+ <string name="attach_take_picture">Ambil gambar</string>
+ <string name="preemptively_grant">Ijinkan permintaan berlangganan</string>
+ <string name="error_not_an_image_file">Berkas yang anda pilih bukan gambar</string>
+ <string name="error_compressing_image">Terjadi kesalahan saat mengubah berkas gambar</string>
+ <string name="error_file_not_found">Berkas tidak ditemukan</string>
+ <string name="error_io_exception">Kesalahan Umum I/O. Mungkin Anda kehabisan ruang penyimpanan?</string>
+ <string name="error_security_exception_during_image_copy">Aplikasi yang digunakan untuk memilih gambar tidak memberikan izin untuk membaca file.\n\n <small>Gunakan file manager yang berbeda untuk memilih gambar</small></string>
+ <string name="account_status_unknown">Tidak diketahui</string>
+ <string name="account_status_disabled">Sementara dimatikan</string>
+ <string name="account_status_online">Online</string>
+ <string name="account_status_connecting">Menghubungkan\u2026</string>
+ <string name="account_status_offline">Offline</string>
+ <string name="account_status_unauthorized">Tidak mendapat izin</string>
+ <string name="account_status_not_found">Server tidak ditemukan</string>
+ <string name="account_status_no_internet">Tidak ada koneksi</string>
+ <string name="account_status_regis_fail">Registrasi gagal</string>
+ <string name="account_status_regis_conflict">Username telah digunakan</string>
+ <string name="account_status_regis_success">Registrasi berhasil</string>
+ <string name="account_status_regis_not_sup">Server tidak mendukung pendaftaran akun.</string>
+ <string name="account_status_security_error">Kesalahan keamanan</string>
+ <string name="account_status_incompatible_server">Server tidak cocok</string>
+ <string name="encryption_choice_none">Teks biasa</string>
+ <string name="encryption_choice_otr">OTR</string>
+ <string name="encryption_choice_pgp">OpenPGP</string>
+ <string name="mgmt_account_edit">Ubah akun</string>
+ <string name="mgmt_account_delete">Hapus akun</string>
+ <string name="mgmt_account_disable">Sementara dimatikan</string>
+ <string name="mgmt_account_publish_avatar">Publikasikan avatar</string>
+ <string name="last_seen_days">terlihat %d hari lalu</string>
+ <string name="never_seen">tidak pernah terlihat</string>
+ <string name="reception_failed">Penerimaan gagal</string>
+ <string name="your_fingerprint">Fingerprint Anda</string>
+ <string name="otr_fingerprint">OTR fingerprint</string>
+ <string name="verify">Verifikasi</string>
+ <string name="decrypt">Deskripsi</string>
+ <string name="conferences">Conferences</string>
+ <string name="search">Cari</string>
+ <string name="create_contact">Buat Kontak</string>
+ <string name="join_conference">Gabung Conference</string>
+ <string name="delete_contact">Hapus Kontak</string>
+ <string name="view_contact_details">Lihat detil kontak</string>
+ <string name="block_contact">Blokir kontak</string>
+ <string name="unblock_contact">Lepas blokir kontak</string>
+ <string name="create">Buat</string>
+ <string name="contact_already_exists">Kontak ini sudah ada</string>
+ <string name="join">Gabung</string>
+ <string name="conference_address">Alamat conference</string>
+ <string name="conference_address_example">room@conference.example.com</string>
+ <string name="save_as_bookmark">Simpan sebagai bookmark</string>
+ <string name="delete_bookmark">Hapus bookmark</string>
+ <string name="you">Anda</string>
+ <string name="conference_not_found">Conference tidak ditemukan</string>
+ <string name="add_back">Tambah kembali</string>
+ <string name="send_private_message_to">Kirim pesan pribadi ke %s</string>
+ <string name="connect">Hubungkan</string>
+ <string name="account_already_exists">Akun ini sudah ada</string>
+ <string name="next">Selanjutnya</string>
+ <string name="additional_information">Informasi tambahan</string>
+ <string name="skip">Lewati</string>
+ <string name="disable_notifications">Nonaktifkan notifikasi</string>
+ <string name="disable_notifications_for_this_conversation">Nonaktifkan notifikasi untuk percakapan ini</string>
+ <string name="notifications_disabled">Notifikasi telah dimatikan</string>
+ <string name="enable">Aktifkan</string>
+ <string name="conference_requires_password">Conference membutuhkan password</string>
+ <string name="enter_password">Masukan password</string>
+ <string name="ignore">Abaikan</string>
+ <string name="pref_encryption_settings">Pengaturan enskripsi</string>
+ <string name="pref_force_encryption">Paksa enskripsi end-to-end</string>
+ <string name="pref_force_encryption_summary">Selalu mengirim pesan terenkripsi (kecuali untuk conferences)</string>
+ <string name="pref_dont_save_encrypted">jangan simpan pesan terenskripsi</string>
+ <string name="pref_dont_save_encrypted_summary">Peringatan: Hal ini bisa mengakibatkan hilangnya pesan</string>
+ <string name="pref_expert_options">Pengaturan lanjutan</string>
+ <string name="pref_expert_options_summary">Harap berhati-hati dengan ini</string>
+ <string name="title_activity_about">Tentang Conversations</string>
+ <string name="pref_about_conversations_summary">Build dan informasi lisensi</string>
+ <string name="title_pref_quiet_hours">Waktu sunyi</string>
+ <string name="title_pref_quiet_hours_start_time">Waktu mulai</string>
+ <string name="title_pref_quiet_hours_end_time">Waktu selesai</string>
+ <string name="title_pref_enable_quiet_hours">Aktifkan waktu sunyi</string>
+ <string name="pref_use_larger_font">Perbesar ukuran huruf</string>
+ <string name="pref_use_send_button_to_indicate_status">Tombol kirim menunjukan statusnya</string>
+ <string name="pref_expert_options_other">Lainnya</string>
+ <string name="using_account">menggunakan akun %s</string>
+ <string name="checking_image">Mengecek gambar di host HTTP</string>
+ <string name="image_file_deleted">Berkas gambar telah dihapus</string>
+ <string name="not_connected_try_again">Anda tidak terhubung. Coba lagi nanti</string>
+ <string name="check_image_filesize">Cek ukuran berkas gambar</string>
+ <string name="message_options">Opsi pesan</string>
+ <string name="copy_text">Salin teks</string>
+ <string name="copy_original_url">Salin URL asli</string>
+ <string name="send_again">Kirim lagi</string>
+ <string name="image_url">URL gambar</string>
+ <string name="message_text">Pesan teks</string>
+ <string name="url_copied_to_clipboard">URL disalin ke clipboard</string>
+ <string name="message_copied_to_clipboard">Pesan disalin ke clipboard</string>
+ <string name="image_transmission_failed">pengiriman gambar gagal</string>
+ <string name="scan_qr_code">Pindai kode QR</string>
+ <string name="show_qr_code">Tampilkan kode QR</string>
+ <string name="show_block_list">Tampilkan daftar blokir</string>
+ <string name="account_details">Detil akun</string>
+ <string name="in_progress">Sedang diproses</string>
+ <string name="failed">Gagal</string>
+ <string name="try_again">Coba lagi</string>
+ <string name="finish">Selesai</string>
+ <string name="verified">Terverifikasi!</string>
+ <string name="conversations_foreground_service">Percakapan</string>
+ <string name="pref_keep_foreground_service">Jaga layanan di latar depan</string>
+ <string name="pref_keep_foreground_service_summary">Cegah sistem operasi mematikan koneksi</string>
+ <string name="choose_file">Pilih berkas</string>
+ <string name="receiving_x_file">Menerima %1$s (%2$d%% terselesaikan)</string>
+ <string name="download_x_file">Mengunduh %s</string>
+ <string name="file">berkas</string>
+ <string name="open_x_file">Buka %s</string>
+ <string name="sending_file">mengirim (%1$d%% terselesaikan)</string>
+ <string name="preparing_file">Menyiapkan berkas untuk transmisi</string>
+ <string name="x_file_offered_for_download">%s ditawarkan untuk mengunduh</string>
+ <string name="cancel_transmission">batalkan pengiriman</string>
+ <string name="file_transmission_failed">pengiriman berkas gagal</string>
+ <string name="file_deleted">Berkas sudah dihapus</string>
+ <string name="no_application_found_to_open_file">Tidak ditemukan aplikasi untuk membuka berkas</string>
+ <string name="could_not_verify_fingerprint">Tidak dapat verifikasi fingerprint</string>
+ <string name="manually_verify">Verifikasi secara manual</string>
+ <string name="are_you_sure_verify_fingerprint">Yakin untuk memferifikasi OTR fingerprint kontak Anda?</string>
+ <string name="pref_show_dynamic_tags">Tampilkan tag dinamis</string>
+ <string name="pref_show_dynamic_tags_summary">Tampilan read-only tag di bawah kontak</string>
+ <string name="enable_notifications">Aktifkan notifikasi</string>
+ <string name="conference_with">Buat conference dengan...</string>
+ <string name="no_conference_server_found">Tidak ada server conference ditemukan</string>
+ <string name="conference_creation_failed">Pembuatan conference gagal!</string>
+ <string name="conference_created">Conference dibuat!</string>
+ <string name="secret_accepted">Rahasia disetujui!</string>
+ <string name="reset">Ulang</string>
+ <string name="account_image_description">Avatar akun</string>
+ <string name="copy_otr_clipboard_description">Salin OTR fingerprint ke clipboard</string>
+ <string name="fetching_history_from_server">Mengambil data dari server</string>
+ <string name="no_more_history_on_server">Tidak ada data lagi di server</string>
+ <string name="updating">Merubah...</string>
+ <string name="password_changed">Password diganti!</string>
+ <string name="could_not_change_password">Tidak dapat mengubah password</string>
+ <string name="otr_session_not_started">Kirim pesan untuk memulai obrolan dienkripsi</string>
+ <string name="ask_question">Bertanya</string>
+ <string name="shared_secret_hint_should_not_be_empty">Petunjuk Anda tidak boleh kosong</string>
+ <string name="shared_secret_can_not_be_empty">Rahasia bersama Anda tidak boleh kosong</string>
+ <string name="manual_verification_explanation">Hati-hati membandingkan sidik jari yang ditunjukkan di bawah dengan sidik jari kontak Anda.\nAnda dapat mengunakan layanan komunikasi terpercaya seperti e-mail terenskripsi atau panggilan telepon untuk menukarkannya.</string>
+ <string name="change_password">Ubah password</string>
+ <string name="current_password">Password sekarang</string>
+ <string name="new_password">Password baru</string>
+ <string name="password_should_not_be_empty">Password tidak boleh kosong</string>
+ <string name="enable_all_accounts">Aktifkan semua akun</string>
+ <string name="disable_all_accounts">Menonaktifkan semua account</string>
+ <string name="perform_action_with">Lakukan aksi dengan</string>
+ <string name="no_affiliation">Tidak ada afiliasi</string>
+ <string name="no_role">Tidak ada peran</string>
+ <string name="outcast">Orang buangan</string>
+ <string name="member">Member</string>
+ <string name="advanced_mode">Mode lanjut</string>
+ <string name="grant_membership">Memberikan keanggotaan</string>
+ <string name="remove_membership">Cabut keanggotaan</string>
+ <string name="grant_admin_privileges">Memberikan hak istimewa admin</string>
+ <string name="remove_admin_privileges">Mencabut hak istimewa admin</string>
+ <string name="remove_from_room">Hapus dari conference</string>
+ <string name="could_not_change_affiliation">Tidak bisa mengubah afiliasi %s</string>
+ <string name="ban_from_conference">Tendang dari conference</string>
+ <string name="removing_from_public_conference">Anda mencoba untuk menghapus %s dari sebuah conference publik. Satu-satunya cara untuk melakukannya adalah untuk menendang pengguna ini selamanya.</string>
+ <string name="ban_now">Tendang sekarang</string>
+ <string name="could_not_change_role">Tidak dapat merumah role %s</string>
+ <string name="public_conference">Conference umum</string>
+ <string name="private_conference">Rahasia, hanya member conference</string>
+ <string name="conference_options">Opsi conference</string>
+ <string name="members_only">Rahasia (Hanya member)</string>
+ <string name="non_anonymous">Non Anonymous</string>
+ <string name="modified_conference_options">Opsi conference dimodifikasi!</string>
+ <string name="could_not_modify_conference_options">Tidak dapat merubah pengaturan conference</string>
+ <string name="never">Tidak pernah</string>
+ <string name="thirty_minutes">30 menit</string>
+ <string name="one_hour">1 jam</string>
+ <string name="two_hours">2 jam</string>
+ <string name="eight_hours">8 jam</string>
+ <string name="until_further_notice">Sampai pemberitahuan selanjutnya</string>
+ <string name="pref_input_options">Opsi input</string>
+ <string name="pref_enter_is_send">Enter untuk mengirim</string>
+ <string name="pref_enter_is_send_summary">Gunakan enter untuk mengrim pesan</string>
+ <string name="pref_display_enter_key">Tampilkan masukan kunci</string>
+ <string name="pref_display_enter_key_summary">Mengubah kunci emoji untuk memasukan kunci</string>
+ <string name="audio">audio</string>
+ <string name="video">video</string>
+ <string name="image">Gambar</string>
+ <string name="pdf_document">Berkas PDF</string>
+ <string name="apk">Apl Android</string>
+ <string name="vcard">Kontak</string>
+ <string name="received_x_file">Diterima %s</string>
+ <string name="disable_foreground_service">Nonaktifkan layanan latar belakang</string>
+ <string name="touch_to_open_conversations">Sentuh untuk membuka Conversations</string>
+ <string name="avatar_has_been_published">Avatar telah diterbitkan!</string>
+ <string name="sending_x_file">Mengirim %s</string>
+ <string name="offering_x_file">Menawarkan %s</string>
+ <string name="hide_offline">Sembunyikan Offline</string>
+ <string name="disable_account">Nonaktifkan Akun</string>
+ <string name="contact_is_typing">%s sedang mengetik...</string>
+ <string name="contact_has_stopped_typing">%s telah berhenti mengetik</string>
+ <string name="pref_chat_states">Notifikasi ketik pesan</string>
+ <string name="pref_chat_states_summary">Biarkan kontak Anda tahu ketika Anda sedang menulis pesan baru</string>
+ <string name="send_location">Kirim lokasi</string>
+ <string name="show_location">Tampilkan lokasi</string>
+ <string name="no_application_found_to_display_location">Tidak ada aplikasi ditemukan untuk menampilkan lokasi</string>
+ <string name="location">Lokasi</string>
+ <string name="received_location">Lokasi yang diterima</string>
+ <string name="title_undo_swipe_out_conversation">Percakapan tertutup</string>
+ <string name="title_undo_swipe_out_muc">Tinggalkan conference</string>
+ <string name="pref_dont_trust_system_cas_title">Jangan percaya sistem CA</string>
+ <string name="pref_dont_trust_system_cas_summary">Semua sertifikat harus disetujui secara manual</string>
+ <plurals name="select_contact">
+ <item quantity="other">Pilih %d kontak</item>
+ </plurals>
+</resources>
diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml
index c32e9585..836dced8 100644
--- a/src/main/res/values-it/strings.xml
+++ b/src/main/res/values-it/strings.xml
@@ -357,7 +357,6 @@
<string name="could_not_change_password">Impossibile cambiare la password</string>
<string name="otr_session_not_started">Invia un messaggio per avviare una conversazione cifrata</string>
<string name="ask_question">Fai una domanda</string>
- <string name="smp_explain_question">Se tu ed il tuo contatto avete un segreto in comune che nessun’altro conosce (come uno scherzo o semplicemente ciò che avete mangiato a pranzo l’ultima volta che vi siete incontrati), potete usare quel segreto per dimostrare la vostra identità reciprocamente.\n\nFornisci un suggerimento o una domanda al tuo contatto che ti risponderà con una domanda Case Sensitive.</string>
<string name="smp_explain_answer">Il tuo contatto vorrebbe verificare la tua identità. Dovrai rispondere correttamente alla sua domanda con una risposta che condividete. Il tuo contatto ti ha fornito il suggerimento o la domanda seguente.</string>
<string name="shared_secret_hint_should_not_be_empty">Il suggerimento non dovrebbe essere vuoto</string>
<string name="shared_secret_can_not_be_empty">Il segreto condiviso non può essere vuoto</string>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index baffa088..0996334e 100644
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -427,6 +427,10 @@
<string name="no_application_found_to_display_location">位置を表示するアプリケーションが見つかりません</string>
<string name="location">位置</string>
<string name="received_location">位置を受信しました</string>
+ <string name="title_undo_swipe_out_conversation">会話が閉じられました</string>
+ <string name="title_undo_swipe_out_muc">退出した会話</string>
+ <string name="pref_dont_trust_system_cas_title">システムの CA を信頼しない</string>
+ <string name="pref_dont_trust_system_cas_summary">すべての証明書を手動で承認する必要があります</string>
<plurals name="select_contact">
<item quantity="other">%d 連絡先を選択</item>
</plurals>
diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml
index 2b8c5501..650e18c4 100644
--- a/src/main/res/values-nl/strings.xml
+++ b/src/main/res/values-nl/strings.xml
@@ -427,6 +427,10 @@
<string name="no_application_found_to_display_location">Geen applicatie gevonden om locatie weer te geven</string>
<string name="location">Locatie</string>
<string name="received_location">Locatie ontvangen</string>
+ <string name="title_undo_swipe_out_conversation">Gesprek gesloten</string>
+ <string name="title_undo_swipe_out_muc">Groepsgesprek verlaten</string>
+ <string name="pref_dont_trust_system_cas_title">Vertrouw geen systeem-CA\'s.</string>
+ <string name="pref_dont_trust_system_cas_summary">Alle certificaten moeten handmatig goedgekeurd worden</string>
<plurals name="select_contact">
<item quantity="one">Selecteer %d contact</item>
<item quantity="other">Selecteer %d contacten</item>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index 58dea13b..3c58c485 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -5,8 +5,11 @@
<string name="action_accounts">Zarządzaj kontami</string>
<string name="action_end_conversation">Zakończ konwersację</string>
<string name="action_contact_details">Szczegóły kontaktu</string>
- <string name="action_muc_details">Szczególy konferencji</string>
+ <string name="action_muc_details">Szczegóły konferencji</string>
+ <string name="action_secure">Konwersacja szyfrowana</string>
<string name="action_add_account">Dodaj konto</string>
+ <string name="action_edit_contact">Edytuj nazwę</string>
+ <string name="action_add_phone_book">Dodaj do książki telefonicznej</string>
<string name="action_delete_contact">Usuń z rostera</string>
<string name="action_block_contact">Zablokuj kontakt</string>
<string name="action_unblock_contact">Odblokuj kontakt</string>
@@ -16,6 +19,7 @@
<string name="title_activity_settings">Ustawienia</string>
<string name="title_activity_conference_details">Szczegóły konferencji</string>
<string name="title_activity_contact_details">Szczegóły kontaktu</string>
+ <string name="title_activity_sharewith">Udostępnij przez Conversation</string>
<string name="title_activity_start_conversation">Rozpocznij konwersację</string>
<string name="title_activity_choose_contact">Wybierz kontakt</string>
<string name="title_activity_block_list">Czarna lista</string>
@@ -25,6 +29,7 @@
<string name="unread_conversations">nieprzeczytanych konwersacji</string>
<string name="sending">wysyłanie...</string>
<string name="encrypted_message">Deszyfrowanie wiadomości. Proszę czekać...</string>
+ <string name="nick_in_use">Nazwa jest już w użyciu</string>
<string name="admin">Admin</string>
<string name="owner">Właściciel</string>
<string name="moderator">Moderator</string>
@@ -36,12 +41,15 @@
<string name="block_domain_text">Zablokować wszystkie kontakty z %s?</string>
<string name="unblock_domain_text">Odblokować wszystkie kontakty z %s?</string>
<string name="contact_blocked">Kontakt zablokowany</string>
+ <string name="remove_bookmark_text">Czy usunąć zakładkę %s? Konwersacja powiązana z zakładką nie zostanie usunięta.</string>
<string name="register_account">Zarejestruj nowe konto na serwerze</string>
<string name="change_password_on_server">Zmień hasło na serwerze</string>
+ <string name="share_with">Udostępnij...</string>
<string name="start_conversation">Rozpocznij konwersację</string>
<string name="invite_contact">Zaproś kontakt</string>
<string name="contacts">Kontakty</string>
<string name="cancel">Anuluj</string>
+ <string name="set">Ustaw</string>
<string name="add">Dodaj</string>
<string name="edit">Edytuj</string>
<string name="delete">Usuń</string>
@@ -50,6 +58,7 @@
<string name="save">Zapisz</string>
<string name="ok">Ok</string>
<string name="crash_report_title">Conversations uległo awarii</string>
+ <string name="crash_report_message">Wysyłając ślady stosu pomagasz rozwijać Conversations\n<b>Uwaga:</b> Ślad stosu zostanie przesłany deweloperowi przy użyciu twojego konta XMPP.</string>
<string name="send_now">Wyślij teraz</string>
<string name="send_never">Nie pytaj ponownie</string>
<string name="problem_connecting_to_account">Nie można połączyć się z kontem</string>
@@ -60,30 +69,352 @@
<string name="add_contact">Dodaj kontakt</string>
<string name="send_failed">wysyłanie nie powiodło się</string>
<string name="send_rejected">odrzucono</string>
+ <string name="preparing_image">Przygotowywanie obrazu do wysłania</string>
<string name="action_clear_history">Wyczyść historię</string>
<string name="clear_conversation_history">Wyczyść historię konwersacji</string>
+ <string name="clear_histor_msg">Czy na pewno usunąć wszystkie wiadomości powiązane z konwersacją?\n\n<b>Uwaga:</b> Działanie nie wpływa na wiadomości przechowywane na innych urządzeniach lub serwerach.</string>
<string name="delete_messages">Usuń wiadomości</string>
+ <string name="also_end_conversation">Zakończ konwersację po usunięciu historii</string>
+ <string name="choose_presence">Wybierz widoczność dla kontaktu</string>
+ <string name="send_plain_text_message">Wyślij wiadomość jawną</string>
+ <string name="send_otr_message">Wyślij zaszyfrowaną wiadomość (OTR)</string>
+ <string name="send_pgp_message">Wyślij zaszyfrowaną wiadomość (OpenPGP)</string>
+ <string name="your_nick_has_been_changed">Twoja nazwa została zmieniona</string>
+ <string name="download_image">Pobierz obraz</string>
+ <string name="send_unencrypted">Wyślij bez szyfrowania</string>
+ <string name="decryption_failed">Nie można odszyfrować. Sprawdź poprawność klucza prywatnego.</string>
+ <string name="openkeychain_required">OpenKeychain</string>
+ <string name="openkeychain_required_long">Conversations używa zewnętrznej aplikacji <b>OpenKeychain</b> do szyfrowania wiadomości i zarządzania kluczami publicznymi.\n\nOpenKeychain rozpowszechniany jest na licencji GPLv3 przez F-Droid lub Google Play.\n\n<small>(Zrestartuj Conversations po instalacji).</small></string>
+ <string name="restart">Zrestartuj</string>
+ <string name="install">Zainstaluj</string>
+ <string name="offering">oferowanie...</string>
+ <string name="waiting">oczekiwanie...</string>
+ <string name="no_pgp_key">Nie znaleziono klucza OpenPGP</string>
+ <string name="contact_has_no_pgp_key">Conversations nie może zaszyfrować wiadomości, ponieważ kontakt nie udostępnia klucza publicznego.\n\n<small>Zasugeruj rozmówcy instalację OpenPGP.</small></string>
+ <string name="no_pgp_keys">Nie znaleziono kluczy OpenPGP</string>
+ <string name="contacts_have_no_pgp_keys">Conversations nie może zaszyfrować wiadomości, ponieważ kontakty nie udostępniają kluczy publicznych.\n\n<small>Zasugeruj rozmówcom instalację OpenPGP.</small></string>
+ <string name="encrypted_message_received"><i>Otrzymano zaszyfrowaną wiadomość. Dotknij, aby odszyfrować i wyświetlić.</i></string>
+ <string name="pref_general">Główne</string>
+ <string name="pref_xmpp_resource">Zasób XMPP</string>
+ <string name="pref_xmpp_resource_summary">Nazwa identyfikująca urządzenie</string>
+ <string name="pref_accept_files">Akceptuj pliki</string>
+ <string name="pref_accept_files_summary">Automatycznie akceptuj pliki mniejsze niż...</string>
+ <string name="pref_notification_settings">Ustawienia powiadamiania</string>
+ <string name="pref_notifications">Powiadomienia</string>
+ <string name="pref_notifications_summary">Powiadamiaj, gdy nadejdzie wiadomość</string>
+ <string name="pref_vibrate">Wibracje</string>
+ <string name="pref_vibrate_summary">Wibruj, gdy nadejdzie wiadomość</string>
+ <string name="pref_sound">Dźwięk</string>
+ <string name="pref_sound_summary">Odtwórz dźwięk z powiadomieniem</string>
+ <string name="pref_conference_notifications">Powiadomienia konferencji</string>
+ <string name="pref_conference_notifications_summary">Zawsze powiadamiaj o nowej wiadomości w konferencji</string>
+ <string name="pref_notification_grace_period">Opóźnienie powiadomień</string>
+ <string name="pref_notification_grace_period_summary">Wyłącz powiadomienia przez krótki czas po otrzymaniu kopii wiadomości</string>
+ <string name="pref_advanced_options">Opcje zaawansowane</string>
+ <string name="pref_never_send_crash">Nie wysyłaj raportów awarii</string>
+ <string name="pref_never_send_crash_summary">Wysyłając ślady stosu pomagasz rozwijać Conversations</string>
+ <string name="pref_confirm_messages">Potwierdzenia wiadomości</string>
+ <string name="pref_confirm_messages_summary">Powiadamiaj kontakty o otrzymaniu lub przeczytaniu wiadomości</string>
+ <string name="pref_ui_options">Ustawienia interfejsu</string>
+ <string name="openpgp_error">Wystąpił błąd OpenKeychain</string>
+ <string name="error_decrypting_file">Błąd podczas deszyfrowania pliku</string>
+ <string name="accept">Akceptuj</string>
+ <string name="error">Wystąpił błąd</string>
+ <string name="pref_grant_presence_updates">Zezwól na powiadomienia obecności</string>
+ <string name="pref_grant_presence_updates_summary">Automatycznie zezwalaj i pytaj o powiadomienia obecności, kiedy utworzysz kontakt</string>
+ <string name="subscriptions">Subskrypcje</string>
+ <string name="your_account">Twoje konto</string>
+ <string name="keys">Klucze</string>
+ <string name="send_presence_updates">Wysyłaj powiadomienia obecności</string>
+ <string name="receive_presence_updates">Otrzymuj powiadomienia obecności</string>
+ <string name="ask_for_presence_updates">Poproś o powiadomienia obecności</string>
+ <string name="attach_choose_picture">Wybierz obraz</string>
+ <string name="attach_take_picture">Zrób zdjęcie</string>
+ <string name="preemptively_grant">Automatyczne powiadomienia obecności</string>
+ <string name="error_not_an_image_file">Wybrany plik nie jest obrazem</string>
+ <string name="error_compressing_image">Błąd kompresji obrazu</string>
+ <string name="error_file_not_found">Nie odnaleziono pliku</string>
+ <string name="error_io_exception">Ogólny błąd wejścia/wyjścia</string>
+ <string name="error_security_exception_during_image_copy">Aplikacja użyta do wyboru obrazu nie zezwoliła na odczyt pliku.\n\n<small>Wybierz obraz przy użyciu innego menedżera plików</small></string>
+ <string name="account_status_unknown">nieznany</string>
+ <string name="account_status_disabled">Tymczasowo wyłączono</string>
+ <string name="account_status_online">Połączono</string>
+ <string name="account_status_connecting">Łączenie...</string>
+ <string name="account_status_offline">Rozłączono</string>
+ <string name="account_status_unauthorized">Błąd uwierzytelnienia</string>
+ <string name="account_status_not_found">Nie odnaleziono serwera</string>
+ <string name="account_status_no_internet">Brak połączenia</string>
+ <string name="account_status_regis_fail">Błąd rejestracji</string>
+ <string name="account_status_regis_conflict">Nazwa jest już w użyciu</string>
+ <string name="account_status_regis_success">Zarejestrowano pomyślnie</string>
+ <string name="account_status_regis_not_sup">Serwer nie umożliwia rejestracji</string>
+ <string name="account_status_security_error">Błąd zabezpieczeń</string>
+ <string name="account_status_incompatible_server">Serwer niekompatybilny</string>
+ <string name="encryption_choice_none">Tekst jawny</string>
+ <string name="encryption_choice_otr">OTR</string>
+ <string name="encryption_choice_pgp">OpenPGP</string>
+ <string name="mgmt_account_edit">Edytuj konto</string>
+ <string name="mgmt_account_delete">Usuń konto</string>
+ <string name="mgmt_account_disable">Wyłącz tymczasowo</string>
+ <string name="mgmt_account_publish_avatar">Publikuj awatar</string>
+ <string name="mgmt_account_publish_pgp">Udostępnij klucz publiczny OpenPGP</string>
+ <string name="mgmt_account_enable">Włącz konto</string>
+ <string name="mgmt_account_are_you_sure">Czy na pewno?</string>
+ <string name="mgmt_account_delete_confirm_text">Wraz z kontem zostanie nieodwracalnie usunięta powiązana historia konwersacji.</string>
+ <string name="attach_record_voice">Nagraj głos</string>
+ <string name="account_settings_jabber_id">Jabber ID</string>
+ <string name="account_settings_password">Hasło</string>
+ <string name="account_settings_example_jabber_id">username@example.com</string>
+ <string name="account_settings_confirm_password">Potwierdź hasło</string>
+ <string name="password">Hasło</string>
+ <string name="confirm_password">Potwierdź hasło</string>
+ <string name="passwords_do_not_match">Hasła są niezgodne</string>
+ <string name="invalid_jid">Wprowadzono niepoprawny Jabber ID</string>
+ <string name="error_out_of_memory">Brak pamięci, obraz jest za duży</string>
+ <string name="add_phone_book_text">Czy chcesz dodać kontakt %s do książki telefonicznej?</string>
+ <string name="contact_status_online">dostępny</string>
+ <string name="contact_status_free_to_chat">chętny do rozmowy</string>
+ <string name="contact_status_away">zaraz wracam</string>
+ <string name="contact_status_extended_away">będę później</string>
+ <string name="contact_status_do_not_disturb">nie przeszkadzać</string>
+ <string name="contact_status_offline">niedostępny</string>
+ <string name="muc_details_conference">Konferencja</string>
+ <string name="muc_details_other_members">Pozostali uczestnicy</string>
+ <string name="server_info_show_more">Informacje o serwerze</string>
+ <string name="server_info_mam">XEP-0313: MAM</string>
+ <string name="server_info_carbon_messages">XEP-0280: Kopie wiadomości</string>
+ <string name="server_info_available">dostępny</string>
+ <string name="server_info_unavailable">niedostępny</string>
+ <string name="missing_public_keys">Brak informacji o kluczu publicznym</string>
+ <string name="last_seen_now">widziany chwilę temu</string>
+ <string name="last_seen_min">widziany minutę temu</string>
+ <string name="last_seen_mins">widziany %d minut(y) temu</string>
+ <string name="last_seen_hour">widziany godzinę temu</string>
+ <string name="last_seen_hours">widziany %d godzin(y) temu</string>
+ <string name="last_seen_day">widziany wczoraj</string>
+ <string name="last_seen_days">widziany %d dni temu</string>
+ <string name="never_seen">nigdy nie widziany</string>
+ <string name="install_openkeychain">Wiadomość zaszyfrowana. Zainstaluj OpenKeychain, żeby odszyfrować.</string>
+ <string name="unknown_otr_fingerprint">Nieznany odcisk klucza OTR</string>
+ <string name="openpgp_messages_found">Znaleziono wiadomości zaszyfrowane przez OpenPGP</string>
+ <string name="your_fingerprint">Twój odcisk klucza</string>
+ <string name="otr_fingerprint">Odcisk klucza OTR</string>
+ <string name="verify">Weryfikuj</string>
+ <string name="decrypt">Odszyfruj</string>
+ <string name="conferences">Konferencje</string>
+ <string name="search">Szukaj</string>
+ <string name="create_contact">Utwórz kontakt</string>
+ <string name="join_conference">Dołącz do konferencji</string>
+ <string name="delete_contact">Usuń kontakt</string>
+ <string name="view_contact_details">Szczegóły kontaktu</string>
+ <string name="block_contact">Zablokuj kontakt</string>
+ <string name="unblock_contact">Odblokuj kontakt</string>
+ <string name="create">Utwórz</string>
+ <string name="contact_already_exists">Kontakt już istnieje</string>
+ <string name="join">Dołącz</string>
+ <string name="conference_address">Adres konferencji</string>
+ <string name="conference_address_example">room@conference.example.com</string>
+ <string name="save_as_bookmark">Dodaj jako zakładkę</string>
+ <string name="delete_bookmark">Usuń zakładkę</string>
+ <string name="bookmark_already_exists">Zakładka już istnieje</string>
+ <string name="you">Ty</string>
+ <string name="action_edit_subject">Edytuj temat konferencji</string>
+ <string name="conference_not_found">Nie znaleziono konferencji</string>
+ <string name="leave">Opuść pokój</string>
+ <string name="contact_added_you">Kontakt został dodany do listy</string>
+ <string name="add_back">Dodaj ponownie</string>
+ <string name="contact_has_read_up_to_this_point">%s przeczytał do tego miejsca</string>
+ <string name="publish">Publikuj</string>
+ <string name="touch_to_choose_picture">Naciśnij awatar, żeby wybrać obraz z galerii</string>
+ <string name="publish_avatar_explanation">Uwaga: Obraz będzie widoczny dla wszystkich kontaktów, którym udostępniasz powiadomienia o obecności.</string>
+ <string name="publishing">Publikowanie...</string>
+ <string name="error_publish_avatar_server_reject">Serwer odrzucił żądanie publikacji</string>
+ <string name="error_publish_avatar_converting">Wystąpił błąd podczas konwersji obrazu</string>
+ <string name="error_saving_avatar">Nie udało się zapisać obrazu w pamięci urządzenia</string>
+ <string name="error_publish_avatar_no_server_support">Serwer nie udostępnia możliwości publikacji awatarów</string>
+ <string name="private_message_to">do %s</string>
+ <string name="send_private_message_to">Wyślij prywatną wiadomość do %s</string>
+ <string name="connect">Połącz</string>
+ <string name="account_already_exists">Konto już istnieje</string>
+ <string name="next">Dalej</string>
+ <string name="server_info_session_established">Połączono</string>
+ <string name="additional_information">Dodatkowe informacje</string>
+ <string name="skip">Pomiń</string>
+ <string name="disable_notifications">Wyłącz powiadomienia</string>
+ <string name="disable_notifications_for_this_conversation">Wyłącz powiadomienia tej konwersacji</string>
+ <string name="notifications_disabled">Powiadomienia są wyłączone</string>
+ <string name="enable">Włącz</string>
+ <string name="conference_requires_password">Konferencja jest zabezpieczona hasłem</string>
+ <string name="enter_password">Wprowadź hasło</string>
+ <string name="missing_presence_updates">Kontakt nie udostępnia powiadomień o obecności</string>
+ <string name="request_now">Zażądaj teraz</string>
+ <string name="delete_fingerprint">Usuń odcisk klucza</string>
+ <string name="sure_delete_fingerprint">Czy na pewno chcesz usunąć odcisk klucza?</string>
+ <string name="ignore">Ignoruj</string>
+ <string name="pref_encryption_settings">Ustawienia szyfrowania</string>
+ <string name="pref_force_encryption">Wymuszaj szyfrowanie typu end-to-end</string>
+ <string name="pref_force_encryption_summary">Szyfruj wszystkie wiadomości (poza konferencjami)</string>
+ <string name="pref_dont_save_encrypted">Nie zapisuj zaszyfrowanych wiadomości</string>
+ <string name="pref_dont_save_encrypted_summary">Uwaga: Może powodować utratę wiadomości</string>
+ <string name="pref_expert_options">Ustawienia zaawansowane</string>
+ <string name="pref_expert_options_summary">Modyfikuj ustawienia ostrożnie</string>
+ <string name="title_activity_about">O Conversations</string>
+ <string name="pref_about_conversations_summary">Informacje o kompilacji i licencji</string>
+ <string name="title_pref_quiet_hours">Godziny ciszy</string>
+ <string name="title_pref_quiet_hours_start_time">Początek</string>
+ <string name="title_pref_quiet_hours_end_time">Koniec</string>
+ <string name="title_pref_enable_quiet_hours">Włącz godziny ciszy</string>
+ <string name="pref_quiet_hours_summary">Powiadomienia będą wyciszone w wybranym przedziale czasu</string>
+ <string name="pref_use_larger_font">Większy rozmiar czcionki</string>
+ <string name="pref_use_larger_font_summary">Używaj większego rozmiaru czcionki w aplikacji</string>
+ <string name="pref_use_send_button_to_indicate_status">Przycisk wysyłania wskazuje status</string>
+ <string name="pref_use_indicate_received">Raporty dostarczenia</string>
+ <string name="pref_use_indicate_received_summary">Jeżeli to możliwe, oznaczaj dostarczone wiadomości zielonym haczykiem</string>
+ <string name="pref_use_send_button_to_indicate_status_summary">Koloruj przycisk wysyłania w zależności od statusu kontaktu</string>
+ <string name="pref_expert_options_other">Inne opcje</string>
+ <string name="pref_conference_name">Nazwa konferencji</string>
+ <string name="pref_conference_name_summary">Nazywaj konferencję tematem zamiast Jabber ID</string>
+ <string name="toast_message_otr_fingerprint">Odcisk klucza OTR został skopiowany do schowka</string>
+ <string name="conference_banned">Zbanowano cię w konferencji</string>
+ <string name="conference_members_only">To jest zamknięty pokój</string>
+ <string name="conference_kicked">Wyrzucono cię z konferencji</string>
+ <string name="checking_image">Sprawdzanie obrazka na hoście HTTP</string>
+ <string name="image_file_deleted">Obraz został usunięty</string>
+ <string name="not_connected_try_again">Brak połączenia. Spróbuj ponownie później</string>
+ <string name="check_image_filesize">Sprawdź rozmiar pliku</string>
+ <string name="message_options">Opcje wiadomości</string>
+ <string name="copy_text">Skopiuj tekst</string>
+ <string name="copy_original_url">Skopiuj oryginalny URL</string>
+ <string name="send_again">Wyślij ponownie</string>
+ <string name="image_url">URL obrazu</string>
+ <string name="message_text">Treść wiadomości</string>
+ <string name="url_copied_to_clipboard">URL obrazu został skopiowany do schowka</string>
+ <string name="message_copied_to_clipboard">Wiadomość została skopiowana do schowka</string>
+ <string name="image_transmission_failed">Błąd podczas przesyłania obrazu</string>
+ <string name="scan_qr_code">Zeskanuj kod QR</string>
+ <string name="show_qr_code">Pokaż kod QR</string>
+ <string name="show_block_list">Wyświetl listę banów</string>
+ <string name="account_details">Szczegóły konta</string>
+ <string name="verify_otr">Weryfikuj OTR</string>
+ <string name="remote_fingerprint">Zdalny odcisk klucza</string>
+ <string name="or_touch_phones">(lub zetknij telefony)</string>
+ <string name="smp">Protokół socialist millionaire</string>
+ <string name="shared_secret_hint">Podpowiedź lub pytanie</string>
+ <string name="shared_secret_secret">Wspólny sekret</string>
+ <string name="confirm">Potwierdź</string>
+ <string name="in_progress">W toku</string>
+ <string name="respond">Odpowiedz</string>
+ <string name="secrets_do_not_match">Sekrety są niezgodne</string>
+ <string name="try_again">Spróbuj ponownie</string>
+ <string name="finish">Zakończ</string>
+ <string name="verified">Weryfikacja udana!</string>
+ <string name="smp_requested">Kontakt zażądał weryfikacji SMP</string>
+ <string name="no_otr_session_found">Brak ważnej sesji OTR!</string>
+ <string name="conversations_foreground_service">Conversations</string>
+ <string name="pref_keep_foreground_service">Usługa na pierwszym planie</string>
+ <string name="pref_keep_foreground_service_summary">Uniemożliwia systemowi przerwanie połączenia</string>
+ <string name="choose_file">Wybierz plik</string>
+ <string name="receiving_x_file">Odbieranie %1$s (ukończono %2$d%%)</string>
+ <string name="download_x_file">Pobierz %s</string>
+ <string name="file">plik</string>
+ <string name="open_x_file">Otwórz %s</string>
+ <string name="sending_file">Wysyłanie (ukończono %1$d%%)</string>
+ <string name="preparing_file">Przygotowywanie pliku do wysłania</string>
+ <string name="x_file_offered_for_download">Zaproponowano pobranie pliku %s</string>
+ <string name="cancel_transmission">Anuluj przesyłanie</string>
+ <string name="file_transmission_failed">Przesyłanie pliku nie powiodło się</string>
+ <string name="file_deleted">Plik został usunięty</string>
+ <string name="no_application_found_to_open_file">Nie odnaleziono aplikacji skojarzonej z typem pliku</string>
+ <string name="could_not_verify_fingerprint">Weryfikacja odcisku klucza nieudana</string>
+ <string name="manually_verify">Weryfikuj ręcznie</string>
+ <string name="are_you_sure_verify_fingerprint">Czy na pewno chcesz zweryfikować odcisk klucza OTR kontaktu?</string>
+ <string name="pref_show_dynamic_tags">Etykiety kontaktów</string>
+ <string name="pref_show_dynamic_tags_summary">Wyświetlaj etykiety pod kontaktami</string>
+ <string name="enable_notifications">Włącz powiadomienia</string>
+ <string name="conference_with">Utwórz konferencję...</string>
+ <string name="no_conference_server_found">Nie odnaleziono serwera konferencji</string>
+ <string name="conference_creation_failed">Nie udało się utworzyć konferencji!</string>
+ <string name="conference_created">Konferencja została utworzona!</string>
+ <string name="secret_accepted">Sekret został zaakceptowany!</string>
+ <string name="reset">Resetuj</string>
+ <string name="account_image_description">Awatar konta</string>
+ <string name="copy_otr_clipboard_description">Skopiuj odcisk klucza OTR do schowka</string>
+ <string name="fetching_history_from_server">Pobieranie historii z serwera</string>
+ <string name="no_more_history_on_server">Koniec historii na serwerze</string>
+ <string name="updating">Aktualizowanie...</string>
+ <string name="password_changed">Hasło zostało zmienione!</string>
+ <string name="could_not_change_password">Nie udało się zmienić hasła</string>
+ <string name="otr_session_not_started">Wyślij wiadomość, żeby rozpocząć szyfrowaną rozmowę</string>
+ <string name="ask_question">Zadaj pytanie</string>
+ <string name="smp_explain_question">Jeśli ty i twój kontakt macie jakiś wspólny sekret, którego nie zna nikt inny (żart znany tylko wam lub po prostu co jedliście ostatnim razem, gdy się widzieliście) możecie użyć tego sekretu by zweryfikować wzajemnie odciski swoich kluczy.\n\nPodasz podpowiedź lub pytanie dla twojego kontaktu i otrzymasz odpowiedź (wielkość liter ma znaczenie).</string>
+ <string name="smp_explain_answer">Twój kontakt chciałby zweryfikować odcisk Twojego klucza poprzez sprawdzenie znajomości wspólnego sekretu. Twój znajomy przedstawił następującą podpowiedź lub pytanie dotyczącego tego sekretu.</string>
+ <string name="shared_secret_hint_should_not_be_empty">Wskazówka nie powinna być pusta</string>
+ <string name="shared_secret_can_not_be_empty">Sekret nie może być pusty</string>
+ <string name="manual_verification_explanation">Ostrożnie porównaj odcisk klucza pokazany poniżej z odciskiem klucza twojego kontaktu.\nMożesz użyć bezpiecznego kanału komunikacji takiego, jak szyfrowany e-mail lub rozmowa telefoniczna, by wymienić odciski klucza.</string>
<string name="change_password">Zmień hasło</string>
<string name="current_password">Obecne hasło</string>
<string name="new_password">Nowe hasło</string>
<string name="password_should_not_be_empty">Hasło nie może być puste</string>
<string name="enable_all_accounts">Aktywuj wszystkie konta</string>
<string name="disable_all_accounts">Wyłącz wszystkie konta</string>
+ <string name="perform_action_with">Użyj</string>
+ <string name="no_affiliation">Brak stanowiska</string>
+ <string name="no_role">Brak funkcji</string>
+ <string name="outcast">Wykluczony</string>
+ <string name="member">Członek</string>
+ <string name="advanced_mode">Tryb zaawansowany</string>
+ <string name="grant_membership">Przyznaj członkostwo</string>
+ <string name="remove_membership">Cofnij członkostwo</string>
+ <string name="grant_admin_privileges">Przyznaj uprawnienia administratora</string>
+ <string name="remove_admin_privileges">Odbierz uprawnienia administratora</string>
+ <string name="remove_from_room">Usuń z konferencji</string>
+ <string name="could_not_change_affiliation">Nie udało się zmienić stanowiska dla %s</string>
+ <string name="ban_from_conference">Zbanuj uczestnika konferencji</string>
+ <string name="removing_from_public_conference">Próbujesz usunąć %s z publicznego pokoju. Jedyny sposób, by to zrobić, to wykluczyć tego użytkownika na zawsze.</string>
+ <string name="ban_now">Zbanuj teraz</string>
+ <string name="could_not_change_role">Nie udało się zmienić funkcji %s</string>
+ <string name="public_conference">Konferencja publiczna</string>
+ <string name="private_conference">Konferencja prywatna, dla zaakceptowanych uczestników</string>
+ <string name="conference_options">Opcje konferencji</string>
+ <string name="members_only">Prywatna (tylko zaakceptowani)</string>
+ <string name="modified_conference_options">Opcje konferencji zostały zmienione!</string>
+ <string name="could_not_modify_conference_options">Nie udało się zmienić opcji konferencji</string>
<string name="never">Nigdy</string>
<string name="thirty_minutes">30 minut</string>
<string name="one_hour">1 godzina</string>
<string name="two_hours">2 godziny</string>
<string name="eight_hours">8 godzin</string>
+ <string name="until_further_notice">Ręcznie</string>
+ <string name="pref_input_options">Ustawienia wprowadzania</string>
+ <string name="pref_enter_is_send">Enter wysyła</string>
<string name="pref_enter_is_send_summary">Używaj klawisza Enter do wysyłania wiadomości</string>
<string name="pref_display_enter_key">Pokaż klawisz Enter</string>
<string name="pref_display_enter_key_summary">Zamień klawisz emotikon na klawisz Enter</string>
<string name="audio">plik audio</string>
<string name="video">plik wideo</string>
<string name="image">obraz</string>
+ <string name="pdf_document">Dokument PDF</string>
+ <string name="apk">Aplikacja Androida</string>
<string name="vcard">Kontakt</string>
<string name="received_x_file">Odebrano %s</string>
+ <string name="disable_foreground_service">Wyłącz podtrzymanie pierszego planu usługi</string>
+ <string name="touch_to_open_conversations">Dotknij, aby otworzyć Conversations</string>
<string name="avatar_has_been_published">Avatar został pomyślnie opublikowany!</string>
<string name="sending_x_file">Wysyłanie %s</string>
<string name="offering_x_file">Oferowanie %s</string>
<string name="hide_offline">Ukryj niedostępnych</string>
+ <string name="disable_account">Wyłącz konto</string>
+ <string name="contact_is_typing">%s pisze...</string>
+ <string name="contact_has_stopped_typing">%s przestał(a) pisać</string>
+ <string name="pref_chat_states">Powiadomienia pisania</string>
+ <string name="pref_chat_states_summary">Powiadamiaj rozmówcę, kiedy rozpoczynasz nową wiadomość</string>
+ <string name="send_location">Wyślij lokalizację</string>
+ <string name="show_location">Pokaż lokalizację</string>
+ <string name="no_application_found_to_display_location">Nie odnaleziono aplikacji do wyświetlenia lokalizacji</string>
+ <string name="location">Lokalizacja</string>
+ <string name="received_location">Otrzymano lokalizację</string>
+ <string name="title_undo_swipe_out_conversation">Zamknięto konwersację</string>
+ <string name="title_undo_swipe_out_muc">Opuszczono konferencję</string>
+ <string name="pref_dont_trust_system_cas_title">Nie ufaj certyfikatom systemowym</string>
+ <string name="pref_dont_trust_system_cas_summary">Wymagaj ręcznego potwierdzania certyfikatów</string>
</resources>
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index 4a96a7fe..0f3ec4c7 100644
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -11,6 +11,10 @@
<string name="action_edit_contact">Редактировать контакт</string>
<string name="action_add_phone_book">Добавить в телефонную книгу</string>
<string name="action_delete_contact">Удалить из списка</string>
+ <string name="action_block_contact">Заблокировать контакт</string>
+ <string name="action_unblock_contact">Разблокировать контакт</string>
+ <string name="action_block_domain">Заблокировать домен</string>
+ <string name="action_unblock_domain">Разблокировать домен</string>
<string name="title_activity_manage_accounts">Управление Аккаунтами</string>
<string name="title_activity_settings">Настройки</string>
<string name="title_activity_conference_details">Сведения о Конференции</string>
@@ -18,6 +22,7 @@
<string name="title_activity_sharewith">Поделиться</string>
<string name="title_activity_start_conversation">Начать беседу</string>
<string name="title_activity_choose_contact">Выберите собеседника</string>
+ <string name="title_activity_block_list">Черный список</string>
<string name="just_now">только что</string>
<string name="minute_ago">1 минуту назад</string>
<string name="minutes_ago">%d мин. назад</string>
@@ -31,16 +36,25 @@
<string name="participant">Участник</string>
<string name="visitor">Посетитель</string>
<string name="remove_contact_text">Вы хотите удалить %s из своего списка? Беседы, связанные с этим аккаунтом будут сохранены.</string>
+ <string name="block_contact_text">Вы хотите заблокировать дальнейшие сообщения от %s?</string>
+ <string name="unblock_contact_text">Вы хотите разблокировать пользователя %s?</string>
+ <string name="block_domain_text">Заблокировать всех пользователей домена %s?</string>
+ <string name="unblock_domain_text">Разблокировать всех пользователей домена %s?</string>
+ <string name="contact_blocked">Контакт заблокирован</string>
<string name="remove_bookmark_text">Вы хотите удалить %s из избранного? Беседы, связанные с данной закладкой будут сохранены</string>
<string name="register_account">Создать новый аккаунт на сервере</string>
+ <string name="change_password_on_server">Изменить пароль на сервере</string>
<string name="share_with">Поделиться с</string>
<string name="start_conversation">Начать беседу</string>
<string name="invite_contact">Пригласить собеседника</string>
<string name="contacts">Контакты</string>
<string name="cancel">Отмена</string>
+ <string name="set">Установить</string>
<string name="add">Добавить</string>
<string name="edit">Редактировать</string>
<string name="delete">Удалить</string>
+ <string name="block">Заблокировать</string>
+ <string name="unblock">Разблокировать</string>
<string name="save">Сохранить</string>
<string name="ok">ОК</string>
<string name="crash_report_title">Conversations был неожиданно остановлен</string>
@@ -134,6 +148,8 @@
<string name="account_status_regis_conflict">Имя пользователя уже используется</string>
<string name="account_status_regis_success">Регистрация завершена</string>
<string name="account_status_regis_not_sup">Сервер не поддерживает регистрацию</string>
+ <string name="account_status_security_error">Ошибка безопасности</string>
+ <string name="account_status_incompatible_server">Несовместимый сервер</string>
<string name="encryption_choice_none">Без шифрования</string>
<string name="encryption_choice_otr">OTR</string>
<string name="encryption_choice_pgp">OpenPGP</string>
@@ -164,8 +180,13 @@
<string name="contact_status_offline">не в сети</string>
<string name="muc_details_conference">Конференция</string>
<string name="muc_details_other_members">Другие участники</string>
+ <string name="server_info_show_more">Информация о сервере</string>
+ <string name="server_info_mam">XEP-0313: Сохранение сообщений в архив</string>
<string name="server_info_carbon_messages">Дублирование сообщений</string>
- <string name="server_info_stream_management">Управление потоками</string>
+ <string name="server_info_csi">XEP-0352: Индикатор Состояния Клиента</string>
+ <string name="server_info_blocking">XEP-0191: Команда Блокирования</string>
+ <string name="server_info_roster_version">XEP-0237: Управление версиями списков</string>
+ <string name="server_info_stream_management">XEP-0198: Управление потоками</string>
<string name="server_info_pep">XEP-0163: PEP (Аватары)</string>
<string name="server_info_available">доступен</string>
<string name="server_info_unavailable">недоступен</string>
@@ -192,6 +213,8 @@
<string name="join_conference">Присоединиться к конференции</string>
<string name="delete_contact">Удалить Контакт</string>
<string name="view_contact_details">Посмотреть данные контакта</string>
+ <string name="block_contact">Заблокировать контакт</string>
+ <string name="unblock_contact">Разблокировать контакт</string>
<string name="create">Создать</string>
<string name="contact_already_exists">Контакт уже существует</string>
<string name="join">Присоединиться</string>
@@ -245,8 +268,19 @@
<string name="pref_dont_save_encrypted_summary">Внимание: Это может привести к потере сообщений</string>
<string name="pref_expert_options">Расширенные настройки</string>
<string name="pref_expert_options_summary">Пожалуйста, будьте осторожны с данными настройками</string>
+ <string name="title_activity_about">О Conversations</string>
+ <string name="pref_about_conversations_summary">Информация о билде и лицензировании</string>
+ <string name="title_pref_quiet_hours">Тихие Часы</string>
+ <string name="title_pref_quiet_hours_start_time">Начало</string>
+ <string name="title_pref_quiet_hours_end_time">Окончание</string>
+ <string name="title_pref_enable_quiet_hours">Включить режим «тихих часов»</string>
+ <string name="pref_quiet_hours_summary">Уведомления будут отключены во время «тихих часов»</string>
<string name="pref_use_larger_font">Увеличить размер шрифта</string>
<string name="pref_use_larger_font_summary">Установите больший размер шрифта по всей программе</string>
<string name="pref_use_send_button_to_indicate_status">Использовать кнопку-индикатор</string>
+ <string name="pref_use_indicate_received">Запрос в получении сообщения</string>
+ <string name="pref_use_indicate_received_summary">Если поддерживается, поступившие сообщения будут отмечены зеленой галочкой</string>
<string name="pref_use_send_button_to_indicate_status_summary">Раскрасить кнопку отправить, указывая текущий статус собеседника</string>
+ <string name="pref_expert_options_other">Другие</string>
+ <string name="pref_conference_name">Название конференции</string>
</resources>
diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml
index cb45b4aa..e66bfd19 100644
--- a/src/main/res/values-sk/strings.xml
+++ b/src/main/res/values-sk/strings.xml
@@ -359,7 +359,6 @@
<string name="could_not_change_password">Nepodarilo sa zmeniť heslo</string>
<string name="otr_session_not_started">Poslať správu pre spustenie šifrovaného chatu</string>
<string name="ask_question">Položiť otázku</string>
- <string name="smp_explain_question">Ak máte vy a váš kontakt spoločné tajomstvo, ktoré nikto iný nepozná (napríklad spoločný vtip alebo čo ste mali na obed na vašom poslednom stretnutí), môžete ho použiť na overenie vzájomných identifikátorov.\n\nZadáte pomôcku alebo otázku a kontakt na ňu správne odpovie. </string>
<string name="smp_explain_answer">Váš kontakt by chcel overiť váš identifikátor pomocou spoločného tajomstva. Váš kontakt zadal nasledujúcu pomôcku alebo otázku týkajúcu sa tajomstva. </string>
<string name="shared_secret_hint_should_not_be_empty">Vaša pomôcka by nemala byť prázdna</string>
<string name="shared_secret_can_not_be_empty">Vaše spoločné tajomstvo nemôže byť prázdne</string>
diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml
index 052463c8..3b632cdb 100644
--- a/src/main/res/values-sr/strings.xml
+++ b/src/main/res/values-sr/strings.xml
@@ -427,6 +427,10 @@
<string name="no_application_found_to_display_location">Нема апликације за приказ локације</string>
<string name="location">Локација</string>
<string name="received_location">Примљена локација</string>
+ <string name="title_undo_swipe_out_conversation">Преписка затворена</string>
+ <string name="title_undo_swipe_out_muc">Напусти конференцију</string>
+ <string name="pref_dont_trust_system_cas_title">Не веруј системским сертификационим телима</string>
+ <string name="pref_dont_trust_system_cas_summary">Сви сертификати морају ручно да се одобре</string>
<plurals name="select_contact">
<item quantity="one">Изабери %d контакт</item>
<item quantity="few">Изабери %d контакта</item>
diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml
index 874de244..b411f484 100644
--- a/src/main/res/values-sv/strings.xml
+++ b/src/main/res/values-sv/strings.xml
@@ -427,6 +427,10 @@
<string name="no_application_found_to_display_location">Kunde inte hitta applikation för att visa position</string>
<string name="location">Position</string>
<string name="received_location">Mottog position</string>
+ <string name="title_undo_swipe_out_conversation">Konversation stängd</string>
+ <string name="title_undo_swipe_out_muc">Lämnade konferens</string>
+ <string name="pref_dont_trust_system_cas_title">Lita inte på systemets CAs</string>
+ <string name="pref_dont_trust_system_cas_summary">Alla certifikat måste manuellt godkännas</string>
<plurals name="select_contact">
<item quantity="one">Välj %d kontakt</item>
<item quantity="other">Välj %d kontakter</item>