diff options
Diffstat (limited to 'src')
20 files changed, 145 insertions, 89 deletions
diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index cddcd6d55..30f762a6b 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -14,6 +14,8 @@ public final class Config { public static final boolean HIDE_PGP_IN_UI = true; //some more consumer focused clients might want to disable OpenPGP public static final boolean HIDE_ENCRYPTION_IN_UI = true; //completely hide encryption options in menu bar + public static final boolean LEGACY_NAMESPACE_HTTP_UPLOAD = false; + public static final int PING_MAX_INTERVAL = 300; public static final int PING_MIN_INTERVAL = 30; public static final int PING_TIMEOUT = 15; 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 df7f905b2..70de2777d 100644 --- a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java +++ b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java @@ -394,6 +394,20 @@ public class AxolotlService { mXmppConnectionService.sendIqPacket(account, packet, new OnIqPacketReceived() { @Override public void onIqPacketReceived(Account account, IqPacket packet) { + + if (packet.getType() == IqPacket.TYPE.TIMEOUT) { + return; //ignore timeout. do nothing + } + + if (packet.getType() == IqPacket.TYPE.ERROR) { + Element error = packet.findChild("error"); + if (error == null || !error.hasChild("item-not-found")) { + pepBroken = true; + Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "request for device bundles came back with something other than item-not-found" + packet); + return; + } + } + PreKeyBundle bundle = mXmppConnectionService.getIqParser().bundle(packet); Map<Integer, ECPublicKey> keys = mXmppConnectionService.getIqParser().preKeyPublics(packet); boolean flush = false; diff --git a/src/main/java/eu/siacs/conversations/entities/Bookmark.java b/src/main/java/eu/siacs/conversations/entities/Bookmark.java index cc6f146b5..0210da245 100644 --- a/src/main/java/eu/siacs/conversations/entities/Bookmark.java +++ b/src/main/java/eu/siacs/conversations/entities/Bookmark.java @@ -50,8 +50,8 @@ public class Bookmark extends Element implements ListItem { if (this.mJoinedConversation != null && (this.mJoinedConversation.getMucOptions().getSubject() != null)) { return this.mJoinedConversation.getMucOptions().getSubject(); - } else if (getName() != null) { - return getName(); + } else if (getBookmarkName() != null) { + return getBookmarkName(); } else { return this.getJid().getLocalpart(); } @@ -134,14 +134,10 @@ public class Bookmark extends Element implements ListItem { this.mJoinedConversation = conversation; } - public String getName() { + public String getBookmarkName() { return this.getAttribute("name"); } - public void setName(String name) { - this.name = name; - } - public void unregisterConversation() { if (this.mJoinedConversation != null) { this.mJoinedConversation.deregisterWithBookmark(); diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index dce60e4a5..8ffc44141 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -341,8 +341,8 @@ public class Conversation extends AbstractEntity implements Blockable { if (getMode() == MODE_MULTI) { if (getMucOptions().getSubject() != null) { return getMucOptions().getSubject(); - } else if (bookmark != null && bookmark.getName() != null) { - return bookmark.getName(); + } else if (bookmark != null && bookmark.getBookmarkName() != null) { + return bookmark.getBookmarkName(); } else { String generatedName = getMucOptions().createNameFromParticipants(); if (generatedName != null) { diff --git a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java index 898d218e4..835b9bf6c 100644 --- a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java +++ b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java @@ -176,7 +176,7 @@ public class IqGenerator extends AbstractGenerator { public IqPacket queryMessageArchiveManagement(final MessageArchiveService.Query mam) { final IqPacket packet = new IqPacket(IqPacket.TYPE.SET); final Element query = packet.query("urn:xmpp:mam:0"); - query.setAttribute("queryid",mam.getQueryId()); + query.setAttribute("queryid", mam.getQueryId()); final Data data = new Data(); data.setFormType("urn:xmpp:mam:0"); if (mam.muc()) { @@ -184,8 +184,9 @@ public class IqGenerator extends AbstractGenerator { } else if (mam.getWith()!=null) { data.put("with", mam.getWith().toString()); } - data.put("start",getTimestamp(mam.getStart())); - data.put("end",getTimestamp(mam.getEnd())); + data.put("start", getTimestamp(mam.getStart())); + data.put("end", getTimestamp(mam.getEnd())); + data.submit(); query.addChild(data); if (mam.getPagingOrder() == MessageArchiveService.PagingOrder.REVERSE) { query.addChild("set", "http://jabber.org/protocol/rsm").addChild("before").setContent(mam.getReference()); diff --git a/src/main/java/eu/siacs/conversations/http/HttpUploadConnection.java b/src/main/java/eu/siacs/conversations/http/HttpUploadConnection.java index 2e5458423..38e25e7af 100644 --- a/src/main/java/eu/siacs/conversations/http/HttpUploadConnection.java +++ b/src/main/java/eu/siacs/conversations/http/HttpUploadConnection.java @@ -70,11 +70,14 @@ public class HttpUploadConnection implements Transferable { @Override public long getFileSize() { - return this.file.getExpectedSize(); + return file == null ? 0 : file.getExpectedSize(); } @Override public int getProgress() { + if (file == null) { + return 0; + } return (int) ((((double) transmitted) / file.getExpectedSize()) * 100); } @@ -92,8 +95,6 @@ public class HttpUploadConnection implements Transferable { public void init(Message message, boolean delay) { this.message = message; - message.setTransferable(this); - mXmppConnectionService.markMessage(message, Message.STATUS_UNSEND); this.account = message.getConversation().getAccount(); this.file = mXmppConnectionService.getFileBackend().getFile(message, false); this.mime = this.file.getMimeType(); @@ -139,6 +140,8 @@ public class HttpUploadConnection implements Transferable { } } }); + message.setTransferable(this); + mXmppConnectionService.markMessage(message, Message.STATUS_UNSEND); } private class FileUploader implements Runnable { diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 1168e0403..ee0ccd4f7 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -1701,8 +1701,8 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa 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())) { - field.setValue(options.getString(field.getName())); + if (options.containsKey(field.getFieldName())) { + field.setValue(options.getString(field.getFieldName())); } } data.submit(); diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index 986abf6a5..16ce570c8 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -204,65 +204,68 @@ public class ConversationActivity extends XmppActivity }); listView.setDismissCallback(new EnhancedListView.OnDismissCallback() { + @Override + public EnhancedListView.Undoable onDismiss(final EnhancedListView enhancedListView, final int position) { - @Override - public EnhancedListView.Undoable onDismiss(final EnhancedListView enhancedListView, final int position) { - - final int index = listView.getFirstVisiblePosition(); - View v = listView.getChildAt(0); - final int top = (v == null) ? 0 : (v.getTop() - listView.getPaddingTop()); - - swipedConversation = listAdapter.getItem(position); - listAdapter.remove(swipedConversation); - swipedConversation.markRead(); - xmppConnectionService.getNotificationService().clear(swipedConversation); - - final boolean formerlySelected = (getSelectedConversation() == swipedConversation); - if (position == 0 && listAdapter.getCount() == 0) { - endConversation(swipedConversation, false, true); - return null; - } else if (formerlySelected) { - setSelectedConversation(listAdapter.getItem(0)); - ConversationActivity.this.mConversationFragment - .reInit(getSelectedConversation()); - } - - return new EnhancedListView.Undoable() { - - @Override - public void undo() { - listAdapter.insert(swipedConversation, position); - if (formerlySelected) { - setSelectedConversation(swipedConversation); - ConversationActivity.this.mConversationFragment - .reInit(getSelectedConversation()); - } - swipedConversation = null; - listView.setSelectionFromTop(index + (listView.getChildCount() < position ? 1 : 0), top); - } + final int index = listView.getFirstVisiblePosition(); + View v = listView.getChildAt(0); + final int top = (v == null) ? 0 : (v.getTop() - listView.getPaddingTop()); - @Override - public void discard() { - if (!swipedConversation.isRead() - && swipedConversation.getMode() == Conversation.MODE_SINGLE) { - swipedConversation = null; - return; - } - endConversation(swipedConversation, false, false); - swipedConversation = null; - } + try { + swipedConversation = listAdapter.getItem(position); + } catch (IndexOutOfBoundsException e) { + return null; + } + listAdapter.remove(swipedConversation); + swipedConversation.markRead(); + xmppConnectionService.getNotificationService().clear(swipedConversation); + + final boolean formerlySelected = (getSelectedConversation() == swipedConversation); + if (position == 0 && listAdapter.getCount() == 0) { + endConversation(swipedConversation, false, true); + return null; + } else if (formerlySelected) { + setSelectedConversation(listAdapter.getItem(0)); + ConversationActivity.this.mConversationFragment + .reInit(getSelectedConversation()); + } - @Override - public String getTitle() { - if (swipedConversation.getMode() == Conversation.MODE_MULTI) { - return getResources().getString(R.string.title_undo_swipe_out_muc); - } else { - return getResources().getString(R.string.title_undo_swipe_out_conversation); - } - } - }; - } - }); + return new EnhancedListView.Undoable() { + + @Override + public void undo() { + listAdapter.insert(swipedConversation, position); + if (formerlySelected) { + setSelectedConversation(swipedConversation); + ConversationActivity.this.mConversationFragment + .reInit(getSelectedConversation()); + } + swipedConversation = null; + listView.setSelectionFromTop(index + (listView.getChildCount() < position ? 1 : 0), top); + } + + @Override + public void discard() { + if (!swipedConversation.isRead() + && swipedConversation.getMode() == Conversation.MODE_SINGLE) { + swipedConversation = null; + return; + } + endConversation(swipedConversation, false, false); + swipedConversation = null; + } + + @Override + public String getTitle() { + if (swipedConversation.getMode() == Conversation.MODE_MULTI) { + return getResources().getString(R.string.title_undo_swipe_out_muc); + } else { + return getResources().getString(R.string.title_undo_swipe_out_conversation); + } + } + }; + } + }); listView.enableSwipeToDismiss(); listView.setSwipingLayout(R.id.swipeable_item); listView.setUndoStyle(EnhancedListView.UndoStyle.SINGLE_POPUP); diff --git a/src/main/java/eu/siacs/conversations/utils/DNSHelper.java b/src/main/java/eu/siacs/conversations/utils/DNSHelper.java index 70bc73606..863cfb66b 100644 --- a/src/main/java/eu/siacs/conversations/utils/DNSHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/DNSHelper.java @@ -45,7 +45,7 @@ public class DNSHelper { public static Bundle getSRVRecord(final Jid jid, Context context) throws IOException { final String host = jid.getDomainpart(); - final List<InetAddress> servers = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? getDnsServers(context) : getDnsServersPreLolipop(); + final List<InetAddress> servers = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? getDnsServers(context) : getDnsServersPreLollipop(); Bundle b = null; for(InetAddress server : servers) { b = queryDNS(host, server); @@ -60,15 +60,23 @@ public class DNSHelper { private static List<InetAddress> getDnsServers(Context context) { List<InetAddress> servers = new ArrayList<>(); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - Network[] networks = connectivityManager.getAllNetworks(); + Network[] networks = connectivityManager == null ? null : connectivityManager.getAllNetworks(); + if (networks == null) { + return getDnsServersPreLollipop(); + } for(int i = 0; i < networks.length; ++i) { LinkProperties linkProperties = connectivityManager.getLinkProperties(networks[i]); - servers.addAll(linkProperties.getDnsServers()); + if (linkProperties != null) { + servers.addAll(linkProperties.getDnsServers()); + } + } + if (servers.size() > 0) { + Log.d(Config.LOGTAG,"used lollipop variant to discover dns servers in "+networks.length+" networks"); } - return servers.size() > 0 ? servers : getDnsServersPreLolipop(); + return servers.size() > 0 ? servers : getDnsServersPreLollipop(); } - private static List<InetAddress> getDnsServersPreLolipop() { + private static List<InetAddress> getDnsServersPreLollipop() { List<InetAddress> servers = new ArrayList<>(); String[] dns = client.findDNS(); for(int i = 0; i < dns.length; ++i) { diff --git a/src/main/java/eu/siacs/conversations/utils/Xmlns.java b/src/main/java/eu/siacs/conversations/utils/Xmlns.java index de0a29ce2..a19ec791f 100644 --- a/src/main/java/eu/siacs/conversations/utils/Xmlns.java +++ b/src/main/java/eu/siacs/conversations/utils/Xmlns.java @@ -1,9 +1,11 @@ package eu.siacs.conversations.utils; +import eu.siacs.conversations.Config; + public final class Xmlns { public static final String BLOCKING = "urn:xmpp:blocking"; public static final String ROSTER = "jabber:iq:roster"; public static final String REGISTER = "jabber:iq:register"; public static final String BYTE_STREAMS = "http://jabber.org/protocol/bytestreams"; - public static final String HTTP_UPLOAD = "urn:xmpp:http:upload"; + public static final String HTTP_UPLOAD = Config.LEGACY_NAMESPACE_HTTP_UPLOAD ? "eu:siacs:conversations:http:upload" : "urn:xmpp:http:upload"; } diff --git a/src/main/java/eu/siacs/conversations/xml/Element.java b/src/main/java/eu/siacs/conversations/xml/Element.java index 7b4937b26..e82c446bd 100644 --- a/src/main/java/eu/siacs/conversations/xml/Element.java +++ b/src/main/java/eu/siacs/conversations/xml/Element.java @@ -12,9 +12,9 @@ import eu.siacs.conversations.xmpp.jid.InvalidJidException; import eu.siacs.conversations.xmpp.jid.Jid; public class Element { - protected String name; - protected Hashtable<String, String> attributes = new Hashtable<>(); - protected String content; + private final String name; + private Hashtable<String, String> attributes = new Hashtable<>(); + private String content; protected List<Element> children = new ArrayList<>(); public Element(String name) { @@ -98,7 +98,7 @@ public class Element { return this; } - public String getContent() { + public final String getContent() { return content; } @@ -162,7 +162,7 @@ public class Element { return elementOutput.toString(); } - public String getName() { + public final String getName() { return name; } diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index a65f51fef..870f50d5d 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -480,7 +480,7 @@ public class XmppConnection implements Runnable { final Pair<IqPacket, OnIqPacketReceived> packetCallbackDuple = packetCallbacks.get(packet.getId()); // Packets to the server should have responses from the server if (packetCallbackDuple.first.toServer(account)) { - if (packet.fromServer(account)) { + if (packet.fromServer(account) || account.getJid().getDomainpart().equals("chat.facebook.com")) { callback = packetCallbackDuple.second; packetCallbacks.remove(packet.getId()); } else { diff --git a/src/main/java/eu/siacs/conversations/xmpp/forms/Field.java b/src/main/java/eu/siacs/conversations/xmpp/forms/Field.java index ee2c51a9c..c83880005 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/forms/Field.java +++ b/src/main/java/eu/siacs/conversations/xmpp/forms/Field.java @@ -16,7 +16,7 @@ public class Field extends Element { super("field"); } - public String getName() { + public String getFieldName() { return this.getAttribute("var"); } diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index 25af98170..5c8edec01 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -408,7 +408,10 @@ <string name="public_conference">Публично достъпни беседи</string> <string name="private_conference">Частни беседи, само за членове</string> <string name="conference_options">Настройки на беседата</string> + <string name="members_only">Частно, само за членове</string> <string name="non_anonymous">Не-анонимна</string> + <string name="moderated">С модератор</string> + <string name="you_are_not_participating">Вие не участвате</string> <string name="modified_conference_options">Настройките на беседата бяха променени!</string> <string name="could_not_modify_conference_options">Неуспешна промяна на настройките на беседата</string> <string name="never">Никога</string> diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index 8d0c6a792..666cb8651 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -408,7 +408,10 @@ <string name="public_conference">Veřejně přístupná konference</string> <string name="private_conference">Soukromá konference pouze pro členy</string> <string name="conference_options">Nastavení konference</string> + <string name="members_only">Soukromé, pouze pro členy</string> <string name="non_anonymous">Neanonymní</string> + <string name="moderated">Moderováno</string> + <string name="you_are_not_participating">Neúčastníte se</string> <string name="modified_conference_options">Nastavení konference upravena!</string> <string name="could_not_modify_conference_options">Nepodařilo se upravit nastavení konference!</string> <string name="never">Nikdy</string> @@ -482,4 +485,6 @@ <string name="download_failed_could_not_connect">Stahování selhalo: Nelze se připojit k hostu</string> <string name="pref_use_white_background">Použít bílé pozadí</string> <string name="pref_use_white_background_summary">Zobrazovat přijaté zprávy jako černý text na bílém pozadí</string> + <string name="account_status_dns_timeout">Vypršení v DNS</string> + <string name="server_info_broken">Rozbité</string> </resources> diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index f9e958b86..f3cc89e02 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -408,7 +408,10 @@ <string name="public_conference">Öffentlich zugängliche Konferenz</string> <string name="private_conference">Private Konferenz nur für Mitglieder</string> <string name="conference_options">Konferenz-Optionen</string> + <string name="members_only">Privat, nur Mitglieder</string> <string name="non_anonymous">De-anonymisiert</string> + <string name="moderated">Moderiert</string> + <string name="you_are_not_participating">Du bist kein Mitglied</string> <string name="modified_conference_options">Konferenz-Optionen wurden modifiziert!</string> <string name="could_not_modify_conference_options">Konferenz-Optionen konnten nicht modifiziert werden</string> <string name="never">Niemals</string> @@ -481,7 +484,6 @@ <string name="download_failed_could_not_connect">Download fehlgeschlagen: keine Verbindung zum Host</string> <string name="pref_use_white_background">Weißen Hintergrund benutzen</string> <string name="pref_use_white_background_summary">Empfangene Nachrichten als schwarzen Text auf weißem Hintergrund anzeigen</string> - <string name="account_status_dns_timeout">Zeitüberschreibung beim DNS</string> <string name="action_check_update">Auf Updates prüfen</string> <string name="current_version">Installierte Version:</string> <string name="new_version">Neue Version: </string> @@ -491,4 +493,6 @@ <string name="update_available">Eine neuere Version von Conversations ist verfügbar. Jetzt aktualisieren?</string> <string name="download_started">Download gestartet</string> <string name="no_update_available">Kein Update verfügbar</string> + <string name="account_status_dns_timeout">Zeitüberschreitung bei der Namensauflösung</string> + <string name="server_info_broken">Fehlerhaft</string> </resources> diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index 5af10b9c8..0637c466b 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -408,7 +408,10 @@ <string name="public_conference">Publikoki edonor sar daiteken konferentzia</string> <string name="private_conference">Konferentzia pribatua, kideentzat soilik</string> <string name="conference_options">Konferentziaren aukerak</string> + <string name="members_only">Pribatua, kideentzat soilik</string> <string name="non_anonymous">Ez anonimoa</string> + <string name="moderated">Moderatua</string> + <string name="you_are_not_participating">Ez zara parte hartzen ari</string> <string name="modified_conference_options">Konferentziaren aukerak aldatu dira</string> <string name="could_not_modify_conference_options">Konferentziaren aukerak ezin izan dira aldatu</string> <string name="never">Inoiz</string> @@ -480,4 +483,6 @@ <string name="download_failed_could_not_connect">Deskargak huts egin du: ezin izan da ostalarira konektatu</string> <string name="pref_use_white_background">Atzeko-planoan kolore zuria erabili</string> <string name="pref_use_white_background_summary">Jasotako mezuak testu beltza atzeko-plano zuri baten gainean bezala erakutsi</string> + <string name="account_status_dns_timeout">DNSan denboraz kanpoko arazoa</string> + <string name="server_info_broken">Hondatuta</string> </resources> diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 8ccd8aacf..ff507c05e 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -408,7 +408,10 @@ <string name="public_conference">Conférence accessible au public</string> <string name="private_conference">Conférence privée, réservée aux membres</string> <string name="conference_options">Options de la conférence</string> + <string name="members_only">Privé, membres uniquement</string> <string name="non_anonymous">Non anonyme</string> + <string name="moderated">Modéré</string> + <string name="you_are_not_participating">Vous ne participez pas</string> <string name="modified_conference_options">Options de la conférence modifiée!</string> <string name="could_not_modify_conference_options">Impossible de modifier les options de la conférence</string> <string name="never">Jamais</string> @@ -480,4 +483,6 @@ <string name="download_failed_could_not_connect">Échec du téléchargement: Impossible de se connecter au serveur</string> <string name="pref_use_white_background">Utiliser un fond blanc</string> <string name="pref_use_white_background_summary">Afficher les messages reçus en texte noir sur fond blanc</string> + <string name="account_status_dns_timeout">Expiration dans le DNS</string> + <string name="server_info_broken">Détraqué</string> </resources> diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index 0b8f15057..961078279 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -444,13 +444,13 @@ <plurals name="toast_delete_certificates"> <item quantity="one">Удалён %d сертификат</item> <item quantity="few">Удалено %d сертификатов</item> - <item quantity="many"></item> + <item quantity="many">Удалено %d сертификатов</item> <item quantity="other">Удалено %d сертификатов</item> </plurals> <plurals name="select_contact"> <item quantity="one">Выбран %d контакт</item> <item quantity="few">Выбрано %d контактов</item> - <item quantity="many"></item> + <item quantity="many">Выбрано %d контактов</item> <item quantity="other">Выбрано %d контактов</item> </plurals> <string name="pref_quick_action_summary">Заменить кнопку отправки кнопкой быстрого действия</string> diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index 114be5a1d..de0073b57 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -408,7 +408,10 @@ <string name="public_conference">Publikt tillgänglig konferens</string> <string name="private_conference">Privat konferens där medlemsskap krävs</string> <string name="conference_options">Konferensalternativ</string> + <string name="members_only">Privat, medlemsskap krävs</string> <string name="non_anonymous">Icke-anonymt</string> + <string name="moderated">Modererad</string> + <string name="you_are_not_participating">Du deltar ej</string> <string name="modified_conference_options">Ändrade konferensalternativ</string> <string name="could_not_modify_conference_options">Kunde inte ändra konferensalternativ</string> <string name="never">Aldrig</string> @@ -480,4 +483,6 @@ <string name="download_failed_could_not_connect">Nerladdningen gick fel: Kunder inte ansluta till server</string> <string name="pref_use_white_background">Använd vit bakgrund</string> <string name="pref_use_white_background_summary">Visa mottagna meddelanden som svart text på vit bakgrund</string> + <string name="account_status_dns_timeout">Timeout för DNS</string> + <string name="server_info_broken">Sönder</string> </resources> |