From 83e1e6468e1ade8f70601195e8c0f2435fec9b25 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 13 Aug 2015 18:25:10 +0200 Subject: fully depend on sm --- .../services/XmppConnectionService.java | 50 +++++++------- .../siacs/conversations/xmpp/XmppConnection.java | 79 +++++++++------------- .../stanzas/AbstractAcknowledgeableStanza.java | 17 +++++ .../conversations/xmpp/stanzas/AbstractStanza.java | 8 --- .../siacs/conversations/xmpp/stanzas/IqPacket.java | 4 +- .../conversations/xmpp/stanzas/MessagePacket.java | 2 +- .../conversations/xmpp/stanzas/PresencePacket.java | 2 +- 7 files changed, 76 insertions(+), 86 deletions(-) create mode 100644 src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractAcknowledgeableStanza.java diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index a9a2f2117..92d992221 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -149,14 +149,25 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa @Override public void onBind(final Account account) { + resetSendingToWaiting(account); account.getRoster().clearPresences(); - account.pendingConferenceJoins.clear(); - account.pendingConferenceLeaves.clear(); fetchRosterFromServer(account); fetchBookmarks(account); sendPresence(account); connectMultiModeConversations(account); - updateConversationUi(); + for (Conversation conversation : account.pendingConferenceLeaves) { + leaveMuc(conversation); + } + account.pendingConferenceLeaves.clear(); + for (Conversation conversation : account.pendingConferenceJoins) { + joinMuc(conversation); + } + account.pendingConferenceJoins.clear(); + mMessageArchiveService.executePendingQueries(account); + mJingleConnectionManager.cancelInTransmission(); + syncDirtyContacts(account); + account.getAxolotlService().publishOwnDeviceIdIfNeeded(); + account.getAxolotlService().publishBundlesIfNeeded(); } }; private final OnMessageAcknowledged mOnMessageAcknowledgedListener = new OnMessageAcknowledged() { @@ -248,14 +259,15 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa mOnAccountUpdate.onAccountUpdate(); } if (account.getStatus() == Account.State.ONLINE) { - for (Conversation conversation : account.pendingConferenceLeaves) { - leaveMuc(conversation); - } - for (Conversation conversation : account.pendingConferenceJoins) { - joinMuc(conversation); + if (connection != null && connection.getFeatures().csi()) { + if (checkListeners()) { + Log.d(Config.LOGTAG, account.getJid().toBareJid()+ " sending csi//inactive"); + connection.sendInactive(); + } else { + Log.d(Config.LOGTAG, account.getJid().toBareJid()+ " sending csi//active"); + connection.sendActive(); + } } - mMessageArchiveService.executePendingQueries(account); - mJingleConnectionManager.cancelInTransmission(); List conversations = getConversations(); for (Conversation conversation : conversations) { if (conversation.getAccount() == account) { @@ -263,21 +275,6 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa sendUnsentMessages(conversation); } } - if (connection != null && connection.getFeatures().csi()) { - if (checkListeners()) { - Log.d(Config.LOGTAG, account.getJid().toBareJid() - + " sending csi//inactive"); - connection.sendInactive(); - } else { - Log.d(Config.LOGTAG, account.getJid().toBareJid() - + " sending csi//active"); - connection.sendActive(); - } - } - syncDirtyContacts(account); - account.getAxolotlService().publishOwnDeviceIdIfNeeded(); - account.getAxolotlService().publishBundlesIfNeeded(); - scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode()); } else if (account.getStatus() == Account.State.OFFLINE) { if (!account.isOptionSet(Account.OPTION_DISABLED)) { @@ -859,7 +856,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": fetching roster"); } iqPacket.query(Xmlns.ROSTER).setAttribute("ver", account.getRosterVersion()); - sendIqPacket(account,iqPacket,mIqParser); + sendIqPacket(account, iqPacket, mIqParser); } public void fetchBookmarks(final Account account) { @@ -1478,6 +1475,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } } + public void joinMuc(Conversation conversation) { Account account = conversation.getAccount(); account.pendingConferenceJoins.remove(conversation); diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 5ac089766..1aa2d563a 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -1,13 +1,10 @@ package eu.siacs.conversations.xmpp; -import android.content.Context; -import android.content.SharedPreferences; import android.os.Bundle; import android.os.Parcelable; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.SystemClock; -import android.preference.PreferenceManager; import android.util.Log; import android.util.Pair; import android.util.SparseArray; @@ -65,6 +62,7 @@ import eu.siacs.conversations.xmpp.jid.InvalidJidException; import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.jingle.OnJinglePacketReceived; import eu.siacs.conversations.xmpp.jingle.stanzas.JinglePacket; +import eu.siacs.conversations.xmpp.stanzas.AbstractAcknowledgeableStanza; import eu.siacs.conversations.xmpp.stanzas.AbstractStanza; import eu.siacs.conversations.xmpp.stanzas.IqPacket; import eu.siacs.conversations.xmpp.stanzas.MessagePacket; @@ -94,7 +92,7 @@ public class XmppConnection implements Runnable { private String streamId = null; private int smVersion = 3; - private final SparseArray mStanzaReceipts = new SparseArray<>(); + private final SparseArray mStanzaQueue = new SparseArray<>(); private int stanzasReceived = 0; private int stanzasSent = 0; @@ -342,22 +340,19 @@ public class XmppConnection implements Runnable { Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": session resumed"); } acknowledgeStanzaUpTo(serverCount); - ArrayList failedIqPackets = new ArrayList<>(); - for(int i = 0; i < this.mStanzaReceipts.size(); ++i) { - String id = mStanzaReceipts.valueAt(i); - Pair pair = id == null ? null : this.packetCallbacks.get(id); - if (pair != null) { - failedIqPackets.add(pair.first); - } + ArrayList failedStanzas = new ArrayList<>(); + for(int i = 0; i < this.mStanzaQueue.size(); ++i) { + failedStanzas.add(mStanzaQueue.valueAt(i)); } - mStanzaReceipts.clear(); - Log.d(Config.LOGTAG,"resending "+failedIqPackets.size()+" iq stanza"); - for(IqPacket packet : failedIqPackets) { - sendUnmodifiedIqPacket(packet,null); + mStanzaQueue.clear(); + Log.d(Config.LOGTAG,"resending "+failedStanzas.size()+" stanzas"); + for(AbstractAcknowledgeableStanza packet : failedStanzas) { + sendPacket(packet); } } catch (final NumberFormatException ignored) { } - sendInitialPing(); + Log.d(Config.LOGTAG, account.getJid().toBareJid()+ ": online with resource " + account.getResource()); + changeStatus(Account.State.ONLINE); } else if (nextTag.isStart("r")) { tagReader.readElement(nextTag); if (Config.EXTENDED_SM_LOGGING) { @@ -399,36 +394,22 @@ public class XmppConnection implements Runnable { } private void acknowledgeStanzaUpTo(int serverCount) { - for (int i = 0; i < mStanzaReceipts.size(); ++i) { - if (serverCount >= mStanzaReceipts.keyAt(i)) { + for (int i = 0; i < mStanzaQueue.size(); ++i) { + if (serverCount >= mStanzaQueue.keyAt(i)) { if (Config.EXTENDED_SM_LOGGING) { - Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": server acknowledged stanza #" + mStanzaReceipts.keyAt(i)); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": server acknowledged stanza #" + mStanzaQueue.keyAt(i)); } - String id = mStanzaReceipts.valueAt(i); - if (acknowledgedListener != null) { - acknowledgedListener.onMessageAcknowledged(account, id); + AbstractAcknowledgeableStanza stanza = mStanzaQueue.valueAt(i); + if (stanza instanceof MessagePacket && acknowledgedListener != null) { + MessagePacket packet = (MessagePacket) stanza; + acknowledgedListener.onMessageAcknowledged(account, packet.getId()); } - mStanzaReceipts.removeAt(i); + mStanzaQueue.removeAt(i); i--; } } } - private void sendInitialPing() { - Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": sending intial ping"); - final IqPacket iq = new IqPacket(IqPacket.TYPE.GET); - iq.setFrom(account.getJid()); - iq.addChild("ping", "urn:xmpp:ping"); - this.sendIqPacket(iq, new OnIqPacketReceived() { - @Override - public void onIqPacketReceived(final Account account, final IqPacket packet) { - Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() - + ": online with resource " + account.getResource()); - changeStatus(Account.State.ONLINE); - } - }); - } - private Element processPacket(final Tag currentTag, final int packetType) throws XmlPullParserException, IOException { Element element; @@ -775,7 +756,7 @@ public class XmppConnection implements Runnable { final EnablePacket enable = new EnablePacket(smVersion); tagWriter.writeStanzaAsync(enable); stanzasSent = 0; - mStanzaReceipts.clear(); + mStanzaQueue.clear(); } features.carbonsEnabled = false; features.blockListRequested = false; @@ -783,10 +764,11 @@ public class XmppConnection implements Runnable { sendServiceDiscoveryInfo(account.getServer()); sendServiceDiscoveryInfo(account.getJid().toBareJid()); sendServiceDiscoveryItems(account.getServer()); + Log.d(Config.LOGTAG, account.getJid().toBareJid()+ ": online with resource " + account.getResource()); + changeStatus(Account.State.ONLINE); if (bindListener != null) { bindListener.onBind(account); } - sendInitialPing(); } private void sendServiceDiscoveryInfo(final Jid jid) { @@ -937,16 +919,17 @@ public class XmppConnection implements Runnable { return; } final String name = packet.getName(); - if (name.equals("iq") || name.equals("message") || name.equals("presence")) { - ++stanzasSent; - } tagWriter.writeStanzaAsync(packet); - if ((packet instanceof MessagePacket || packet instanceof IqPacket) && packet.getId() != null && this.streamId != null) { - if (Config.EXTENDED_SM_LOGGING) { - Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": requesting ack for stanza #" + stanzasSent); + if (packet instanceof AbstractAcknowledgeableStanza) { + AbstractAcknowledgeableStanza stanza = (AbstractAcknowledgeableStanza) packet; + ++stanzasSent; + this.mStanzaQueue.put(stanzasSent, stanza); + if (stanza instanceof MessagePacket && stanza.getId() != null && this.streamId != null) { + if (Config.EXTENDED_SM_LOGGING) { + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": requesting ack for message stanza #" + stanzasSent); + } + tagWriter.writeStanzaAsync(new RequestPacket(this.smVersion)); } - this.mStanzaReceipts.put(stanzasSent, packet.getId()); - tagWriter.writeStanzaAsync(new RequestPacket(this.smVersion)); } } diff --git a/src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractAcknowledgeableStanza.java b/src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractAcknowledgeableStanza.java new file mode 100644 index 000000000..a5de4a847 --- /dev/null +++ b/src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractAcknowledgeableStanza.java @@ -0,0 +1,17 @@ +package eu.siacs.conversations.xmpp.stanzas; + +abstract public class AbstractAcknowledgeableStanza extends AbstractStanza { + + protected AbstractAcknowledgeableStanza(String name) { + super(name); + } + + + public String getId() { + return this.getAttribute("id"); + } + + public void setId(final String id) { + setAttribute("id", id); + } +} diff --git a/src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractStanza.java b/src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractStanza.java index bd706b57b..a6144df28 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractStanza.java +++ b/src/main/java/eu/siacs/conversations/xmpp/stanzas/AbstractStanza.java @@ -18,10 +18,6 @@ public class AbstractStanza extends Element { return getAttributeAsJid("from"); } - public String getId() { - return this.getAttribute("id"); - } - public void setTo(final Jid to) { if (to != null) { setAttribute("to", to.toString()); @@ -34,10 +30,6 @@ public class AbstractStanza extends Element { } } - public void setId(final String id) { - setAttribute("id", id); - } - public boolean fromServer(final Account account) { return getFrom() == null || getFrom().equals(account.getServer()) diff --git a/src/main/java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java b/src/main/java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java index 398102e12..daf54b513 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java +++ b/src/main/java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java @@ -2,9 +2,9 @@ package eu.siacs.conversations.xmpp.stanzas; import eu.siacs.conversations.xml.Element; -public class IqPacket extends AbstractStanza { +public class IqPacket extends AbstractAcknowledgeableStanza { - public static enum TYPE { + public enum TYPE { ERROR, SET, RESULT, diff --git a/src/main/java/eu/siacs/conversations/xmpp/stanzas/MessagePacket.java b/src/main/java/eu/siacs/conversations/xmpp/stanzas/MessagePacket.java index 6b6909125..941b4b5f6 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/stanzas/MessagePacket.java +++ b/src/main/java/eu/siacs/conversations/xmpp/stanzas/MessagePacket.java @@ -5,7 +5,7 @@ import android.util.Pair; import eu.siacs.conversations.parser.AbstractParser; import eu.siacs.conversations.xml.Element; -public class MessagePacket extends AbstractStanza { +public class MessagePacket extends AbstractAcknowledgeableStanza { public static final int TYPE_CHAT = 0; public static final int TYPE_NORMAL = 2; public static final int TYPE_GROUPCHAT = 3; diff --git a/src/main/java/eu/siacs/conversations/xmpp/stanzas/PresencePacket.java b/src/main/java/eu/siacs/conversations/xmpp/stanzas/PresencePacket.java index 7ea320995..c321498d8 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/stanzas/PresencePacket.java +++ b/src/main/java/eu/siacs/conversations/xmpp/stanzas/PresencePacket.java @@ -1,6 +1,6 @@ package eu.siacs.conversations.xmpp.stanzas; -public class PresencePacket extends AbstractStanza { +public class PresencePacket extends AbstractAcknowledgeableStanza { public PresencePacket() { super("presence"); -- cgit v1.2.3 From e8e0eccd82df13f1a589abce55b9e54325569223 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 15 Aug 2015 19:26:52 +0200 Subject: version bump to 1.7.0-alpha to start new development cycle --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index d6f77ebf5..f6a34c329 100644 --- a/build.gradle +++ b/build.gradle @@ -48,8 +48,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 21 - versionCode 83 - versionName "1.6.0" + versionCode 84 + versionName "1.7.0-alpha" } compileOptions { -- cgit v1.2.3 From 85eb81b09532bfbf755a20b0d428649f4b565748 Mon Sep 17 00:00:00 2001 From: "Christian S." Date: Sat, 15 Aug 2015 19:57:55 +0200 Subject: Update CHANGELOG.md --- CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aaed07a7b..bf409cc6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ * new multi-end-to-multi-end encryption method * show unexpected encryption changes as red chat bubbles * always notify in private/non-anonymous conferences +* some bugfixes +* hard coded pix-art.de as standard server ####Version 1.5.2 * added new message bubbles @@ -13,11 +15,13 @@ ####Version 1.5.1 * fixed rare crashes * improved otr support +* moved typing info to ActionBar ####Version 1.5.0 -* upload files to HTTP host and share them in MUCs. requires new [HttpUploadComponent](https://github.com/siacs/HttpUploadComponent) on server side -* bigger avatars +* new file transfer mode to offline contacts and conferences for files smaller than 20 MB: upload files to HTTP host and share them in MUCs. requires new [HttpUploadComponent](https://github.com/siacs/HttpUploadComponent) on server side * default image format is JPEG +* small layout modifications with bigger avatars +* show contacts name in locations shared in conferences ####Version 1.4.5 * fixes to message parser to not display some ejabberd muc status messages -- cgit v1.2.3 From c082066118431a380dc62892c4363f73591b6666 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 16 Aug 2015 11:50:33 +0200 Subject: catch null pointer in ScramSHA1 sasl --- src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java b/src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java index c95a62df3..f47677f6e 100644 --- a/src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java +++ b/src/main/java/eu/siacs/conversations/crypto/sasl/ScramSha1.java @@ -101,6 +101,9 @@ public class ScramSha1 extends SaslMechanism { public String getResponse(final String challenge) throws AuthenticationException { switch (state) { case AUTH_TEXT_SENT: + if (challenge == null) { + throw new AuthenticationException("challenge can not be null"); + } serverFirstMessage = Base64.decode(challenge, Base64.DEFAULT); final Tokenizer tokenizer = new Tokenizer(serverFirstMessage); String nonce = ""; -- cgit v1.2.3 From 51a2645349e43c5e780b352f7e76fc5aeae1cfde Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 16 Aug 2015 12:12:22 +0200 Subject: synchronize packetCallbacks --- .../siacs/conversations/xmpp/XmppConnection.java | 55 ++++++++++++---------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 5ac089766..44e146146 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -152,7 +152,6 @@ public class XmppConnection implements Runnable { shouldAuthenticate = shouldBind = !account.isOptionSet(Account.OPTION_REGISTER); tagReader = new XmlReader(wakeLock); tagWriter = new TagWriter(); - packetCallbacks.clear(); this.changeStatus(Account.State.CONNECTING); if (DNSHelper.isIp(account.getServer().toString())) { socket = new Socket(); @@ -489,26 +488,28 @@ public class XmppConnection implements Runnable { this.jingleListener.onJinglePacketReceived(account,(JinglePacket) packet); } } else { - if (packetCallbacks.containsKey(packet.getId())) { - final Pair packetCallbackDuple = packetCallbacks.get(packet.getId()); - // Packets to the server should have responses from the server - if (packetCallbackDuple.first.toServer(account)) { - if (packet.fromServer(account)) { - packetCallbackDuple.second.onIqPacketReceived(account, packet); - packetCallbacks.remove(packet.getId()); - } else { - Log.e(Config.LOGTAG,account.getJid().toBareJid().toString()+": ignoring spoofed iq packet"); - } - } else { - if (packet.getFrom().equals(packetCallbackDuple.first.getTo())) { - packetCallbackDuple.second.onIqPacketReceived(account, packet); - packetCallbacks.remove(packet.getId()); + synchronized (this.packetCallbacks) { + if (packetCallbacks.containsKey(packet.getId())) { + final Pair packetCallbackDuple = packetCallbacks.get(packet.getId()); + // Packets to the server should have responses from the server + if (packetCallbackDuple.first.toServer(account)) { + if (packet.fromServer(account)) { + packetCallbackDuple.second.onIqPacketReceived(account, packet); + packetCallbacks.remove(packet.getId()); + } else { + Log.e(Config.LOGTAG, account.getJid().toBareJid().toString() + ": ignoring spoofed iq packet"); + } } else { - Log.e(Config.LOGTAG,account.getJid().toBareJid().toString()+": ignoring spoofed iq packet"); + if (packet.getFrom().equals(packetCallbackDuple.first.getTo())) { + packetCallbackDuple.second.onIqPacketReceived(account, packet); + packetCallbacks.remove(packet.getId()); + } else { + Log.e(Config.LOGTAG, account.getJid().toBareJid().toString() + ": ignoring spoofed iq packet"); + } } + } else if (packet.getType() == IqPacket.TYPE.GET || packet.getType() == IqPacket.TYPE.SET) { + this.unregisteredIqListener.onIqPacketReceived(account, packet); } - } else if (packet.getType() == IqPacket.TYPE.GET|| packet.getType() == IqPacket.TYPE.SET) { - this.unregisteredIqListener.onIqPacketReceived(account, packet); } } } @@ -739,13 +740,15 @@ public class XmppConnection implements Runnable { } private void clearIqCallbacks() { - Log.d(Config.LOGTAG,account.getJid().toBareJid()+": clearing iq iq callbacks"); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": clearing iq iq callbacks"); final IqPacket failurePacket = new IqPacket(IqPacket.TYPE.ERROR); - Iterator>> iterator = this.packetCallbacks.entrySet().iterator(); - while(iterator.hasNext()) { - Entry> entry = iterator.next(); - entry.getValue().second.onIqPacketReceived(account,failurePacket); - iterator.remove(); + synchronized (this.packetCallbacks) { + Iterator>> iterator = this.packetCallbacks.entrySet().iterator(); + while (iterator.hasNext()) { + Entry> entry = iterator.next(); + entry.getValue().second.onIqPacketReceived(account, failurePacket); + iterator.remove(); + } } } @@ -917,7 +920,9 @@ public class XmppConnection implements Runnable { packet.setAttribute("id", id); } if (callback != null) { - packetCallbacks.put(packet.getId(), new Pair<>(packet, callback)); + synchronized (this.packetCallbacks) { + packetCallbacks.put(packet.getId(), new Pair<>(packet, callback)); + } } this.sendPacket(packet); } -- cgit v1.2.3 From 344a266c3eb2e0a1c1c49fa8fbcf4703a2bad504 Mon Sep 17 00:00:00 2001 From: "Christian S." Date: Sun, 16 Aug 2015 13:10:24 +0200 Subject: reduced image preview size --- src/main/java/eu/siacs/conversations/services/NotificationService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 7dcf2e83a..adfd96fe6 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -295,7 +295,7 @@ public class NotificationService { final ArrayList messages, final boolean notify) { try { final Bitmap bitmap = mXmppConnectionService.getFileBackend() - .getThumbnail(message, getPixel(288), false); + .getThumbnail(message, getPixel(200), false); final ArrayList tmp = new ArrayList<>(); for (final Message msg : messages) { if (msg.getType() == Message.TYPE_TEXT -- cgit v1.2.3 From d7b3060fc856ca5fb0f4bcc1022531487e96e58f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 16 Aug 2015 14:55:24 +0200 Subject: catch broken base64 in avatars --- src/main/java/eu/siacs/conversations/persistance/FileBackend.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 6e5a1ae35..f18266d99 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -358,11 +358,7 @@ public class FileBackend { file.delete(); return false; } - } catch (FileNotFoundException e) { - return false; - } catch (IOException e) { - return false; - } catch (NoSuchAlgorithmException e) { + } catch (IllegalArgumentException | IOException | NoSuchAlgorithmException e) { return false; } finally { close(os); -- cgit v1.2.3 From 5b1dda91486aab7130aee56ba3f98aa966a9b3fb Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 16 Aug 2015 14:55:40 +0200 Subject: deal with broken frameworks --- src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 44e146146..17b3c3ffb 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -198,10 +198,7 @@ public class XmppConnection implements Runnable { socket = new Socket(); socket.connect(addr, Config.SOCKET_TIMEOUT * 1000); socketError = false; - } catch (final UnknownHostException e) { - Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage()); - i++; - } catch (final IOException e) { + } catch (final Throwable e) { Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage()); i++; } -- cgit v1.2.3 From 569bc435d35e79e667045aa5ed861439ebf5363c Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 16 Aug 2015 15:00:27 +0200 Subject: increased version code --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d6f77ebf5..0537d3961 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 21 - versionCode 83 + versionCode 84 versionName "1.6.0" } -- cgit v1.2.3 From cd5fea0fc54cad325f8f195257e33cf4d680034a Mon Sep 17 00:00:00 2001 From: "Christian S." Date: Sun, 16 Aug 2015 15:29:16 +0200 Subject: added translation for undo string --- src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index d1d593476..1bd1fd4f9 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -511,4 +511,5 @@ Download failed: Server not found Download failed: File not found Download failed: Could not connect to host + undo -- cgit v1.2.3 From f8b203ffff9810d582d40fcadbfb93662a1c8586 Mon Sep 17 00:00:00 2001 From: "Christian S." Date: Sun, 16 Aug 2015 15:30:05 +0200 Subject: added German translation for undo string --- src/main/res/values-de/strings.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 05c273054..ab4bc02bc 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -450,6 +450,7 @@ Nach Kontakten oder Konferenzen suchen schreibt... Benutzername - Benutzername - Das ist kein gültiger Benutzername + Benutzername + Das ist kein gültiger Benutzername + Rückgängig -- cgit v1.2.3 From 81aeef7f5826bd28873ee69016aea099baa72442 Mon Sep 17 00:00:00 2001 From: Christian S Date: Tue, 18 Aug 2015 16:23:10 +0200 Subject: add subtitle to ActionBar in chatviews * display typing information in ActionBar as subtitle for single user chats * display participants in ActionBar as subtitle for conferences --- .../eu/siacs/conversations/entities/Conversation.java | 13 +++++++++++++ .../siacs/conversations/ui/ConversationActivity.java | 19 +++++++++++++++++-- .../siacs/conversations/ui/ConversationFragment.java | 4 ++-- src/main/res/values-bg/strings.xml | 1 + src/main/res/values-ca/strings.xml | 1 + src/main/res/values-cs/strings.xml | 1 + src/main/res/values-de/strings.xml | 1 + src/main/res/values-el/strings.xml | 1 + src/main/res/values-es/strings.xml | 1 + src/main/res/values-eu/strings.xml | 1 + src/main/res/values-fr/strings.xml | 1 + src/main/res/values-id/strings.xml | 1 + src/main/res/values-it/strings.xml | 1 + src/main/res/values-ja/strings.xml | 1 + src/main/res/values-ko/strings.xml | 1 + src/main/res/values-nl/strings.xml | 1 + src/main/res/values-pl/strings.xml | 1 + src/main/res/values-pt/strings.xml | 1 + src/main/res/values-ru/strings.xml | 1 + src/main/res/values-sk/strings.xml | 1 + src/main/res/values-sr/strings.xml | 1 + src/main/res/values-sv/strings.xml | 1 + src/main/res/values/strings.xml | 1 + 23 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 9f9f34cf8..6584bddf8 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -343,6 +343,19 @@ public class Conversation extends AbstractEntity implements Blockable { return this.getContact().getDisplayName(); } } + + public String getParticipants() { + if (getMode() == MODE_MULTI) { + String generatedName = getMucOptions().createNameFromParticipants(); + if (generatedName != null) { + return generatedName; + } else { + return null; + } + } else { + return null; + } + } public String getAccountUuid() { return this.accountUuid; diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index 219a4fcac..cc64953c6 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -51,6 +51,7 @@ import eu.siacs.conversations.services.XmppConnectionService.OnRosterUpdate; import eu.siacs.conversations.ui.adapter.ConversationAdapter; import eu.siacs.conversations.utils.ExceptionHelper; import eu.siacs.conversations.xmpp.OnUpdateBlocklist; +import eu.siacs.conversations.xmpp.chatstate.ChatState; import eu.siacs.conversations.xmpp.jid.InvalidJidException; import eu.siacs.conversations.xmpp.jid.Jid; @@ -326,13 +327,27 @@ public class ConversationActivity extends XmppActivity ab.setHomeButtonEnabled(true); if (conversation.getMode() == Conversation.MODE_SINGLE || useSubjectToIdentifyConference()) { ab.setTitle(conversation.getName()); + if (conversation.getMode() == Conversation.MODE_SINGLE) { + ChatState state = conversation.getIncomingChatState(); + if (state == ChatState.COMPOSING) { + ab.setSubtitle(getString(R.string.is_typing)); + } else if (state == ChatState.PAUSED) { + ab.setSubtitle(null); + } else { + ab.setSubtitle(null); + } + } else if (useSubjectToIdentifyConference()){ + ab.setSubtitle(conversation.getParticipants()); + } } else { ab.setTitle(conversation.getJid().toBareJid().toString()); + ab.setSubtitle(null); } } else { ab.setDisplayHomeAsUpEnabled(false); - ab.setHomeButtonEnabled(false); - ab.setTitle(R.string.app_name); + ab.setHomeButtonEnabled(false); + ab.setTitle(R.string.app_name); + ab.setSubtitle(null); } } } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index de758efc1..648c6c4da 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -1000,9 +1000,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa if (conversation.getMode() == Conversation.MODE_SINGLE) { ChatState state = conversation.getIncomingChatState(); if (state == ChatState.COMPOSING) { - this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_is_typing, conversation.getName()))); + //this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_is_typing, conversation.getName()))); } else if (state == ChatState.PAUSED) { - this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_has_stopped_typing, conversation.getName()))); + //this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_has_stopped_typing, conversation.getName()))); } else { for (int i = this.messageList.size() - 1; i >= 0; --i) { if (this.messageList.get(i).getStatus() == Message.STATUS_RECEIVED) { diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index 17c9061c6..eaa680863 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -415,6 +415,7 @@ Скриване на тези извън линия Деактивиране на профила %s пише... + пише... %s спря да пише Известия за писането Позволяване на контакта Ви да вижда, когато пишете ново съобщение diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml index 74d87736b..643ff62fb 100644 --- a/src/main/res/values-ca/strings.xml +++ b/src/main/res/values-ca/strings.xml @@ -412,6 +412,7 @@ Amaga el fora de línia Deshabilita el compte %s està escrivint... + està escrivint... %s ha deixat d\'escriure Notificacions d\'escriptura Permet el teu contacte saber quan estàs escrivint un missatge nou diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index 6463d7638..6f1cce0ad 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -415,6 +415,7 @@ Skrýt offline Vypnout účet %s píše... + píše... %s přestal(a) psát Upozornění při psaní Oznamovat kontaktům že píšete novou zprávu diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 8c77d0a82..2d9caef9b 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -415,6 +415,7 @@ verstecke offline Konto abschalten %s schreibt… + schreibt… %s schreibt nicht mehr Tipp-Benachrichtigung Informiere deine Kontakte, wenn du eine Nachricht eintippst. diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index b9fc352ce..fbafcaaa2 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -412,6 +412,7 @@ Απόκρυψη των εκτός σύνδεσης Απενεργοποίηση λογαριασμού Ο χρήστης %s γράφει... + Ο χρήστης γράφει... Ο χρήστης %s σταμάτησε να γράφει Ειδοποιήσεις πληκτρολόγησης Επιτρέψτε στην επαφή σας να γνωρίζει πότε γράφετε ένα νέο μήνυμα diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index f1b5d54c0..b6f89b572 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -415,6 +415,7 @@ Ocultar desconectados Deshabilitar Cuenta %s está escribiendo... + está escribiendo... %s ha dejado de escribir Notificación de escritura Permite a tus contactos saber cuando estás escribiendo un nuevo mensaje diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index 0bb59671f..15b783fd2 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -415,6 +415,7 @@ Lineaz kanpokoak ezkutatu Kontua ezgaitu %s idazten ari da... + idazten ari da... %s(e)k idazteari utzi dio Idazketa jakinarazpenak Zure kontaktuak mezu berri bat noiz idazten ari zaren jakin dezan baimendu diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 646f54141..d8849b46f 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -411,6 +411,7 @@ Cacher hors-ligne Désactiver le compte %s écrit un message... + écrit un message... %s a arrêté d\'écrire Notifications d\'écriture Permettre à votre contact de savoir que vous écrivez un message diff --git a/src/main/res/values-id/strings.xml b/src/main/res/values-id/strings.xml index f859bde1a..ea818150c 100644 --- a/src/main/res/values-id/strings.xml +++ b/src/main/res/values-id/strings.xml @@ -412,6 +412,7 @@ Sembunyikan Offline Nonaktifkan Akun %s sedang mengetik... + sedang mengetik... %s telah berhenti mengetik Notifikasi ketik pesan Biarkan kontak Anda tahu ketika Anda sedang menulis pesan baru diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index 372b87e24..0d17957fe 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -413,6 +413,7 @@ Nascondi i contatti offline Disabilita l\'account %s sta digitando... + sta digitando... %s ha smesso di digitare Permetti al tuo contatto di vedere quando stai digitando Invia la posizione diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index 35ccc7dd6..2b653fdbc 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -415,6 +415,7 @@ オフラインを非表示にする アカウントを無効にする %s は入力中... + は入力中... %s は入力を停止しました 入力中通知 あなたが新しいメッセージを書いている時に、連絡先に知らせます diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml index a164dd101..5c51b293a 100644 --- a/src/main/res/values-ko/strings.xml +++ b/src/main/res/values-ko/strings.xml @@ -412,6 +412,7 @@ 오프라인 숨기기 계정 해제 %s 이(가) 입력중입니다... + 이(가) 입력중입니다... %s 이(가) 입력을 중단했습니다 입력 알림 새 메세지를 작성할 때 이를 연락처에게 알립니다 diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index a4ef81abd..91571a365 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -415,6 +415,7 @@ Offline verbergen Account uitzetten %s is aan het typen... + is aan het typen... %s is gestopt met typen Aan het typen meldingen Laat je contacten weten wanneer je een nieuw bericht aan het schrijven bent diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index fb94c6051..a1520abb0 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -412,6 +412,7 @@ Ukryj niedostępnych Wyłącz konto %s pisze... + pisze... %s przestał(a) pisać Powiadomienia pisania Powiadamiaj rozmówcę, kiedy rozpoczynasz nową wiadomość diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml index 041b5e2dc..08238d66a 100644 --- a/src/main/res/values-pt/strings.xml +++ b/src/main/res/values-pt/strings.xml @@ -285,6 +285,7 @@ Enviando %s Oferecendo %s %s está digitando... + está digitando... %s parou de digitar Notificações de digitação Enviar localização diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index 053a675c9..61a51b6a4 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -412,6 +412,7 @@ Скрыть пользователей вне сети Отключить учётную запись %s набирает сообщение... + набирает сообщение... %s прекратил набор Оповещения о наборе Позволяет вашим контактам видеть когда вы пишете новое сообщение diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index 6f3bf982c..82a4e9131 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -414,6 +414,7 @@ Skryť neprihlásených Vypnúť účet %s píše... + píše... %s prestal písať Upozornenia pri písaní Upozorniť kontakt, keď píšete novú správu diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index 96db8b7e3..dee7bb6f1 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -415,6 +415,7 @@ Сакриј неповезане Онемогући налог %s куца... + куца... %s престаде да куца Обавештења о куцању Обзнаните контакту кад куцате нову поруку diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index 6c4436a8b..116c52702 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -415,6 +415,7 @@ Dölj ej anslutna Deaktivera konton %s skriver... + skriver... %s har slutat skriva Skriv-notifieringar Låter dina kontakter veta när du skriver ett nytt meddelande diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index aa5bbec56..cccae4b2e 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -463,6 +463,7 @@ Hide offline Disable Account %s is typing... + is typing... %s has stopped typing Typing notifications Let your contact know when you are writing a new message -- cgit v1.2.3 From 9ebd6d503cc6e80383e441171d06730fce52bd9d Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 19 Aug 2015 12:24:42 +0200 Subject: catch package manager has died exception --- src/main/java/eu/siacs/conversations/utils/PhoneHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/utils/PhoneHelper.java b/src/main/java/eu/siacs/conversations/utils/PhoneHelper.java index b90f06ff9..a37f60a0f 100644 --- a/src/main/java/eu/siacs/conversations/utils/PhoneHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/PhoneHelper.java @@ -97,7 +97,7 @@ public class PhoneHelper { if (packageName != null) { try { return context.getPackageManager().getPackageInfo(packageName, 0).versionName; - } catch (final PackageManager.NameNotFoundException e) { + } catch (final PackageManager.NameNotFoundException | RuntimeException e) { return "unknown"; } } else { -- cgit v1.2.3 From 6e1870b00acf565bb92bcb14b9c9ee8e71020bb4 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 19 Aug 2015 12:25:17 +0200 Subject: check if inputstream is null before cropping avatar images --- src/main/java/eu/siacs/conversations/persistance/FileBackend.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index f18266d99..00637257c 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -385,6 +385,9 @@ public class FileBackend { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = calcSampleSize(image, size); is = mXmppConnectionService.getContentResolver().openInputStream(image); + if (is == null) { + return null; + } Bitmap input = BitmapFactory.decodeStream(is, null, options); if (input == null) { return null; @@ -411,6 +414,9 @@ public class FileBackend { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = calcSampleSize(image,Math.max(newHeight, newWidth)); is = mXmppConnectionService.getContentResolver().openInputStream(image); + if (is == null) { + return null; + } Bitmap source = BitmapFactory.decodeStream(is, null, options); if (source == null) { return null; -- cgit v1.2.3 From 52f0622dd3b3d74311f9326ac523dad17b98356a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 19 Aug 2015 12:47:50 +0200 Subject: fixed nasty 'stuck at sending' bug that got introduced in 32826ec29d28668b7f345ffcd45cd876dc980153 --- src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index a9a2f2117..b89de6284 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -280,6 +280,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode()); } else if (account.getStatus() == Account.State.OFFLINE) { + resetSendingToWaiting(account); if (!account.isOptionSet(Account.OPTION_DISABLED)) { int timeToReconnect = mRandom.nextInt(20) + 10; scheduleWakeUpCall(timeToReconnect,account.getUuid().hashCode()); -- cgit v1.2.3 From 9e26375d2fcad898c2c4e82366725d8e78710e8e Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 19 Aug 2015 13:00:52 +0200 Subject: simulate old behaviour with messages being set to waiting while offline --- .../siacs/conversations/services/XmppConnectionService.java | 1 - .../java/eu/siacs/conversations/xmpp/XmppConnection.java | 12 ++++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 0ffe4e37f..e0f8d8d23 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -149,7 +149,6 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa @Override public void onBind(final Account account) { - resetSendingToWaiting(account); account.getRoster().clearPresences(); fetchRosterFromServer(account); fetchBookmarks(account); diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 46daf5774..e2c9e25ff 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -49,6 +49,7 @@ import eu.siacs.conversations.crypto.sasl.Plain; import eu.siacs.conversations.crypto.sasl.SaslMechanism; import eu.siacs.conversations.crypto.sasl.ScramSha1; import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.generator.IqGenerator; import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.utils.CryptoHelper; @@ -316,7 +317,7 @@ public class XmppConnection implements Runnable { + ") enabled (resumable)"); } else { Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() - + ": stream managment(" + smVersion + ") enabled"); + + ": stream management(" + smVersion + ") enabled"); } this.lastSessionStarted = SystemClock.elapsedRealtime(); this.stanzasReceived = 0; @@ -343,6 +344,13 @@ public class XmppConnection implements Runnable { mStanzaQueue.clear(); Log.d(Config.LOGTAG,"resending "+failedStanzas.size()+" stanzas"); for(AbstractAcknowledgeableStanza packet : failedStanzas) { + if (packet instanceof MessagePacket) { + MessagePacket message = (MessagePacket) packet; + mXmppConnectionService.markMessage(account, + message.getTo().toBareJid(), + message.getId(), + Message.STATUS_UNSEND); + } sendPacket(packet); } } catch (final NumberFormatException ignored) { @@ -764,7 +772,7 @@ public class XmppConnection implements Runnable { sendServiceDiscoveryInfo(account.getServer()); sendServiceDiscoveryInfo(account.getJid().toBareJid()); sendServiceDiscoveryItems(account.getServer()); - Log.d(Config.LOGTAG, account.getJid().toBareJid()+ ": online with resource " + account.getResource()); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": online with resource " + account.getResource()); changeStatus(Account.State.ONLINE); if (bindListener != null) { bindListener.onBind(account); -- cgit v1.2.3 From 7c822c9b758ca7765d83779226e8961ba589c52e Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 19 Aug 2015 13:03:14 +0200 Subject: pulled translations from transifex --- src/main/res/values-bg/strings.xml | 47 ++++-- src/main/res/values-cs/strings.xml | 29 +++- src/main/res/values-de/strings.xml | 29 +++- src/main/res/values-es/strings.xml | 29 +++- src/main/res/values-eu/strings.xml | 29 +++- src/main/res/values-it/strings.xml | 1 - src/main/res/values-ja/strings.xml | 33 ++++- src/main/res/values-nl/strings.xml | 285 ++++++++++++++++++++----------------- src/main/res/values-pl/strings.xml | 2 + src/main/res/values-sk/strings.xml | 4 +- src/main/res/values-sr/strings.xml | 31 +++- src/main/res/values-sv/strings.xml | 29 +++- 12 files changed, 397 insertions(+), 151 deletions(-) diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index 17c9061c6..e21a6cee6 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -76,9 +76,10 @@ Изтриване на съобщенията Този разговор да приключи след това Изберете присъствие за контакта - Изпращане на обикновено текстово съобщение - Изпращане на съобщение, шифровано чрез OTP - Изпращане на съобщение, шифровано чрез OpenPGP + Изпр. на обикновено текстово съобщение + Изпр. на съобщение, шифр. чрез OTP + Изпр. на съобщение, шифр. чрез OMEMO + Изпр. на съобщение, шифр. чрез OpenPGP Псевдонимът Ви беше променен Изпращане нешифровано Неуспешно дешифроване. Възможно е да нямате правилния частен ключ. @@ -105,6 +106,8 @@ Също така да има и вибрация при получаване на ново съобщение Звук Изпълнение на звук с известието + Известия в публичните беседи + Известяване винаги, когато пристигне ново съобщение в публична беседа, а не само когато тя е отбелязана Продължителност на отсрочване на известията Изключва известията за кратко, след като бъде получено копие на съобщение Разширени настройки @@ -150,6 +153,7 @@ Обикновен текст OTR OpenPGP + OMEMO Редактиране на профила Изтриване на профила Временно деактивиране @@ -197,11 +201,18 @@ последно видян преди %d дни не е виждан никога Шифровано съобщение. Моля, инсталирайте OpenKeychain, за да го дешифровате. - Непознат OTR отпечатък + Непознат отпечатък OTR Открити са съобщения, шифровани чрез OpenPGP Неуспешно получаване Вашият отпечатък - OTR отпечатък + Отпечатък OTR + Отпечатък OMEMO + Отпечатък OMEMO на съобщението + Собствен отпечатък OMEMO + Други устройства + Доверяване на отпечатъци OMEMO + Изтегляне на ключовете... + Готово Потвърждаване Дешифроване Беседи @@ -281,7 +292,8 @@ Други Име на беседата Използване на темата на стаята вместо JID идентификатора за беседите - OTR отпечатъкът е копиран! + Отпечатъкът OTR е копиран! + Отпечатъкът OMEMO е копиран! Достъпът Ви до тази беседа беше забранен Тази беседа е само за членове Бяхте изритан от тази конференция @@ -324,7 +336,7 @@ Предотвратява прекъсването на връзката Ви от операционната система Изберете файл Получаване на %1$s (%2$d%% завършено) - Изтегляне на %s + Сваляне на %s файл Отваряне на %s изпращане (%1$d%% завършено) @@ -336,7 +348,7 @@ Няма намерено приложение за отваряне на файла Неуспешна проверка на отпечатъка Ръчна проверка - Сигурни ли сте, че искате да проверите OTR отпечатъка на контактите си? + Сигурни ли сте, че искате да проверите отпечатъка OTR на контактите си? Динамични етикети Показване на етикети, предназначени само за четене под контактите Включване на известията @@ -347,7 +359,15 @@ Тайната е приета! Възстановяване Аватар на профила - Копиране на OTR отпечатъка + Копиране на отпечатъка OTR + Копиране на отпечатъка OMEMO + Повторно създаване на ключа OMEMO + Изчистване на другите устройства от PEP + Премахване на устройствата + Сигурни ли сте, че искате да премахнете всички останали устройства от обявлението OMEMO? Следващия път, когато устройствата Ви се свържат, те ще обявят себе си отново, но може да не получат съобщенията, изпратени междувременно. + Изтриване на ключа + Сигурни ли сте, че искате да изтриете този ключ? + След това той ще бъде необратимо приет за грешен и повече няма да можете да създавате сесии с него. Получаване на историята от сървъра Няма повече история на сървъра Актуализиране... @@ -446,6 +466,13 @@ Нищо Използвани наскоро Изберете бързо действие - Файлът не е открит на отдалечения сървър Търсене на контакти или групи + Изпращане на лично съобщение + %s напусна беседата! + Потребителско име + Потребителско име + Това не е правилно потребителско име + Неуспешно сваляне: Сървърът не е открит + Неуспешно сваляне: Файлът не е открит + Неуспешно сваляне: Неуспешна връзка със сървъра diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index 6463d7638..2cdf06a95 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -78,6 +78,7 @@ Vybrat aktualizaci stavu pro kontakt Poslat textovou zprávu Poslat OTR šifrovanou zprávu + Poslat OMEMO šifrovanou zprávu Poslat OpenPGP šifrovanou zprávu Přezdívka byla změněna Poslat nešifrované @@ -105,6 +106,8 @@ Vibrovat při přijetí nové zprávy Zvuk Přehrát zvuk společně s upozorněním + Upozornění ve veřejných konferencích + Vždy upozornit při příchodu zprávy ve veřejných konferencích místo jen pouze pokud je zvýrazněno Četnost upozornění Neupozorňovat krátce poté co byla obdržena kopie zprávy Pokročilé nastavení @@ -150,6 +153,7 @@ Čistý text OTR OpenPGP + OMEMO Upravit účet Smazat účet Dočasně vypnout @@ -202,6 +206,13 @@ Příjem selhal Váš identifikátor OTR identifikátor + OMEMO otisk + OMEMO otisk zprávy + Můj OMEMO otisk + Ostatní přístroje + Věřit OMEMO otiskům + Získávám klíče... + Hotovo Ověřit Dešifrovat Konference @@ -282,6 +293,7 @@ Jméno konference Pro identifikaci konferencí použít téma místnosti místo jejího JID OTR otisk zkopírován do schránky! + OMEMO otisk zkopírován do schránky! Vstup do konference byl zakázán Tato konference je pouze pro členy Vykopli tě z této konference @@ -348,6 +360,14 @@ Reset Avatar účtu Zkopírovat otisk OTR do schránky + Zkopírovat OMEMO otisk do schránky + Znovu vytvořit OMEMO klíč + Smazat ostatní přístroje z PEP + Smazat přístroje + Opravdu chcete vymazat ostatní přístroje z OMEMO upozornění? Až se příště vaše přístroje připojí, znovu se ohlásí, ale pravděpodobně neobdrží zprávy odeslané v mezičase mezi přihlášeními. + Vymazat klíč + Opravdu si přejete vymazat tento klíč? + Bude neodvolatelně pokládán jako kompromitovaný a již s jeho pomocí nebudete moci nikdy spustit jiné sezení. Načíst historii ze serveru Na serveru není žádná další historie Aktualizuji... @@ -448,6 +468,13 @@ Žádná Naposledy použitá Vybrat rychlou akci - Soubor nenalezen na vzdáleném serveru Hledat kontakty či skupiny + Poslat soukromou zprávu + %s opustil(a) konferenci! + Uživatelské jméno + Uživatelské jméno + Toto není platné uživatelské jméno + Stahování selhalo: Server nenalezen + Stahování selhalo: Soubor nenalezen + Stahování selhalo: Nelze se připojit k hostu diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 8c77d0a82..178738ea8 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -78,6 +78,7 @@ Ressource des Kontakts auswählen Normal schreiben… OTR-verschlüsselt schreiben… + OMEMO-verschlüsselt schreiben… OpenPGP-verschlüsselt schreiben… Dein Nickname wurde geändert Normal verschicken @@ -105,6 +106,8 @@ Vibriere, wenn eine neue Nachricht ankommt Klingelton Spiele Klingelton, wenn eine neue Nachricht ankommt + öffentliche Konferenz-Benachrichtigungen + Bei jeder Nachricht in öffentlichen Konferenzen benachrichtigen und nicht nur, wenn ich angesprochen werde Gnadenfrist Deaktiviere Benachrichtigungen für eine kurze Zeit nach Erhalt einer Nachricht, die von einem anderen deiner Clients kommt. Erweiterte Optionen @@ -150,6 +153,7 @@ Klartext OTR OpenPGP + OMEMO Konto bearbeiten Löschen Vorübergehend abschalten @@ -202,6 +206,13 @@ Empfang ist fehlgeschlagen Dein Fingerabdruck OTR-Fingerabdruck + OMEMO-Fingerabdruck + OMEMO-Fingerabdruck der Nachricht + Eigener OMEMO-Fingerabdruck + Andere Geräte + OMEMO-Fingerabdruck vertrauen + Schlüssel abrufen... + Erledigt Verifizieren Entschlüsseln Konferenzen @@ -282,6 +293,7 @@ Konferenz-Name Konferenz-Thema statt Raum-JID als Namen verwenden OTR-Fingerabdruck in die Zwischenablage kopiert! + OMEMO-Fingerabdruck in die Zwischenablage kopiert! Du wurdest von der Konferenz ausgeschlossen Die Konferenz ist nur für Mitglieder Du wurdest aus der Konferenz geworfen @@ -348,6 +360,14 @@ Zurücksetzen Konto-Avatar OTR-Fingerabdruck in Zwischenablage kopieren + OMEMO-Fingerabdruck in Zwischenablage kopieren + OMEMO-Schlüssel erneuern + Andere Geräte von PEP entfernen + Geräte entfernen + Alle anderen Geräte aus der OMEMO-Bekanntmachung entfernen? Die Bekanntmachung wird bei der nächsten Verbindung erneuert, möglicherweise werden aber nicht alle Nachrichten empfangen, die in der Zwischenzeit versendet wurden. + Schlüssel löschen + Soll dieser Schlüssel gelöscht werden? + Dieser Vorgang kann nicht rückgängig gemacht werden und es kann nie wieder eine Verbindung mit diesem Schlüssel hergestellt werden. Lade Chatverlauf… Keine weiteren Nachrichten vorhanden Aktualisiere… @@ -446,6 +466,13 @@ keine zuletzt verwendet wähle Schnell-Taste - Datei auf Server nicht gefunden Nach Kontakten oder Konferenzen suchen + Private Nachricht senden + %s hat die Konferenz verlassen! + Benutzername + Benutzername + Ungültiger Benutzername + Download fehlgeschlagen: Server nicht gefunden + Download fehlgeschlagen: Datei nicht gefunden + Download fehlgeschlagen: keine Verbindung zum Host diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index f1b5d54c0..56b7c2e0d 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -78,6 +78,7 @@ Selecciona recurso del contacto Enviar mensaje de texto Enviar mensaje cifrado con OTR + Enviar mensaje cifrado con OMEMO Enviar mensaje cifrado con OpenPGP Tu apodo se ha modificado Enviar sin cifrar @@ -105,6 +106,8 @@ Vibra cuando llega un nuevo mensaje Sonido Reproduce tono con la notificación + Notif. conversación grupo pública + Siempre notifica cuando llega un mensaje a una conversación en grupo pública y no solo cuando alguien menciona tu nombre en un mensaje Notificaciones Carbons Deshabilita las notificaciones durante un corto periodo de tiempo después de recibir la copia del mensaje carbon Opciones avanzadas @@ -150,6 +153,7 @@ Texto plano OTR OpenPGP + OMEMO Editar cuenta Eliminar cuenta Deshabilitar temporalmente @@ -202,6 +206,13 @@ Error al recibir Tu huella digital Huella digital OTR + Huella digital OMEMO + Huella digital OMEMO del mensaje + Tu huella digital OMEMO + Otros dispositivos + Huellas digitales OMEMO de confianza + Buscando claves... + Hecho Verificar Descifrar Conversación Grupo @@ -282,6 +293,7 @@ Nombre conversación grupo Usar el asunto de la conversación en lugar del identificador jabber como nombre en las conversaciones en grupo ¡Huella digital OTR copiada al portapapeles! + ¡Huella digital OMEMO copiada al portapapeles! Tu entrada a esta conversación ha sido prohibida Esta conversación es solo para miembros Has sido expulsado de esta conversación @@ -348,6 +360,14 @@ Reinicializar Imagen de perfil Copiar huella digital OTR al portapapeles + Copiar huella digital OMEMO al portapapeles + Regenerar clave OMEMO + Limpiar otros dispositivos de PEP + Limpiar dispositivos + ¿Estás seguro de que quieres limpiar todos los otros dispositivos del anuncio OMEMO? La próxima vez que tus dispositivos conecten, tendrán que volver a anunciarse, pero estos podrían no recibir los mensajes enviados durante el proceso. + Eliminar clave + ¿Estás seguro de que quieres eliminar esta clave? + Esto será irreversible y nunca podrás iniciar sesión con esta clave de nuevo. Buscando historial en el servidor No hay más historial en el servidor Actualizando… @@ -446,6 +466,13 @@ Ninguna Usada más recientemente Elegir acción rápida - Archivo no encontrado en servidor remoto Buscar contactos o grupos + Enviar mensaje privado + ¡%s ha dejado la conversación! + Usuario + Usuario + Esto no es un usuario válido + Error al descargar: Servidor no encontrado + Error al descargar: Archivo no encontrado + Error al descargar: No se ha podido conectar con el servidor diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index 0bb59671f..75b6dc090 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -78,6 +78,7 @@ Hautatu agerpena kontaktuarentzat Testu mezua bidali OTRz enkriptatutako mezua bidali + OMEMOz enkriptatutako mezua bidali OpenPGPz enkriptatutako mezua bidali Zure ezizena aldatu da Enkriptatu gabe bidali @@ -105,6 +106,8 @@ Dardaratu ere mezu berri bat heltzerakoan Soinua Dei-tonua jo jakinarazpenarekin + Konferentzia publikoen jakinarazpenak + Beti jakinarazi konferentzia publiko batean mezu berri bat heltzerakoan eta ez soilik nabarmentzerakoan Jakinarazpenen grazia epea Jakinarazpenak denbora labur baterako ezgaitu ikatz-kopia bat jaso ondoren Aukera aurreratuak @@ -150,6 +153,7 @@ Testu laua OTR OpenPGP + OMEMO Kontua editatu Kontua ezabatu Aldi baterako ezgaitu @@ -202,6 +206,13 @@ Jasotzeak huts egin du Zure hatz-marka OTR hatz-marka + OMEMO hatz-marka + Mezuaren OMEMO hatz-marka + Norberaren OMEMO hatz-marka + Beste gailuak + OMEMO hatz-marketaz fidatu + Gakoak eskuratzen... + Eginda Egiaztatu Desenkriptatu Konferentziak @@ -282,6 +293,7 @@ Konferentziaren izena Erabili gelaren gaia konferentziak identifikatzeko eta ez JIDa OTR hatz-marka arbelara kopiatu da + OMEMO hatz-marka arbelara kopiatu da Konferentzia honetara sartzea debekatuta duzu Konferentzia hau kideentzat da soilik Konferentzia honetatik kanporatua izan zara @@ -348,6 +360,14 @@ Berrezarri Kontuaren profileko argazkia OTR hatz-marka arbelera kopiatu + OMEMO hatz-marka arbelara kopiatu + OMEMO gakoa birsortu + Beste gailuak PEPetik garbitu + Gailuak garbitu + Ziur al zaude OMEMO iragarpenetik beste gailu guztiak garbitu nahi dituzulaz? Zure gailuak konektatzen diren hurrengoan, beraiek berriragarriko dira, baina agian ez dute mezurik jasoko bitartean. + Gakoa purgatu + Ziur al zaude gako hau purgatu nahi duzulaz? + Modu itzulezinean arriskutsutzat hartuko da, eta ezingo duzu gakoarekin berriro saio berri bat sortu. Mezuak zerbitzaritik eskuratzen Mezu gehiagorik ez zerbitzarian Eguneratzen... @@ -446,6 +466,13 @@ Bat ere ez Azkenengo aldiz erabilitakoa Ekintza azkarra aukeratu - Fitxategia ez da aurkitu urruneko zerbitzarian Kontaktuak edo taldeak bilatu + Mezu pribatua bidali + %s(e)k konferentzia utzi egin du + Erabiltzaile izena + Erabiltzaile izena + Hau ez da erabiltzaile izen baliodun bat + Deskargak huts egin du: zerbitzaria ez da aurkitu + Deskargak huts egin du: fitxategia ez da aurkitu + Deskargak huts egin du: ezin izan da ostalarira konektatu diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index 372b87e24..4e61aca72 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -440,6 +440,5 @@ Nessuno Usati recentemente - File non trovato sul server remoto Cerca contatti o gruppi diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index 35ccc7dd6..bd65c7c76 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -78,6 +78,7 @@ 連絡する参加を選択 プレーンテキストを送信 OTR 暗号化メッセージを送信 + OMEMO 暗号化メッセージを送信 OpenPGP 暗号化メッセージを送信 あなたのニックネームが変更されました 暗号化されていない送信 @@ -105,6 +106,8 @@ 新しいメッセージが到着したときに振動もします サウンド 通知で着信音を再生します + 公開会議で通知 + 強調表示されたときだけではなく、公開会議にメッセージが到着したときにいつも通知します 通知猶予期間 カーボンコピーを受信した後、短時間、通知を無効にします 詳細オプション @@ -150,6 +153,7 @@ プレーンテキスト OTR OpenPGP + OMEMO アカウントの編集 アカウントを削除 一時的に無効にする @@ -202,6 +206,13 @@ 受信に失敗しました あなたのフィンガープリント OTR フィンガープリント + OMEMO フィンガープリント + メッセージの OMEMO フィンガープリント + 自分の OMEMO フィンガープリント + 他のデバイス + OMEMO フィンガープリントを信頼 + 鍵の取得中... + 完了 検証 復号化 会議 @@ -282,6 +293,7 @@ 会議名 会議を識別するために JID の代わりにルームのテーマを使用します OTR フィンガープリントをクリップボードにコピーしました! + OMEMO フィンガープリントをクリップボードにコピーしました! あなたはこの会議から禁止されています この会議はメンバーのみです あなたはこの会議からキックされました @@ -347,7 +359,15 @@ 秘密を受取ました! リセット アカウント アバター - OTR フィンガープリントをクリップボードにコピーしました + OTR フィンガープリントをクリップボードにコピー + OMEMO フィンガープリントをクリップボードにコピー + OMEMO キーを再生成 + PEP から他のデバイスを消去 + デバイスをクリア + OMEMO のアナウンスから他のすべてのデバイスをクリアしてもよろしいですか? お使いのデバイスが次回接続したとき、それらは自分自身を再アナウンスしますが、それらはその間に送信されたメッセージを受信できない場合があります。 + 鍵を消去 + この鍵を消去してもよろしいですか? + これは不可逆的に侵害とみなされ、あなたは再びそのセッションを構築することはできません。 サーバーから履歴を取得中 サーバーにこれ以上履歴はありません アップデート中… @@ -424,7 +444,7 @@ 位置 位置を受信しました 会話が閉じられました - 退出した会話 + 会議を退出しました システムの CA を信頼しない すべての証明書を手動で承認する必要があります 証明書を削除 @@ -444,6 +464,13 @@ なし 最近使用した クイックアクションの選択 - リモートサーバーにファイルが見つかりません 連絡先またはグループの検索 + プライベートメッセージを送信 + %s が会議を退出しました! + ユーザー名 + ユーザー名 + これは有効なユーザー名ではありません + ダウンロードに失敗しました: サーバーが見つかりません + ダウンロードに失敗しました: ファイルが見つかりません + ダウンロードに失敗しました: ホストに接続できませんでした diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index a4ef81abd..d693f916c 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -2,25 +2,25 @@ Instellingen Nieuw gesprek - Beheer account - Beëindig gesprek + Accounts beheren + Gesprek beëindigen Contactgegevens Gespreksgegevens Beveiligd gesprek - Voeg account toe - Verander naam - Voeg toe aan telefoonboek - Verwijder uit lijst - Blokkeer contact - Deblokkeer contact - Blokkeer domein - Deblokkeer domein - Beheer accounts + Account toevoegen + Naam veranderen + Toevoegen aan telefoonboek + Verwijderen uit lijst + Contact blokkeren + Contact deblokkeren + Domein blokkeren + Domein deblokkeren + Accounts beheren Instellingen Groepsgespreksgegevens Contactgegevens Delen met gesprek - Start gesprek + Gesprek starten Kies contact Geblokkeerde contacten net @@ -42,99 +42,102 @@ Alle contacten van %s deblokkeren? Contact geblokkeerd Wil je %s als bladwijzer verwijderen? Het gesprek met deze account zal niet worden verwijderd. - Registreer nieuwe account op server - Verander wachtwoord op server - Deel met - Start gesprek - Nodig contact uit + Nieuwe account op server registreren + Wachtwoord op server veranderen + Delen met… + Gesprek starten + Contact uitnodigen Contacten - Annuleer - Stel in - Voeg toe - Bewerk - Verwijder - Blokkeer - Deblokkeer - Sla op - OK + Annuleren + Instellen + Toevoegen + Bewerken + Verwijderen + Blokkeren + Deblokkeren + Opslaan + Oké Conversations is gecrasht - Door het versturen van crash rapportages help je de ontwikkeling van Conversations.\n\nWaarschuwing: Deze app zal je XMPP account gebruiken om de crash rapportages te versturen naar de ontwikkelaars. + Door het versturen van crashrapportages help je de ontwikkeling van Conversations.\n\nWaarschuwing: Deze app zal je XMPP-account gebruiken om de crashrapportages te versturen naar de ontwikkelaars. Nu versturen Niet opnieuw vragen Account verbinden mislukt Verbinden met meerdere accounts mislukt Raak hier aan om accounts te beheren - Voeg bestand bij - Het contact is geen onderdeel van uw lijst. Wil je het toevoegen? - Voeg contact toe + Bestand bijvoegen + Het contact is geen onderdeel van je lijst. Wil je hem/haar toevoegen? + Contact toevoegen afleveren mislukt geweigerd Bezig met voorbereiden van versturen van afbeelding - Wis geschiedenis - Wis gespreksgeschiedenis + Geschiedenis wissen + Gespreksgeschiedenis wissen Wil je alle berichten in dit gesprek verwijderen?\n\nWaarschuwing: Dit zal geen invloed hebben op de berichten opgeslagen op andere apparaten of servers. - Verwijder berichten + Berichten verwijderen Beëindig dit gesprek na afloop Kies aanwezigheid om te tonen aan contact - Verstuur eenvoudig tekst bericht - Verstuur OTR versleuteld bericht - Verstuur OpenPGP versleuteld bericht + Verstuur onversleuteld bericht + Verstuur OTR-versleuteld bericht + Verstuur OMEMO-versleuteld bericht + Verstuur OpenPGP-versleuteld bericht Je naam is veranderd Verstuur onversleuteld Ontsleutelen mislukt. Misschien heb je niet de juiste private sleutel. OpenKeychain Conversations gebruikt een derde partij app genaamd OpenKeychain om berichten te versleutelen en ontsleutelen, en om publieke sleutels te beheren.\n\nOpenKeychain is beschikbaar onder de GPLv3 en beschikbaar op F-Droid en Google Play.\n\n(Herstart Conversations na installatie.) - Herstart - Installeer - offering… + Herstarten + Installeren + bezig met aanbieden… wachten… - Geen OpenPGP sleutel gevonden + Geen OpenPGP-sleutel gevonden Conversations kan je berichten niet versleutelen omdat je contact geen publieke sleutel heeft ingesteld.\n\nVraag je contact om OpenPGP te configureren. - Geen OpenPGP sleutels gevonden + Geen OpenPGP-sleutels gevonden Conversations kan je berichten niet versleutelen omdat je contacten geen publieke sleutel hebben ingesteld.\n\nVraag je contacten om OpenPGP te configureren. Versleuteld bericht ontvangen. Raak aan om te bekijken en te ontsleutelen. Algemeen - XMPP resource - De naam waarmee deze client zich identificeert - Accepteer bestanden - Accepteer automatisch bestanden kleiner dan… + XMPP-bron + De naam waarmee deze cliënt zich identificeert + Aanvaard bestanden + Aanvaard automatisch bestanden kleiner dan… Meldingsinstellingen Meldingen Melding als een nieuw bericht arriveert Trillen Tril ook wanneer een nieuw bericht arriveert Geluid - Speel ringtone af bij melding + Speel beltoon af bij melding + Meldingen bij groepsgespreken + Laat altijd een melding zien wanneer er berichten zijn ontvangen in groepsgesprekken in plaats van alleen bij het noemen van je naam Uitstelperiode voor meldingen - Zet meldingen voor korte tijd uit als er een carbon copy wordt ontvangen + Schakel meldingen voor korte tijd uit als er een carbon copy wordt ontvangen Geavanceerde instellingen - Verstuur nooit crash rapportages - Door crash rapportages te versturen help je de ontwikkeling van Conversations + Verstuur nooit crashrapportages + Door crashrapportages te versturen help je de ontwikkeling van Conversations Bevestig berichten Laat je contacten weten wanneer je berichten hebt ontvangen en gelezen - UI opties + UI-opties OpenKeychain rapporteerde een fout - I/O fout tijdens ontsleutelen bestand - Aanvaard + I/O-fout tijdens ontsleutelen van bestand + Aanvaarden Er is een fout opgetreden Verleen toestemming voor aanwezigheidsupdates - Op voorhand toestemming verlenen en vragen aan contacten die je hebt aangemaakt + Op voorhand toestemming voor aanwezigheidsabonnementen verlenen en vragen aan contacten die je hebt aangemaakt Abonnementen Je account Sleutels Verstuur aanwezigheidsupdates Ontvang aanwezigheidsupdates Vraag naar aanwezigheidsupdates - Kies afbeelding - Neem foto + Afbeelding kiezen + Foto nemen Op voorhand toestemming verlenen voor abonneren Het bestand dat je gekozen hebt is geen afbeelding Fout tijdens converteren van afbeelding Bestand niet gevonden - Algemene I/O fout. Misschien is er geen opslagruimte meer beschikbaar? - De app die je gebruikte om de afbeelding te selecteren heeft niet voldoende toegang geleverd om het bestand te lezen.\n\nGebruik een andere app om een afbeelding te kiezen + Algemene I/O-fout. Misschien is er geen opslagruimte meer beschikbaar? + De app die je gebruikte om de afbeelding te selecteren heeft niet voldoende toegang geleverd om het bestand te lezen.\n\nGebruik een andere bestandsbeheerder om een afbeelding te kiezen Onbekend - Tijdelijk uitgezet + Tijdelijk uitgeschakeld Online Verbinden\u2026 Offline @@ -142,31 +145,32 @@ Server niet gevonden Geen verbinding Registratie mislukt - Gebruikersnaam bezet - Registratie compleet + Gebruikersnaam is al in gebruik + Registratie voltooid Server ondersteunt geen registratie Fout bij beveiliging Incompatibele server Onversleuteld OTR OpenPGP - Bewerk account - Verwijder - Tijdelijk uitzetten - Publish avatar - Publish OpenPGP public key - Aanzetten + OMEMO + Account bewerken + Account verwijderen + Tijdelijk uitschakelen + Avatar publiceren + Publiceer OpenPGP publieke sleutel + Account inschakelen Ben je zeker? Als je je account verwijdert wordt je volledige gespreksgeschiedenis gewist - Neem stem op - Jabber ID: + Stem opnemen + Jabber-ID: Wachtwoord: gebruikersnaam@voorbeeld.nl - Bevestig wachtwoord: + Wachtwoord bevestigen Wachtwoord - Bevestig wachtwoord + Wachtwoord bevestigen Wachtwoorden komen niet overeen - Dit is geen geldig Jabber ID + Dit is geen geldige Jabber-ID Geen geheugen beschikbaar. Afbeelding is te groot Wil je %s toevoegen aan de contactenlijst op je telefoon? online @@ -177,7 +181,7 @@ offline Groepsgesprek Andere leden - Server info + Server-info XEP-0313: MAM XEP-0280: Message Carbons XEP-0352: Client State Indication @@ -187,7 +191,7 @@ XEP-0163: PEP (Avatars) beschikbaar niet beschikbaar - Ontbrekende publieke sleutel aankondigingen + Ontbrekende publieke sleutel-aankondigingen zonet voor het laatst gezien 1 minuut geleden voor het laatst gezien %d minuten geleden voor het laatst gezien @@ -197,21 +201,28 @@ %d dagen geleden voor het laatst gezien nog nooit gezien Versleuteld bericht. Installeer OpenKeychain om te ontsleutelen. - Onbekende OTR vingerafdruk + Onbekende OTR-vingerafdruk OpenPGP-versleutelde berichten gevonden Ontvangen mislukt Jouw vingerafdruk - OTR vingerafdruk - Bevestig - Ontsleutel + OTR-vingerafdruk + OMEMO-vingerafdruk + OMEMO-vingerafdruk van bericht + Eigen OMEMO-vingerafdruk + Andere apparaten + Vertrouw OMEMO-vingerafdrukken + Ophalen van de sleutels... + Klaar + Bevestigen + Ontsleutelen Groepsgesprekken Zoeken - Maak contact aan + Contact aanmaken Aan groepsgesprek deelnemen - Verwijder contact - Bekijk contactgegevens - Blokkeer contact - Deblokkeer contact + Contact verwijderen + Contactgegevens bekijken + Contact blokkeren + Contact deblokkeren Aanmaken Het contact bestaat al Deelnemen @@ -221,15 +232,15 @@ Bladwijzer verwijderen Deze bladwijzer bestaat al Jij - Onderwerp groepsgesprek bewerken + Onderwerp van groepsgesprek bewerken Groepsgesprek niet gevonden Verlaten Contact heeft je toegevoegd aan zijn/haar contacten Contact toevoegen aan eigen contacten %s heeft tot hier gelezen - Publiceer + Publiceren Raak avatar aan om een foto uit de galerij te kiezen - Aandacht: Iedereen die je aanwezigheidsupdates ontvangt zal deze foto kunnen zien. + Let op: iedereen die je aanwezigheidsupdates ontvangt zal deze foto kunnen zien. Publiceren… De server weigerde de publicatie van je afbeelding Fout bij converteren van afbeelding @@ -238,19 +249,19 @@ Je server ondersteunt de publicatie van avatars niet gefluisterd naar %s - Stuur privébericht naar %s + Privébericht sturen naar %s Verbinden Deze account bestaat al Volgende Huidige sessie gevestigd Bijkomstige informatie Overslaan - Meldingen uitzetten - Meldingen uitzetten voor dit gesprek - Meldingen zijn uitgezet - Aanzetten + Meldingen uitschakelen + Meldingen uitschakelen voor dit gesprek + Meldingen zijn uitgeschakeld + Inschakelen Wachtwoord nodig voor toegang tot groepsgesprek - Wachtwoord: + Wachtwoord invoeren Ontbrekende aanwezigheidsupdates van contact Vraag eerst aanwezigheidsupdates van je contact aan.\n\nDit wordt gebruikt om te bepalen welke client(s) je contact gebruikt. Nu aanvragen @@ -259,10 +270,10 @@ Negeren Waarschuwing: Dit verzenden zonder wederzijdse aanwezigheidsupdates kan voor onverwachte problemen zorgen.\n\nGa naar contactgegevens om je aanwezigheidsupdates te bevestigen. Versleutelingsinstellingen - Verplicht end-to-end versleuteling + Verplicht end-to-end-versleuteling Stuur berichten altijd versleuteld (behalve in groepsgesprekken) Sla versleutelde berichten niet op - Waarschuwing: Dit kan leiden tot verlies van berichten + Waarschuwing: dit kan leiden tot verlies van berichten Expert-instellingen Wees voorzichtig met deze instellingen Over Conversations @@ -270,7 +281,7 @@ Stille uren Begintijd Eindtijd - Stille uren aanzetten + Stille uren inschakelen Tijdens stille uren worden meldingen onderdrukt Vergroot lettergrootte Gebruik grotere lettertypes over de hele app @@ -281,28 +292,29 @@ Andere Groepsgespreksnaam Gebruik onderwerp van kamer ipv JID om groepsgesprekken te identificeren - OTR vingerafdruk naar klembord gekopieerd! + OTR-vingerafdruk gekopieerd naar klembord! + OMEMO-vingerafdruk gekopieerd naar klembord! Je bent verbannen uit dit groepsgesprek Dit groepsgesprek is enkel voor leden Je bent uit dit groepsgesprek geschopt - account %s gebruiken - %s op HTTP host nakijken + met account %s + %s op HTTP-host nakijken Je bent niet verbonden. Probeer later opnieuw - Bekijk bestandsgrootte van %s + Bestandsgrootte van %s controleren Berichtopties - Kopieer tekst - Kopieer oorspronkelijke URL - Verstuur opnieuw + Tekst kopiëren + Oorspronkelijke URL kopiëren + Opnieuw versturen Bestands-URL Berichttekst URL gekopieerd naar klembord Bericht gekopieerd naar klembord Versturen van afbeelding mislukt - Scan QR code - Toon QR code - Toon geblokkeerde contacten + QR-code scannen + QR-code tonen + Geblokkeerde contacten weergeven Accountgegevens - Bevestig OTR + OTR bevestigen Externe vingerafdruk scan (of raak gsm\'s aan) @@ -320,17 +332,17 @@ Contact vraagt SMP-bevestiging Geen geldige OTR-sessie gevonden! Conversations - Hou service in voorgrond + Dienst in voorgrond houden Belet het besturingssysteem van je verbinding te onderbreken - Kies bestand + Bestand kiezen Ontvangen van %1$s (%2$d%% voltooid) - Download %s + %s downloaden bestand - Open %s + %s openen versturen (%1$d%% voltooid) Bestand klaarmaken voor versturen %s aangeboden om te downloaden - Annuleer bestandsoverdracht + Bestandsoverdracht annuleren bestandsoverdracht mislukt Het bestand is verwijderd Geen applicatie om bestand te openen @@ -339,7 +351,7 @@ Ben je zeker dat je de OTR-vingerafdruk van je contact wil bevestigen? Toon dynamische tags Toon enkel-lezen tags onder contacten - Meldingen aanzetten + Meldingen inschakelen Groepsgesprek aanmaken met… Geen groepsgespreksserver gevonden Aanmaken van groepsgesprek mislukt! @@ -347,7 +359,15 @@ Geheim aanvaard! Opnieuw instellen Account-avatar - Kopieer OTR-vingerafdruk naar klembord + OTR-vingerafdruk kopiëren naar klembord + OMEMO-vingerafdruk kopiëren naar klembord + OMEMO-sleutel opnieuw aanmaken + Andere apparaten van PEP verwijderen + Apparaten wissen + Ben je zeker dat je alle andere apparaten van de OMEMO-aankondiging wil wissen? De volgende keer dat je apparaten verbinding maken zullen ze zich opnieuw aankondigen, maar zullen ze misschien niet de berichten ontvangen die intussen zijn verzonden. + Sleutel verwijderen + Ben je zeker dat je deze sleutel wil verwijderen? + Ze zal onherroepelijk beschouwd worden als gecompromitteerd en je zal er nooit meer een nieuwe sessie mee kunnen bouwen. Geschiedenis van server halen Geen verdere geschiedenis op server Bijwerken… @@ -364,8 +384,8 @@ Huidig wachtwoord Nieuw wachtwoord Wachtwoord zou niet leeg mogen zijn - Alle accounts aanzetten - Alle accounts uitzetten + Alle accounts inschakelen + Alle accounts uitschakelen Actie uitvoeren met Geen aansluiting Geen rol @@ -376,7 +396,7 @@ Lidmaatschap verwijderen Administratorprivileges verlenen Administratorprivileges verwijderen - Verwijderen uit kamer + Verwijderen uit groepsgesprek Kon aansluiting niet wijzigen Verbannen uit groepsgesprek Je probeert %s te verwijderen uit een publiek groepsgesprek. De enige manier om dat te doen is door hem/haar permanent te verbannen. @@ -395,7 +415,7 @@ 2 uur 8 uur Voor onbepaalde duur - Input-opties + Invoer-opties Enter is versturen Gebruik de enter-toets om berichten te versturen Toon enter-toets @@ -407,32 +427,32 @@ Android-applicatie Contact %s ontvangen - Voorgrond-service uitzetten + Voorgronddienst uitschakelen Raak aan om Conversations te openen Avatar is gepubliceerd! Bezig met versturen van %s Bezig met aanbieden van %s - Offline verbergen - Account uitzetten + Offline contacten verbergen + Account uitschakelen %s is aan het typen... %s is gestopt met typen - Aan het typen meldingen + Aan-het-typen-meldingen Laat je contacten weten wanneer je een nieuw bericht aan het schrijven bent Locatie versturen Locatie weergeven - Geen applicatie gevonden om locatie weer te geven + Geen applicatie om locatie weer te geven Locatie Locatie ontvangen Gesprek gesloten Groepsgesprek verlaten - Vertrouw geen systeem-CA\'s. + Systeem-CA\'s niet vertrouwen Alle certificaten moeten handmatig goedgekeurd worden - Verwijder certificaten - Verwijder handmatig goedgekeurde certificaten + Certificaten verwijderen + Handmatig goedgekeurde certificaten verwijderen Geen handmatig goedgekeurde certificaten - Verwijder certificaten - Verwijder selectie - Annuleer + Certificaten verwijderen + Selectie verwijderen + Annuleren %d certificaat verwijderd %d certificaten verwijderd @@ -445,7 +465,14 @@ Snelle actie Geen Recent gebruikt - Kies snelle actie - Bestand niet gevonden op externe server + Snelle actie kiezen Zoeken naar contacten of groepen + Privébericht sturen + %s heeft het groepsgesprek verlaten! + Gebruikersnaam + Gebruikersnaam + Dit is geen geldige gebruikersnaam + Downloaden mislukt: server niet gevonden + Downloaden mislukt: bestand niet gevonden + Downloaden mislukt: kon geen verbinding maken met host diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index fb94c6051..1ace55a84 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -202,6 +202,7 @@ Odbiór nieudany Twój odcisk klucza Odcisk klucza OTR + Pozostałe urządzenia Weryfikuj Odszyfruj Konferencje @@ -445,4 +446,5 @@ Brak Ostatnio używana Wybierz szybką akcję + %s opuścił(a) konferencję! diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index 6f3bf982c..5bcc1aa50 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -447,5 +447,7 @@ Žiadny Naposledy použitý Vybrať rýchlu voľbu - Súbor sa na vzdialenom serveri nenašiel + Hľadať kontakty alebo skupiny + Poslať súkromnú správu + %s opustil skupinovú konverzáciu! diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index 96db8b7e3..a8b2c8896 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -78,6 +78,7 @@ Избор присутности за контакта Пошаљи обичну текстуалну поруку Пошаљи ОТР шифровану поруку + Пошаљи ОМЕМО шифровану поруку Пошаљи ОпенПГП шифровану поруку Ваш надимак је промењен Пошаљи нешифровано @@ -105,6 +106,8 @@ Вибрирај кад стигне нова порука Звук Звуци обавештења + Обавештења у јавним конференцијама + Увек обавести кад стигне порука у конференцији уместо само кад је означена Период одгоде обавештења Онемогући обавештења на кратко по примању карбон копије Напредне поставке @@ -150,6 +153,7 @@ Обичан текст ОТР ОпенПГП + ОМЕМО Уреди налог Обриши налог Привремено онемогући @@ -202,6 +206,13 @@ Примање није успело Ваш отисак ОТР отисак + ОМЕМО отисак + ОМЕМО отисак поруке + Сопствени ОМЕМО отисак + Остали уређаји + Поуздај се у ОМЕМО отиске + Добављам кључеве... + Готово Овери Дешифруј Конференције @@ -282,6 +293,7 @@ Име конференције Предмет собе уместо ЈИД-а идентификује конференцију ОТР отисак копиран на клипборд! + ОМЕМО отисак копиран на клипборд! Забрањени сте на овој конференцији Ова конференција је само за чланове Шутнути сте из ове конференције @@ -348,6 +360,14 @@ Ресетуј Аватар налога Копирај ОТР отисак на клипборд + Копирај ОМЕМО отисак на клипборд + Поново генериши ОМЕМО кључ + Уклони остале уређаје са ПЕП-а + Очисти уређаје + Желите ли заиста да уклоните све остале уређаје са ОМЕМО објаве? Када се ваши уређаји следећи пут повежу, објавиће се сами, али у међувремену можда неће примати поруке. + Очисти кључ + Желите ли заиста да очистите овај кључ? + Неповратно ће бити сматран компровитованим, и њиме више никад нећете моћи да успоставите сесију. Добављам историјат са сервера Нема више историјата на серверу Ажурирам… @@ -425,7 +445,7 @@ Примљена локација Преписка затворена Напусти конференцију - Не веруј системским сертификационим телима + Не поуздај се у системска сертификациона тела Сви сертификати морају ручно да се одобре Уклони сертификате Обриши ручно одобрене сертификате @@ -448,6 +468,13 @@ Ниједна Недавно коришћена Изаберите брзу радњу - Фајл није нађен на удаљеном серверу Тражите контакте или групе + Пошаљи личну поруку + %s напусти конференцију! + Корисничко име + Корисничко име + Ово није исправно корисничко име + Преузимање није успело: сервер није нађен + Преузимање није успело: фајл није нађен + Преузимање није успело: не могу да се повежем са домаћином diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index 6c4436a8b..c40625883 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -78,6 +78,7 @@ Välj tillgänglighet till kontakt Skicka meddelande i klartext Skicka OTR-krypterat meddelande + Skicka OMEMO-krypterat meddelande Skicka OpenPGP-krypterat meddelande Ditt nick har ändrats Skicka okrypterat @@ -105,6 +106,8 @@ Vibrera när meddelande tagits emot Ljud Spela ljud med notifiering + Notifieringar i publika konferenser + Notifiera alltid för meddelande i en publik konferens istället för endast vid highlight Notifieringsfrist Inaktivera notifieringar en kort stund efter att en carbon copy tagits emot Avancerade inställningar @@ -150,6 +153,7 @@ Klartext OTR OpenPGP + OMEMO Ändra konto Ta bort Inaktivera tillfälligt @@ -202,6 +206,13 @@ Mottagning misslyckades Ditt fingeravtryck OTR-fingeravtryck + OMEMO-fingeravtryck + Meddelandets OMEMO-fingeravtryck + Eget OMEMO-fingeravtryck + Andra enheter + Lita på OMEMO-fingeravtryck + Hämtar nycklar... + Klar Verifiera Avkryptera Konferenser @@ -282,6 +293,7 @@ Konferensnamn Använd konferensens ämne istället för JID för att identifiera konferenser OTR-fingeravtryck har kopierats till urklipp! + OMEMO-fingeravtryck har kopierats till urklipp! Du är bannlyst från denna konferens Medlemsskap krävs för denna konferens Du har blivit utsparkad från denna konferens @@ -348,6 +360,14 @@ Återställ Kontots avatarbild Kopiera OTR-fingeravtryck till urklipp + Kopiera OMEMO-fingeravtryck till urklipp + Regenerera OMEMO-nyckel + Rensa andra enheter från PEP + Rensa enheter + Är du säker på att du vill rensa alla andra enheter från OMEMO-annonsering? Nästa gång dina enheter ansluter kommer de att återannonsera sig, men de kanske inte tar emot enheter under tiden. + Rensa nyckel + Är du säker på att du vill rensa denna nyckel? + Den kommer att antas oåterkalleligt komprometterat och du kommer aldrig kunna bygga en session med den igen. Hämtar historik från server Ingen mer historik på server Uppdaterar… @@ -446,6 +466,13 @@ Ingen Senast använd Välj snabbfunktion - Filen hittas ej på servern Sök efter kontakter eller grupper + Skicka privat meddelande + %s har lämnat konferensen! + Användarnamn + Användarnamn + Inte ett giltigt användanamn + Nerladdning gick fel: Server hittades inte + Nerladdning gick fel: Filen hittades inte + Nerladdningen gick fel: Kunder inte ansluta till server -- cgit v1.2.3 From 772ba2ec91d4c950e861f1620c853e302ff3182f Mon Sep 17 00:00:00 2001 From: Christian S Date: Wed, 19 Aug 2015 19:16:51 +0200 Subject: removed duplicate string --- src/main/res/values/strings.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 61fe34037..f139b759b 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -505,7 +505,6 @@ Search for contacts or groups Send private message %s has left the conference! - is typing... Username Username This is not a valid username -- cgit v1.2.3 From 24f235f2f4057c32d2bc89a40fb2c1a43eb22d64 Mon Sep 17 00:00:00 2001 From: Christian S Date: Wed, 19 Aug 2015 19:19:38 +0200 Subject: removed duplicates --- .../java/eu/siacs/conversations/entities/Conversation.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 485e7e95c..cfa38fe7b 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -358,19 +358,6 @@ public class Conversation extends AbstractEntity implements Blockable { } } - public String getParticipants() { - if (getMode() == MODE_MULTI) { - String generatedName = getMucOptions().createNameFromParticipants(); - if (generatedName != null) { - return generatedName; - } else { - return null; //getJid().getLocalpart(); - } - } else { - return null; - } - } - public String getAccountUuid() { return this.accountUuid; } -- cgit v1.2.3 From 64609fa37f6238f9d91e0ed3be16417d1f049f1e Mon Sep 17 00:00:00 2001 From: Christian S Date: Wed, 19 Aug 2015 19:23:49 +0200 Subject: forked NotificationService from siacs/development --- .../services/NotificationService.java | 34 ++++++++++++---------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index adfd96fe6..84ee633d6 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -119,7 +119,7 @@ public class NotificationService { @SuppressWarnings("deprecation") private boolean isInteractive() { final PowerManager pm = (PowerManager) mXmppConnectionService - .getSystemService(Context.POWER_SERVICE); + .getSystemService(Context.POWER_SERVICE); final boolean isScreenOn; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { @@ -153,7 +153,9 @@ public class NotificationService { notifications.put(conversationUuid, mList); } final Account account = message.getConversation().getAccount(); - final boolean doNotify = !account.inGracePeriod() && !this.inMiniGracePeriod(account); + final boolean doNotify = (!(this.mIsInForeground && this.mOpenConversation == null) || !isScreenOn) + && !account.inGracePeriod() + && !this.inMiniGracePeriod(account); updateNotification(doNotify); if (doNotify) { notifyPebble(message); @@ -181,7 +183,7 @@ public class NotificationService { private void updateNotification(final boolean notify) { final NotificationManager notificationManager = (NotificationManager) mXmppConnectionService - .getSystemService(Context.NOTIFICATION_SERVICE); + .getSystemService(Context.NOTIFICATION_SERVICE); final SharedPreferences preferences = mXmppConnectionService.getPreferences(); final String ringtone = preferences.getString("notification_ringtone", null); @@ -237,7 +239,7 @@ public class NotificationService { conversation = messages.get(0).getConversation(); final String name = conversation.getName(); style.addLine(Html.fromHtml("" + name + " " - + UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first)); + + UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first)); names.append(name); names.append(", "); } @@ -277,9 +279,9 @@ public class NotificationService { Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.ic_file_download_white_24dp : R.drawable.ic_action_download, mXmppConnectionService.getResources().getString(R.string.download_x_file, - UIHelper.getFileDescriptionString(mXmppConnectionService, message)), + UIHelper.getFileDescriptionString(mXmppConnectionService, message)), createDownloadIntent(message) - ); + ); } if ((message = getFirstLocationMessage(messages)) != null) { mBuilder.addAction(R.drawable.ic_room_white_24dp, @@ -292,16 +294,16 @@ public class NotificationService { } private void modifyForImage(final Builder builder, final Message message, - final ArrayList messages, final boolean notify) { + final ArrayList messages, final boolean notify) { try { final Bitmap bitmap = mXmppConnectionService.getFileBackend() - .getThumbnail(message, getPixel(200), false); + .getThumbnail(message, getPixel(288), false); final ArrayList tmp = new ArrayList<>(); for (final Message msg : messages) { if (msg.getType() == Message.TYPE_TEXT && msg.getTransferable() == null) { tmp.add(msg); - } + } } final BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle(); bigPictureStyle.bigPicture(bitmap); @@ -320,7 +322,7 @@ public class NotificationService { } private void modifyForTextOnly(final Builder builder, - final ArrayList messages, final boolean notify) { + final ArrayList messages, final boolean notify) { builder.setStyle(new NotificationCompat.BigTextStyle().bigText(getMergedBodies(messages))); builder.setContentText(UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first); if (notify) { @@ -335,7 +337,7 @@ public class NotificationService { && message.getEncryption() != Message.ENCRYPTION_PGP && message.getFileParams().height > 0) { return message; - } + } } return null; } @@ -382,7 +384,7 @@ public class NotificationService { private PendingIntent createContentIntent(final String conversationUuid, final String downloadMessageUuid) { final TaskStackBuilder stackBuilder = TaskStackBuilder - .create(mXmppConnectionService); + .create(mXmppConnectionService); stackBuilder.addParentStack(ConversationActivity.class); final Intent viewConversationIntent = new Intent(mXmppConnectionService, @@ -436,7 +438,7 @@ public class NotificationService { private PendingIntent createDisableAccountIntent(final Account account) { final Intent intent = new Intent(mXmppConnectionService,XmppConnectionService.class); intent.setAction(XmppConnectionService.ACTION_DISABLE_ACCOUNT); - intent.putExtra("account", account.getJid().toBareJid().toString()); + intent.putExtra("account",account.getJid().toBareJid().toString()); return PendingIntent.getService(mXmppConnectionService,0,intent,PendingIntent.FLAG_UPDATE_CURRENT); } @@ -470,7 +472,7 @@ public class NotificationService { private int getPixel(final int dp) { final DisplayMetrics metrics = mXmppConnectionService.getResources() - .getDisplayMetrics(); + .getDisplayMetrics(); return ((int) (dp * metrics.density)); } @@ -480,7 +482,7 @@ public class NotificationService { private boolean inMiniGracePeriod(final Account account) { final int miniGrace = account.getStatus() == Account.State.ONLINE ? Config.MINI_GRACE_PERIOD - : Config.MINI_GRACE_PERIOD * 2; + : Config.MINI_GRACE_PERIOD * 2; return SystemClock.elapsedRealtime() < (this.mLastNotification + miniGrace); } @@ -557,4 +559,4 @@ public class NotificationService { mBuilder.setContentIntent(resultPendingIntent); mNotificationManager.notify(ERROR_NOTIFICATION_ID, mBuilder.build()); } -} +} \ No newline at end of file -- cgit v1.2.3 From 02012815661bb786a818c28097308987353bddd5 Mon Sep 17 00:00:00 2001 From: Christian S Date: Wed, 19 Aug 2015 20:18:00 +0200 Subject: some little image preview changes --- .../services/NotificationService.java | 42 +++++++++++----------- .../layout/activity_publish_profile_picture.xml | 4 ++- src/main/res/layout/contact.xml | 1 - src/main/res/layout/conversation_list_row.xml | 2 +- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 84ee633d6..3b8da6b39 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -62,12 +62,12 @@ public class NotificationService { public boolean notify(final Message message) { return (message.getStatus() == Message.STATUS_RECEIVED) - && notificationsEnabled() - && !message.getConversation().isMuted() - && (message.getConversation().isPnNA() - || conferenceNotificationsEnabled() - || wasHighlightedOrPrivate(message) - ); + && notificationsEnabled() + && !message.getConversation().isMuted() + && (message.getConversation().isPnNA() + || conferenceNotificationsEnabled() + || wasHighlightedOrPrivate(message) + ); } public void notifyPebble(final Message message) { @@ -119,7 +119,7 @@ public class NotificationService { @SuppressWarnings("deprecation") private boolean isInteractive() { final PowerManager pm = (PowerManager) mXmppConnectionService - .getSystemService(Context.POWER_SERVICE); + .getSystemService(Context.POWER_SERVICE); final boolean isScreenOn; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { @@ -154,8 +154,8 @@ public class NotificationService { } final Account account = message.getConversation().getAccount(); final boolean doNotify = (!(this.mIsInForeground && this.mOpenConversation == null) || !isScreenOn) - && !account.inGracePeriod() - && !this.inMiniGracePeriod(account); + && !account.inGracePeriod() + && !this.inMiniGracePeriod(account); updateNotification(doNotify); if (doNotify) { notifyPebble(message); @@ -183,7 +183,7 @@ public class NotificationService { private void updateNotification(final boolean notify) { final NotificationManager notificationManager = (NotificationManager) mXmppConnectionService - .getSystemService(Context.NOTIFICATION_SERVICE); + .getSystemService(Context.NOTIFICATION_SERVICE); final SharedPreferences preferences = mXmppConnectionService.getPreferences(); final String ringtone = preferences.getString("notification_ringtone", null); @@ -239,7 +239,7 @@ public class NotificationService { conversation = messages.get(0).getConversation(); final String name = conversation.getName(); style.addLine(Html.fromHtml("" + name + " " - + UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first)); + + UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first)); names.append(name); names.append(", "); } @@ -279,9 +279,9 @@ public class NotificationService { Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.ic_file_download_white_24dp : R.drawable.ic_action_download, mXmppConnectionService.getResources().getString(R.string.download_x_file, - UIHelper.getFileDescriptionString(mXmppConnectionService, message)), + UIHelper.getFileDescriptionString(mXmppConnectionService, message)), createDownloadIntent(message) - ); + ); } if ((message = getFirstLocationMessage(messages)) != null) { mBuilder.addAction(R.drawable.ic_room_white_24dp, @@ -294,16 +294,16 @@ public class NotificationService { } private void modifyForImage(final Builder builder, final Message message, - final ArrayList messages, final boolean notify) { + final ArrayList messages, final boolean notify) { try { final Bitmap bitmap = mXmppConnectionService.getFileBackend() - .getThumbnail(message, getPixel(288), false); + .getThumbnail(message, getPixel(200), false); final ArrayList tmp = new ArrayList<>(); for (final Message msg : messages) { if (msg.getType() == Message.TYPE_TEXT && msg.getTransferable() == null) { tmp.add(msg); - } + } } final BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle(); bigPictureStyle.bigPicture(bitmap); @@ -322,7 +322,7 @@ public class NotificationService { } private void modifyForTextOnly(final Builder builder, - final ArrayList messages, final boolean notify) { + final ArrayList messages, final boolean notify) { builder.setStyle(new NotificationCompat.BigTextStyle().bigText(getMergedBodies(messages))); builder.setContentText(UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first); if (notify) { @@ -337,7 +337,7 @@ public class NotificationService { && message.getEncryption() != Message.ENCRYPTION_PGP && message.getFileParams().height > 0) { return message; - } + } } return null; } @@ -384,7 +384,7 @@ public class NotificationService { private PendingIntent createContentIntent(final String conversationUuid, final String downloadMessageUuid) { final TaskStackBuilder stackBuilder = TaskStackBuilder - .create(mXmppConnectionService); + .create(mXmppConnectionService); stackBuilder.addParentStack(ConversationActivity.class); final Intent viewConversationIntent = new Intent(mXmppConnectionService, @@ -472,7 +472,7 @@ public class NotificationService { private int getPixel(final int dp) { final DisplayMetrics metrics = mXmppConnectionService.getResources() - .getDisplayMetrics(); + .getDisplayMetrics(); return ((int) (dp * metrics.density)); } @@ -482,7 +482,7 @@ public class NotificationService { private boolean inMiniGracePeriod(final Account account) { final int miniGrace = account.getStatus() == Account.State.ONLINE ? Config.MINI_GRACE_PERIOD - : Config.MINI_GRACE_PERIOD * 2; + : Config.MINI_GRACE_PERIOD * 2; return SystemClock.elapsedRealtime() < (this.mLastNotification + miniGrace); } diff --git a/src/main/res/layout/activity_publish_profile_picture.xml b/src/main/res/layout/activity_publish_profile_picture.xml index 8864f6d68..d7321ae13 100644 --- a/src/main/res/layout/activity_publish_profile_picture.xml +++ b/src/main/res/layout/activity_publish_profile_picture.xml @@ -20,7 +20,9 @@ android:layout_height="wrap_content" android:maxHeight="384dp" android:maxWidth="384dp" - android:adjustViewBounds="true"/> + android:adjustViewBounds="true" + android:padding="1dp" + android:background="@drawable/message_border" /> -- cgit v1.2.3 From fed7a521ab60a456c6ac45d79e525f570c1130e9 Mon Sep 17 00:00:00 2001 From: Christian S Date: Wed, 19 Aug 2015 20:18:26 +0200 Subject: =?UTF-8?q?replaced=20...=20with=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/res/values-de/strings.xml | 2 +- src/main/res/values/strings.xml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index 5b4c71eb7..1be779f3f 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -211,7 +211,7 @@ Eigener OMEMO-Fingerabdruck Andere Geräte OMEMO-Fingerabdruck vertrauen - Schlüssel abrufen... + Schlüssel abrufen… Erledigt Verifizieren Entschlüsseln diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index f139b759b..185494bc3 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -214,7 +214,7 @@ Own OMEMO fingerprint Other devices Trust OMEMO Fingerprints - Fetching keys... + Fetching keys… Done Verify Decrypt @@ -469,8 +469,8 @@ Offering %s Hide offline Disable Account - %s is typing... - is typing... + %s is typing… + is typing… %s has stopped typing Typing notifications Let your contact know when you are writing a new message -- cgit v1.2.3 From 496f531e2ef2cad5ff4dfb01ef0afe87c8b6b5c3 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 08:01:47 +0200 Subject: modified clearIqCallbacks into 2-step process --- .../eu/siacs/conversations/parser/IqParser.java | 12 +++++------ .../java/eu/siacs/conversations/xml/Element.java | 5 ++--- .../siacs/conversations/xmpp/XmppConnection.java | 25 +++++++++++++--------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/parser/IqParser.java b/src/main/java/eu/siacs/conversations/parser/IqParser.java index e74cb65c0..4488eed88 100644 --- a/src/main/java/eu/siacs/conversations/parser/IqParser.java +++ b/src/main/java/eu/siacs/conversations/parser/IqParser.java @@ -236,7 +236,9 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived { @Override public void onIqPacketReceived(final Account account, final IqPacket packet) { - if (packet.hasChild("query", Xmlns.ROSTER) && packet.fromServer(account)) { + if (packet.getType() == IqPacket.TYPE.ERROR) { + return; + } else if (packet.hasChild("query", Xmlns.ROSTER) && packet.fromServer(account)) { final Element query = packet.findChild("query"); // If this is in response to a query for the whole roster: if (packet.getType() == IqPacket.TYPE.RESULT) { @@ -306,15 +308,13 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived { final IqPacket response = packet.generateResponse(IqPacket.TYPE.RESULT); mXmppConnectionService.sendIqPacket(account, response, null); } else { - if ((packet.getType() == IqPacket.TYPE.GET) - || (packet.getType() == IqPacket.TYPE.SET)) { + if (packet.getType() == IqPacket.TYPE.GET || packet.getType() == IqPacket.TYPE.SET) { final IqPacket response = packet.generateResponse(IqPacket.TYPE.ERROR); final Element error = response.addChild("error"); error.setAttribute("type", "cancel"); - error.addChild("feature-not-implemented", - "urn:ietf:params:xml:ns:xmpp-stanzas"); + error.addChild("feature-not-implemented","urn:ietf:params:xml:ns:xmpp-stanzas"); account.getXmppConnection().sendIqPacket(response, null); - } + } } } diff --git a/src/main/java/eu/siacs/conversations/xml/Element.java b/src/main/java/eu/siacs/conversations/xml/Element.java index dc5a68f6c..7b4937b26 100644 --- a/src/main/java/eu/siacs/conversations/xml/Element.java +++ b/src/main/java/eu/siacs/conversations/xml/Element.java @@ -69,10 +69,9 @@ public class Element { public Element findChild(String name, String xmlns) { for (Element child : this.children) { - if (child.getName().equals(name) - && (child.getAttribute("xmlns").equals(xmlns))) { + if (name.equals(child.getName()) && xmlns.equals(child.getAttribute("xmlns"))) { return child; - } + } } return null; } diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 17b3c3ffb..e75cbb95a 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -1,13 +1,10 @@ package eu.siacs.conversations.xmpp; -import android.content.Context; -import android.content.SharedPreferences; import android.os.Bundle; import android.os.Parcelable; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.SystemClock; -import android.preference.PreferenceManager; import android.util.Log; import android.util.Pair; import android.util.SparseArray; @@ -37,7 +34,6 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import javax.net.ssl.HostnameVerifier; @@ -103,7 +99,7 @@ public class XmppConnection implements Runnable { private long lastConnect = 0; private long lastSessionStarted = 0; private int attempt = 0; - private final Map> packetCallbacks = new Hashtable<>(); + private final Hashtable> packetCallbacks = new Hashtable<>(); private OnPresencePacketReceived presenceListener = null; private OnJinglePacketReceived jingleListener = null; private OnIqPacketReceived unregisteredIqListener = null; @@ -727,9 +723,11 @@ public class XmppConnection implements Runnable { sendPostBindInitialization(); } } else { + Log.d(Config.LOGTAG,account.getJid()+": disconnecting because of bind failure"); disconnect(true); } } else { + Log.d(Config.LOGTAG,account.getJid()+": disconnecting because of bind failure"); disconnect(true); } } @@ -737,15 +735,19 @@ public class XmppConnection implements Runnable { } private void clearIqCallbacks() { - Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": clearing iq iq callbacks"); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": clearing "+this.packetCallbacks.size()+" iq callbacks"); final IqPacket failurePacket = new IqPacket(IqPacket.TYPE.ERROR); + final ArrayList callbacks = new ArrayList<>(); synchronized (this.packetCallbacks) { - Iterator>> iterator = this.packetCallbacks.entrySet().iterator(); + final Iterator> iterator = this.packetCallbacks.values().iterator(); while (iterator.hasNext()) { - Entry> entry = iterator.next(); - entry.getValue().second.onIqPacketReceived(account, failurePacket); - iterator.remove(); + Pair entry = iterator.next(); + callbacks.add(entry.second); } + this.packetCallbacks.clear(); + } + for(OnIqPacketReceived callback : callbacks) { + callback.onIqPacketReceived(account,failurePacket); } } @@ -758,6 +760,7 @@ public class XmppConnection implements Runnable { if (packet.getType() == IqPacket.TYPE.RESULT) { sendPostBindInitialization(); } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": could not init sessions"); disconnect(true); } } @@ -887,6 +890,8 @@ public class XmppConnection implements Runnable { Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": switching resource due to conflict (" + account.getResource() + ")"); + } else if (streamError != null) { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": stream error "+streamError.toString()); } } -- cgit v1.2.3 From 1688b659654cb1f3f5d4e20e6e238aa15fe60c96 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 08:27:05 +0200 Subject: don't make subsequent iq request when original stanza returned an error --- .../services/XmppConnectionService.java | 43 +++++++------ .../siacs/conversations/xmpp/XmppConnection.java | 75 +++++++++++++--------- 2 files changed, 67 insertions(+), 51 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index b89de6284..4811665b8 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -871,28 +871,31 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa @Override public void onIqPacketReceived(final Account account, final IqPacket packet) { - final Element query = packet.query(); - final List bookmarks = new CopyOnWriteArrayList<>(); - final Element storage = query.findChild("storage", - "storage:bookmarks"); - if (storage != null) { - for (final Element item : storage.getChildren()) { - if (item.getName().equals("conference")) { - final Bookmark bookmark = Bookmark.parse(item, account); - bookmarks.add(bookmark); - Conversation conversation = find(bookmark); - if (conversation != null) { - conversation.setBookmark(bookmark); - } else if (bookmark.autojoin() && bookmark.getJid() != null) { - conversation = findOrCreateConversation( - account, bookmark.getJid(), true); - conversation.setBookmark(bookmark); - joinMuc(conversation); + if (packet.getType() == IqPacket.TYPE.RESULT) { + final Element query = packet.query(); + final List bookmarks = new CopyOnWriteArrayList<>(); + final Element storage = query.findChild("storage", "storage:bookmarks"); + if (storage != null) { + for (final Element item : storage.getChildren()) { + if (item.getName().equals("conference")) { + final Bookmark bookmark = Bookmark.parse(item, account); + bookmarks.add(bookmark); + Conversation conversation = find(bookmark); + if (conversation != null) { + conversation.setBookmark(bookmark); + } else if (bookmark.autojoin() && bookmark.getJid() != null) { + conversation = findOrCreateConversation( + account, bookmark.getJid(), true); + conversation.setBookmark(bookmark); + joinMuc(conversation); + } } } } + account.setBookmarks(bookmarks); + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": could not fetch bookmarks"); } - account.setBookmarks(bookmarks); } }; sendIqPacket(account, iqPacket, callback); @@ -1955,10 +1958,8 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa final IqPacket packet = XmppConnectionService.this.mIqGenerator .publishAvatarMetadata(avatar); sendIqPacket(account, packet, new OnIqPacketReceived() { - @Override - public void onIqPacketReceived(Account account, - IqPacket result) { + public void onIqPacketReceived(Account account, IqPacket result) { if (result.getType() == IqPacket.TYPE.RESULT) { if (account.setAvatar(avatar.getFilename())) { getAvatarService().clear(account); diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index e75cbb95a..9063cca4a 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -414,9 +414,12 @@ public class XmppConnection implements Runnable { this.sendIqPacket(iq, new OnIqPacketReceived() { @Override public void onIqPacketReceived(final Account account, final IqPacket packet) { - Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() - + ": online with resource " + account.getResource()); - changeStatus(Account.State.ONLINE); + if (packet.getType() == IqPacket.TYPE.RESULT) { + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": online with resource " + account.getResource()); + changeStatus(Account.State.ONLINE); + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": initial ping failed"); + } } }); } @@ -656,8 +659,8 @@ public class XmppConnection implements Runnable { @Override public void onIqPacketReceived(final Account account, final IqPacket packet) { - final Element instructions = packet.query().findChild("instructions"); - if (packet.query().hasChild("username") + if (packet.getType() == IqPacket.TYPE.RESULT + && packet.query().hasChild("username") && (packet.query().hasChild("password"))) { final IqPacket register = new IqPacket(IqPacket.TYPE.SET); final Element username = new Element("username").setContent(account.getUsername()); @@ -684,6 +687,7 @@ public class XmppConnection implements Runnable { } }); } else { + final Element instructions = packet.query().findChild("instructions"); changeStatus(Account.State.REGISTRATION_FAILED); disconnect(true); Log.d(Config.LOGTAG, account.getJid().toBareJid() @@ -735,10 +739,13 @@ public class XmppConnection implements Runnable { } private void clearIqCallbacks() { - Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": clearing "+this.packetCallbacks.size()+" iq callbacks"); final IqPacket failurePacket = new IqPacket(IqPacket.TYPE.ERROR); final ArrayList callbacks = new ArrayList<>(); synchronized (this.packetCallbacks) { + if (this.packetCallbacks.size() == 0) { + return; + } + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": clearing "+this.packetCallbacks.size()+" iq callbacks"); final Iterator> iterator = this.packetCallbacks.values().iterator(); while (iterator.hasNext()) { Pair entry = iterator.next(); @@ -749,6 +756,7 @@ public class XmppConnection implements Runnable { for(OnIqPacketReceived callback : callbacks) { callback.onIqPacketReceived(account,failurePacket); } + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": done clearing iq callbacks"); } private void sendStartSession() { @@ -760,7 +768,7 @@ public class XmppConnection implements Runnable { if (packet.getType() == IqPacket.TYPE.RESULT) { sendPostBindInitialization(); } else { - Log.d(Config.LOGTAG,account.getJid().toBareJid()+": could not init sessions"); + Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": could not init sessions"); disconnect(true); } } @@ -805,26 +813,29 @@ public class XmppConnection implements Runnable { @Override public void onIqPacketReceived(final Account account, final IqPacket packet) { - final List elements = packet.query().getChildren(); - final Info info = new Info(); - for (final Element element : elements) { - if (element.getName().equals("identity")) { - String type = element.getAttribute("type"); - String category = element.getAttribute("category"); - if (type != null && category != null) { - info.identities.add(new Pair<>(category,type)); + if (packet.getType() == IqPacket.TYPE.RESULT) { + final List elements = packet.query().getChildren(); + final Info info = new Info(); + for (final Element element : elements) { + if (element.getName().equals("identity")) { + 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")) { + info.features.add(element.getAttribute("var")); } - } else if (element.getName().equals("feature")) { - info.features.add(element.getAttribute("var")); } - } - disco.put(jid, info); - - if (account.getServer().equals(jid)) { - enableAdvancedStreamFeatures(); - for (final OnAdvancedStreamFeaturesLoaded listener : advancedStreamFeaturesLoadedListeners) { - listener.onAdvancedStreamFeaturesAvailable(account); + disco.put(jid, info); + if (account.getServer().equals(jid)) { + enableAdvancedStreamFeatures(); + for (final OnAdvancedStreamFeaturesLoaded listener : advancedStreamFeaturesLoadedListeners) { + listener.onAdvancedStreamFeaturesAvailable(account); + } } + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": could not query disco info for "+jid.toString()); } } }); @@ -849,14 +860,18 @@ public class XmppConnection implements Runnable { @Override public void onIqPacketReceived(final Account account, final IqPacket packet) { - final List elements = packet.query().getChildren(); - for (final Element element : elements) { - if (element.getName().equals("item")) { - final Jid jid = element.getAttributeAsJid("jid"); - if (jid != null && !jid.equals(account.getServer())) { - sendServiceDiscoveryInfo(jid); + if (packet.getType() == IqPacket.TYPE.RESULT) { + final List elements = packet.query().getChildren(); + for (final Element element : elements) { + if (element.getName().equals("item")) { + final Jid jid = element.getAttributeAsJid("jid"); + if (jid != null && !jid.equals(account.getServer())) { + sendServiceDiscoveryInfo(jid); + } } } + } else { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": could not query disco items of "+server); } } }); -- cgit v1.2.3 From 3d6fb9b21d41728a56e56b53901b080815805265 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 10:20:29 +0200 Subject: remove callbacks directly from iterator --- src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 9063cca4a..ae11a3bfa 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -750,13 +750,13 @@ public class XmppConnection implements Runnable { while (iterator.hasNext()) { Pair entry = iterator.next(); callbacks.add(entry.second); + iterator.remove(); } - this.packetCallbacks.clear(); } for(OnIqPacketReceived callback : callbacks) { callback.onIqPacketReceived(account,failurePacket); } - Log.d(Config.LOGTAG,account.getJid().toBareJid()+": done clearing iq callbacks"); + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": done clearing iq callbacks. "+this.packetCallbacks.size()+" left"); } private void sendStartSession() { -- cgit v1.2.3 From c0502c2165305a0370bc16f3a847ec2760fe70b9 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 23 Aug 2015 12:39:20 +0200 Subject: remove the READ_PHONE_STATE permission. --- src/main/AndroidManifest.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 15d5bc255..7f07a39c7 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -15,6 +15,8 @@ + + Date: Sun, 23 Aug 2015 13:23:10 +0200 Subject: Add error handling to OMEMO PEP code Log received errors and abort processing --- .../crypto/axolotl/AxolotlService.java | 247 +++++++++++---------- 1 file changed, 131 insertions(+), 116 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java index f3775b793..d700b644b 100644 --- a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java +++ b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java @@ -307,21 +307,25 @@ public class AxolotlService { mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - Element item = mXmppConnectionService.getIqParser().getItem(packet); - Set deviceIds = mXmppConnectionService.getIqParser().deviceIds(item); - if (deviceIds == null) { - deviceIds = new HashSet(); - } - if (!deviceIds.contains(getOwnDeviceId())) { - deviceIds.add(getOwnDeviceId()); - IqPacket publish = mXmppConnectionService.getIqGenerator().publishDeviceIds(deviceIds); - Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Own device " + getOwnDeviceId() + " not in PEP devicelist. Publishing: " + publish); - mXmppConnectionService.sendIqPacket(account, publish, new OnIqPacketReceived() { - @Override - public void onIqPacketReceived(Account account, IqPacket packet) { - // TODO: implement this! - } - }); + if (packet.getType() == IqPacket.TYPE.RESULT) { + Element item = mXmppConnectionService.getIqParser().getItem(packet); + Set deviceIds = mXmppConnectionService.getIqParser().deviceIds(item); + if (deviceIds == null) { + deviceIds = new HashSet(); + } + if (!deviceIds.contains(getOwnDeviceId())) { + deviceIds.add(getOwnDeviceId()); + IqPacket publish = mXmppConnectionService.getIqGenerator().publishDeviceIds(deviceIds); + Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Own device " + getOwnDeviceId() + " not in PEP devicelist. Publishing: " + publish); + mXmppConnectionService.sendIqPacket(account, publish, new OnIqPacketReceived() { + @Override + public void onIqPacketReceived(Account account, IqPacket packet) { + // TODO: implement this! + } + }); + } + } else { + Log.d(Config.LOGTAG, getLogprefix(account) + "Error received while publishing device ID:" + packet.findChild("error")); } } }); @@ -332,88 +336,92 @@ public class AxolotlService { mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - PreKeyBundle bundle = mXmppConnectionService.getIqParser().bundle(packet); - Map keys = mXmppConnectionService.getIqParser().preKeyPublics(packet); - boolean flush = false; - if (bundle == null) { - Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Received invalid bundle:" + packet); - bundle = new PreKeyBundle(-1, -1, -1, null, -1, null, null, null); - flush = true; - } - if (keys == null) { - Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Received invalid prekeys:" + packet); - } - try { - boolean changed = false; - // Validate IdentityKey - IdentityKeyPair identityKeyPair = axolotlStore.getIdentityKeyPair(); - if (flush || !identityKeyPair.getPublicKey().equals(bundle.getIdentityKey())) { - Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Adding own IdentityKey " + identityKeyPair.getPublicKey() + " to PEP."); - changed = true; + if (packet.getType() == IqPacket.TYPE.RESULT) { + PreKeyBundle bundle = mXmppConnectionService.getIqParser().bundle(packet); + Map keys = mXmppConnectionService.getIqParser().preKeyPublics(packet); + boolean flush = false; + if (bundle == null) { + Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Received invalid bundle:" + packet); + bundle = new PreKeyBundle(-1, -1, -1, null, -1, null, null, null); + flush = true; + } + if (keys == null) { + Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Received invalid prekeys:" + packet); } - - // Validate signedPreKeyRecord + ID - SignedPreKeyRecord signedPreKeyRecord; - int numSignedPreKeys = axolotlStore.loadSignedPreKeys().size(); try { - signedPreKeyRecord = axolotlStore.loadSignedPreKey(bundle.getSignedPreKeyId()); - if (flush - || !bundle.getSignedPreKey().equals(signedPreKeyRecord.getKeyPair().getPublicKey()) - || !Arrays.equals(bundle.getSignedPreKeySignature(), signedPreKeyRecord.getSignature())) { + boolean changed = false; + // Validate IdentityKey + IdentityKeyPair identityKeyPair = axolotlStore.getIdentityKeyPair(); + if (flush || !identityKeyPair.getPublicKey().equals(bundle.getIdentityKey())) { + Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Adding own IdentityKey " + identityKeyPair.getPublicKey() + " to PEP."); + changed = true; + } + + // Validate signedPreKeyRecord + ID + SignedPreKeyRecord signedPreKeyRecord; + int numSignedPreKeys = axolotlStore.loadSignedPreKeys().size(); + try { + signedPreKeyRecord = axolotlStore.loadSignedPreKey(bundle.getSignedPreKeyId()); + if (flush + || !bundle.getSignedPreKey().equals(signedPreKeyRecord.getKeyPair().getPublicKey()) + || !Arrays.equals(bundle.getSignedPreKeySignature(), signedPreKeyRecord.getSignature())) { + Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Adding new signedPreKey with ID " + (numSignedPreKeys + 1) + " to PEP."); + signedPreKeyRecord = KeyHelper.generateSignedPreKey(identityKeyPair, numSignedPreKeys + 1); + axolotlStore.storeSignedPreKey(signedPreKeyRecord.getId(), signedPreKeyRecord); + changed = true; + } + } catch (InvalidKeyIdException e) { Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Adding new signedPreKey with ID " + (numSignedPreKeys + 1) + " to PEP."); signedPreKeyRecord = KeyHelper.generateSignedPreKey(identityKeyPair, numSignedPreKeys + 1); axolotlStore.storeSignedPreKey(signedPreKeyRecord.getId(), signedPreKeyRecord); changed = true; } - } catch (InvalidKeyIdException e) { - Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Adding new signedPreKey with ID " + (numSignedPreKeys + 1) + " to PEP."); - signedPreKeyRecord = KeyHelper.generateSignedPreKey(identityKeyPair, numSignedPreKeys + 1); - axolotlStore.storeSignedPreKey(signedPreKeyRecord.getId(), signedPreKeyRecord); - changed = true; - } - // Validate PreKeys - Set preKeyRecords = new HashSet<>(); - if (keys != null) { - for (Integer id : keys.keySet()) { - try { - PreKeyRecord preKeyRecord = axolotlStore.loadPreKey(id); - if (preKeyRecord.getKeyPair().getPublicKey().equals(keys.get(id))) { - preKeyRecords.add(preKeyRecord); + // Validate PreKeys + Set preKeyRecords = new HashSet<>(); + if (keys != null) { + for (Integer id : keys.keySet()) { + try { + PreKeyRecord preKeyRecord = axolotlStore.loadPreKey(id); + if (preKeyRecord.getKeyPair().getPublicKey().equals(keys.get(id))) { + preKeyRecords.add(preKeyRecord); + } + } catch (InvalidKeyIdException ignored) { } - } catch (InvalidKeyIdException ignored) { } } - } - int newKeys = NUM_KEYS_TO_PUBLISH - preKeyRecords.size(); - if (newKeys > 0) { - List newRecords = KeyHelper.generatePreKeys( - axolotlStore.getCurrentPreKeyId() + 1, newKeys); - preKeyRecords.addAll(newRecords); - for (PreKeyRecord record : newRecords) { - axolotlStore.storePreKey(record.getId(), record); + int newKeys = NUM_KEYS_TO_PUBLISH - preKeyRecords.size(); + if (newKeys > 0) { + List newRecords = KeyHelper.generatePreKeys( + axolotlStore.getCurrentPreKeyId() + 1, newKeys); + preKeyRecords.addAll(newRecords); + for (PreKeyRecord record : newRecords) { + axolotlStore.storePreKey(record.getId(), record); + } + changed = true; + Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Adding " + newKeys + " new preKeys to PEP."); } - changed = true; - Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Adding " + newKeys + " new preKeys to PEP."); - } - if (changed) { - IqPacket publish = mXmppConnectionService.getIqGenerator().publishBundles( - signedPreKeyRecord, axolotlStore.getIdentityKeyPair().getPublicKey(), - preKeyRecords, getOwnDeviceId()); - Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + ": Bundle " + getOwnDeviceId() + " in PEP not current. Publishing: " + publish); - mXmppConnectionService.sendIqPacket(account, publish, new OnIqPacketReceived() { - @Override - public void onIqPacketReceived(Account account, IqPacket packet) { - // TODO: implement this! - Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Published bundle, got: " + packet); - } - }); + if (changed) { + IqPacket publish = mXmppConnectionService.getIqGenerator().publishBundles( + signedPreKeyRecord, axolotlStore.getIdentityKeyPair().getPublicKey(), + preKeyRecords, getOwnDeviceId()); + Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + ": Bundle " + getOwnDeviceId() + " in PEP not current. Publishing: " + publish); + mXmppConnectionService.sendIqPacket(account, publish, new OnIqPacketReceived() { + @Override + public void onIqPacketReceived(Account account, IqPacket packet) { + // TODO: implement this! + Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Published bundle, got: " + packet); + } + }); + } + } catch (InvalidKeyException e) { + Log.e(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Failed to publish bundle " + getOwnDeviceId() + ", reason: " + e.getMessage()); + return; } - } catch (InvalidKeyException e) { - Log.e(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Failed to publish bundle " + getOwnDeviceId() + ", reason: " + e.getMessage()); - return; + } else { + Log.d(Config.LOGTAG, getLogprefix(account) + "Error received while publishing Bundle:" + packet.findChild("error")); } } }); @@ -453,45 +461,52 @@ public class AxolotlService { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Received preKey IQ packet, processing..."); - final IqParser parser = mXmppConnectionService.getIqParser(); - final List preKeyBundleList = parser.preKeys(packet); - final PreKeyBundle bundle = parser.bundle(packet); - if (preKeyBundleList.isEmpty() || bundle == null) { - Log.e(Config.LOGTAG, AxolotlService.getLogprefix(account) + "preKey IQ packet invalid: " + packet); - fetchStatusMap.put(address, FetchStatus.ERROR); + if (packet.getType() == IqPacket.TYPE.RESULT) { + Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Received preKey IQ packet, processing..."); + final IqParser parser = mXmppConnectionService.getIqParser(); + final List preKeyBundleList = parser.preKeys(packet); + final PreKeyBundle bundle = parser.bundle(packet); + if (preKeyBundleList.isEmpty() || bundle == null) { + Log.e(Config.LOGTAG, AxolotlService.getLogprefix(account) + "preKey IQ packet invalid: " + packet); + fetchStatusMap.put(address, FetchStatus.ERROR); + finish(); + return; + } + Random random = new Random(); + final PreKeyBundle preKey = preKeyBundleList.get(random.nextInt(preKeyBundleList.size())); + if (preKey == null) { + //should never happen + fetchStatusMap.put(address, FetchStatus.ERROR); + finish(); + return; + } + + final PreKeyBundle preKeyBundle = new PreKeyBundle(0, address.getDeviceId(), + preKey.getPreKeyId(), preKey.getPreKey(), + bundle.getSignedPreKeyId(), bundle.getSignedPreKey(), + bundle.getSignedPreKeySignature(), bundle.getIdentityKey()); + + axolotlStore.saveIdentity(address.getName(), bundle.getIdentityKey()); + + try { + SessionBuilder builder = new SessionBuilder(axolotlStore, address); + builder.process(preKeyBundle); + XmppAxolotlSession session = new XmppAxolotlSession(account, axolotlStore, address, bundle.getIdentityKey().getFingerprint().replaceAll("\\s", "")); + sessions.put(address, session); + fetchStatusMap.put(address, FetchStatus.SUCCESS); + } catch (UntrustedIdentityException | InvalidKeyException e) { + Log.e(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Error building session for " + address + ": " + + e.getClass().getName() + ", " + e.getMessage()); + fetchStatusMap.put(address, FetchStatus.ERROR); + } + finish(); - return; - } - Random random = new Random(); - final PreKeyBundle preKey = preKeyBundleList.get(random.nextInt(preKeyBundleList.size())); - if (preKey == null) { - //should never happen + } else { fetchStatusMap.put(address, FetchStatus.ERROR); + Log.d(Config.LOGTAG, getLogprefix(account) + "Error received while building session:" + packet.findChild("error")); finish(); return; } - - final PreKeyBundle preKeyBundle = new PreKeyBundle(0, address.getDeviceId(), - preKey.getPreKeyId(), preKey.getPreKey(), - bundle.getSignedPreKeyId(), bundle.getSignedPreKey(), - bundle.getSignedPreKeySignature(), bundle.getIdentityKey()); - - axolotlStore.saveIdentity(address.getName(), bundle.getIdentityKey()); - - try { - SessionBuilder builder = new SessionBuilder(axolotlStore, address); - builder.process(preKeyBundle); - XmppAxolotlSession session = new XmppAxolotlSession(account, axolotlStore, address, bundle.getIdentityKey().getFingerprint().replaceAll("\\s", "")); - sessions.put(address, session); - fetchStatusMap.put(address, FetchStatus.SUCCESS); - } catch (UntrustedIdentityException | InvalidKeyException e) { - Log.e(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Error building session for " + address + ": " - + e.getClass().getName() + ", " + e.getMessage()); - fetchStatusMap.put(address, FetchStatus.ERROR); - } - - finish(); } }); } catch (InvalidJidException e) { -- cgit v1.2.3 From 96c6c793b3791ab2b0cfa94d945097da005ce18c Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 13:25:04 +0200 Subject: version bump to 1.6.1 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 0537d3961..252aedbe3 100644 --- a/build.gradle +++ b/build.gradle @@ -48,8 +48,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 21 - versionCode 84 - versionName "1.6.0" + versionCode 85 + versionName "1.6.1" } compileOptions { -- cgit v1.2.3 From 10a9bd3864be5903d6cb4386f815bbc406d90d4f Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 23 Aug 2015 13:27:06 +0200 Subject: update zxing to v3.2.1 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index f6a34c329..94cce2acb 100644 --- a/build.gradle +++ b/build.gradle @@ -31,8 +31,8 @@ dependencies { compile 'org.bouncycastle:bcprov-jdk15on:1.51' compile 'org.jitsi:org.otr4j:0.22' compile 'org.gnu.inet:libidn:1.15' - compile 'com.google.zxing:core:3.1.0' - compile 'com.google.zxing:android-integration:3.1.0' + compile 'com.google.zxing:core:3.2.1' + compile 'com.google.zxing:android-integration:3.2.1' compile 'de.measite.minidns:minidns:0.1.3' compile 'de.timroes.android:EnhancedListView:0.3.4' compile 'me.leolin:ShortcutBadger:1.1.3@aar' -- cgit v1.2.3 From 560e63564dfb4608de6615b1388e6651d5ee93ba Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 13:29:55 +0200 Subject: added changelog for 1.6.1 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 644137094..0f081319e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ###Changelog +####Version 1.6.1 +* fixed crashes + ####Version 1.6.0 * new multi-end-to-multi-end encryption method * redesigned chat bubbles -- cgit v1.2.3 From d51c4b965536b9bc5ce627b33c5de2e5cdac4bfb Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 17:26:50 +0200 Subject: deal with another set of stream:features after bind --- .../java/eu/siacs/conversations/xmpp/XmppConnection.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index ae11a3bfa..88f8eea08 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -83,7 +83,7 @@ public class XmppConnection implements Runnable { private XmlReader tagReader; private TagWriter tagWriter; private final Features features = new Features(this); - private boolean shouldBind = true; + private boolean needsBinding = true; private boolean shouldAuthenticate = true; private Element streamFeatures; private final HashMap disco = new HashMap<>(); @@ -145,7 +145,7 @@ public class XmppConnection implements Runnable { lastPingSent = SystemClock.elapsedRealtime(); this.attempt++; try { - shouldAuthenticate = shouldBind = !account.isOptionSet(Account.OPTION_REGISTER); + shouldAuthenticate = needsBinding = !account.isOptionSet(Account.OPTION_REGISTER); tagReader = new XmlReader(wakeLock); tagWriter = new TagWriter(); this.changeStatus(Account.State.CONNECTING); @@ -634,11 +634,12 @@ public class XmppConnection implements Runnable { } final ResumePacket resume = new ResumePacket(this.streamId, stanzasReceived, smVersion); this.tagWriter.writeStanzaAsync(resume); - } else if (this.streamFeatures.hasChild("bind") && shouldBind) { - sendBindRequest(); - } else { - disconnect(true); - changeStatus(Account.State.INCOMPATIBLE_SERVER); + } else if (needsBinding) { + if (this.streamFeatures.hasChild("bind")) { + sendBindRequest(); + } else { + throw new IncompatibleServerException(); + } } } @@ -705,6 +706,7 @@ public class XmppConnection implements Runnable { } catch (final InterruptedException ignored) { } } + needsBinding = false; clearIqCallbacks(); final IqPacket iq = new IqPacket(IqPacket.TYPE.SET); iq.addChild("bind", "urn:ietf:params:xml:ns:xmpp-bind") -- cgit v1.2.3 From bbfd98b726d732d1b9d2670247fbef51ba379866 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 17:29:31 +0200 Subject: reformating --- src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 88f8eea08..6366fd03f 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -626,9 +626,7 @@ public class XmppConnection implements Runnable { } else { throw new IncompatibleServerException(); } - } else if (this.streamFeatures.hasChild("sm", "urn:xmpp:sm:" - + smVersion) - && streamId != null) { + } else if (this.streamFeatures.hasChild("sm", "urn:xmpp:sm:" + smVersion) && streamId != null) { if (Config.EXTENDED_SM_LOGGING) { Log.d(Config.LOGTAG,account.getJid().toBareJid()+": resuming after stanza #"+stanzasReceived); } -- cgit v1.2.3 From 0dfb9bd1a06436ffb6dd7a5cfbdefa11d3ae130e Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 17:53:23 +0200 Subject: introduce special iq type for internal timeouts. always use != result to check for error in callbacks --- src/main/java/eu/siacs/conversations/parser/IqParser.java | 2 +- .../conversations/services/MessageArchiveService.java | 2 +- .../conversations/services/XmppConnectionService.java | 14 ++++++-------- .../java/eu/siacs/conversations/xmpp/XmppConnection.java | 4 ++-- .../siacs/conversations/xmpp/jingle/JingleConnection.java | 9 ++++----- .../conversations/xmpp/jingle/JingleInbandTransport.java | 2 +- .../java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java | 5 +++-- 7 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/parser/IqParser.java b/src/main/java/eu/siacs/conversations/parser/IqParser.java index 4488eed88..cef5b03d9 100644 --- a/src/main/java/eu/siacs/conversations/parser/IqParser.java +++ b/src/main/java/eu/siacs/conversations/parser/IqParser.java @@ -236,7 +236,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived { @Override public void onIqPacketReceived(final Account account, final IqPacket packet) { - if (packet.getType() == IqPacket.TYPE.ERROR) { + if (packet.getType() == IqPacket.TYPE.ERROR || packet.getType() == IqPacket.TYPE.TIMEOUT) { return; } else if (packet.hasChild("query", Xmlns.ROSTER) && packet.fromServer(account)) { final Element query = packet.findChild("query"); diff --git a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java index 0bc428c88..a31848a7c 100644 --- a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java +++ b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java @@ -111,7 +111,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { this.mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() == IqPacket.TYPE.ERROR) { + if (packet.getType() != IqPacket.TYPE.RESULT) { Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": error executing mam: " + packet.toString()); finalizeQuery(query); } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 4811665b8..36d6cd490 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -214,7 +214,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa private OnIqPacketReceived mDefaultIqHandler = new OnIqPacketReceived() { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() == IqPacket.TYPE.ERROR) { + if (packet.getType() != IqPacket.TYPE.RESULT) { Element error = packet.findChild("error"); String text = error != null ? error.findChildContent("text") : null; if (text != null) { @@ -1678,7 +1678,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa sendIqPacket(conversation.getAccount(), request, new OnIqPacketReceived() { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() != IqPacket.TYPE.ERROR) { + if (packet.getType() == IqPacket.TYPE.RESULT) { ArrayList features = new ArrayList<>(); for (Element child : packet.query().getChildren()) { if (child != null && child.getName().equals("feature")) { @@ -1702,7 +1702,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa sendIqPacket(conversation.getAccount(), request, new OnIqPacketReceived() { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() != IqPacket.TYPE.ERROR) { + if (packet.getType() == IqPacket.TYPE.RESULT) { Data data = Data.parse(packet.query().findChild("x", "jabber:x:data")); for (Field field : data.getFields()) { if (options.containsKey(field.getName())) { @@ -1716,12 +1716,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa sendIqPacket(account, set, new OnIqPacketReceived() { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() == IqPacket.TYPE.RESULT) { - if (callback != null) { + if (callback != null) { + if (packet.getType() == IqPacket.TYPE.RESULT) { callback.onPushSucceeded(); - } - } else { - if (callback != null) { + } else { callback.onPushFailed(); } } diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 6366fd03f..604325be9 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -414,7 +414,7 @@ public class XmppConnection implements Runnable { this.sendIqPacket(iq, new OnIqPacketReceived() { @Override public void onIqPacketReceived(final Account account, final IqPacket packet) { - if (packet.getType() == IqPacket.TYPE.RESULT) { + if (packet.getType() != IqPacket.TYPE.TIMEOUT) { Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": online with resource " + account.getResource()); changeStatus(Account.State.ONLINE); } else { @@ -739,7 +739,7 @@ public class XmppConnection implements Runnable { } private void clearIqCallbacks() { - final IqPacket failurePacket = new IqPacket(IqPacket.TYPE.ERROR); + final IqPacket failurePacket = new IqPacket(IqPacket.TYPE.TIMEOUT); final ArrayList callbacks = new ArrayList<>(); synchronized (this.packetCallbacks) { if (this.packetCallbacks.size() == 0) { diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java index 7b140842a..4f733b10e 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java @@ -85,7 +85,7 @@ public class JingleConnection implements Transferable { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() == IqPacket.TYPE.ERROR) { + if (packet.getType() != IqPacket.TYPE.RESULT) { fail(); } } @@ -449,7 +449,7 @@ public class JingleConnection implements Transferable { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() != IqPacket.TYPE.ERROR) { + if (packet.getType() == IqPacket.TYPE.RESULT) { Log.d(Config.LOGTAG,account.getJid().toBareJid()+": other party received offer"); mJingleStatus = JINGLE_STATUS_INITIATED; mXmppConnectionService.markMessage(message, Message.STATUS_OFFERED); @@ -634,12 +634,11 @@ public class JingleConnection implements Transferable { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() == IqPacket.TYPE.ERROR) { + if (packet.getType() != IqPacket.TYPE.RESULT) { onProxyActivated.failed(); } else { onProxyActivated.success(); - sendProxyActivated(connection - .getCandidate().getCid()); + sendProxyActivated(connection.getCandidate().getCid()); } } }); 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 ab7ab73b8..85280c5ce 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java @@ -74,7 +74,7 @@ public class JingleInbandTransport extends JingleTransport { @Override public void onIqPacketReceived(Account account, IqPacket packet) { - if (packet.getType() == IqPacket.TYPE.ERROR) { + if (packet.getType() != IqPacket.TYPE.RESULT) { callback.failed(); } else { callback.established(); diff --git a/src/main/java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java b/src/main/java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java index 398102e12..49b274082 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java +++ b/src/main/java/eu/siacs/conversations/xmpp/stanzas/IqPacket.java @@ -4,12 +4,13 @@ import eu.siacs.conversations.xml.Element; public class IqPacket extends AbstractStanza { - public static enum TYPE { + public enum TYPE { ERROR, SET, RESULT, GET, - INVALID + INVALID, + TIMEOUT } public IqPacket(final TYPE type) { -- cgit v1.2.3 From b1f1a991906cd28ffb0c6e5a199872a1f508939a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 17:59:10 +0200 Subject: version bump to 1.6.2 and changelog --- CHANGELOG.md | 3 +++ build.gradle | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f081319e..279fada19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ###Changelog +####Version 1.6.2 +* fixed issues with connection time out when server does not support ping + ####Version 1.6.1 * fixed crashes diff --git a/build.gradle b/build.gradle index 252aedbe3..058830f14 100644 --- a/build.gradle +++ b/build.gradle @@ -48,8 +48,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 21 - versionCode 85 - versionName "1.6.1" + versionCode 86 + versionName "1.6.2" } compileOptions { -- cgit v1.2.3 From 8043833156119eef4662c50f30ca647bfc6d4438 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 19:40:45 +0200 Subject: bugfix: next encryption is now being properly detected --- src/main/java/eu/siacs/conversations/entities/Conversation.java | 4 ++-- src/main/java/eu/siacs/conversations/persistance/FileBackend.java | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 9f9f34cf8..36d6b43b0 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -552,7 +552,7 @@ public class Conversation extends AbstractEntity implements Blockable { private int getMostRecentlyUsedOutgoingEncryption() { synchronized (this.messages) { for(int i = this.messages.size() -1; i >= 0; --i) { - final Message m = this.messages.get(0); + final Message m = this.messages.get(i); if (!m.isCarbon() && m.getStatus() != Message.STATUS_RECEIVED) { final int e = m.getEncryption(); if (e == Message.ENCRYPTION_DECRYPTED || e == Message.ENCRYPTION_DECRYPTION_FAILED) { @@ -569,7 +569,7 @@ public class Conversation extends AbstractEntity implements Blockable { private int getMostRecentlyUsedIncomingEncryption() { synchronized (this.messages) { for(int i = this.messages.size() -1; i >= 0; --i) { - final Message m = this.messages.get(0); + final Message m = this.messages.get(i); if (m.getStatus() == Message.STATUS_RECEIVED) { final int e = m.getEncryption(); if (e == Message.ENCRYPTION_DECRYPTED || e == Message.ENCRYPTION_DECRYPTION_FAILED) { diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 00637257c..9381ba1d8 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -133,7 +133,6 @@ public class FileBackend { if (path == null) { return false; } - Log.d(Config.LOGTAG,"using image as is. path: "+path); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; try { -- cgit v1.2.3 From c19adebaf05e732179e0267427292c408ec7d560 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 21:00:51 +0200 Subject: open files with capital extensions as well. fixes #1354 --- src/main/java/eu/siacs/conversations/utils/MimeUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/utils/MimeUtils.java b/src/main/java/eu/siacs/conversations/utils/MimeUtils.java index a9e89d1b7..d45444240 100644 --- a/src/main/java/eu/siacs/conversations/utils/MimeUtils.java +++ b/src/main/java/eu/siacs/conversations/utils/MimeUtils.java @@ -458,7 +458,7 @@ public final class MimeUtils { if (extension == null || extension.isEmpty()) { return null; } - return extensionToMimeTypeMap.get(extension); + return extensionToMimeTypeMap.get(extension.toLowerCase()); } /** * Returns true if the given extension has a registered MIME type. -- cgit v1.2.3 From 5a53ff80fbaafb405f88cb4949bb46d8ffc450cc Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 23 Aug 2015 21:01:54 +0200 Subject: version bump to 1.6.3 and changelog --- CHANGELOG.md | 3 +++ build.gradle | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 279fada19..080054259 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ###Changelog +####Version 1.6.3 +* bug fixes + ####Version 1.6.2 * fixed issues with connection time out when server does not support ping diff --git a/build.gradle b/build.gradle index 058830f14..90878de31 100644 --- a/build.gradle +++ b/build.gradle @@ -48,8 +48,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 21 - versionCode 86 - versionName "1.6.2" + versionCode 87 + versionName "1.6.3" } compileOptions { -- cgit v1.2.3 From dfe58eaf341efe988f80faf5dc888900d28aa37a Mon Sep 17 00:00:00 2001 From: Christian S Date: Mon, 24 Aug 2015 11:22:55 +0200 Subject: version 1.6.3 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a434faabc..3e920ad92 100644 --- a/build.gradle +++ b/build.gradle @@ -49,7 +49,7 @@ android { minSdkVersion 14 targetSdkVersion 21 versionCode 87 - versionName "1.7.0-alpha" + versionName "1.6.3" } compileOptions { -- cgit v1.2.3