From 290f0a123e117ce8e31ef3f9a2d1e896fb4c1ab9 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 7 Apr 2016 19:20:45 +0200 Subject: prevent null pointer when checking http upload max size --- .../java/eu/siacs/conversations/ui/ConversationActivity.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index 184b5dc6b..02a203804 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -1301,10 +1301,6 @@ public class ConversationActivity extends XmppActivity } else if (requestCode == ATTACHMENT_CHOICE_CHOOSE_FILE || requestCode == ATTACHMENT_CHOICE_RECORD_VOICE) { final List uris = extractUriFromIntent(data); final Conversation c = getSelectedConversation(); - final long max = c.getAccount() - .getXmppConnection() - .getFeatures() - .getMaxHttpUploadSize(); final OnPresenceSelected callback = new OnPresenceSelected() { @Override public void onPresenceSelected() { @@ -1317,8 +1313,8 @@ public class ConversationActivity extends XmppActivity } } }; - if (c.getMode() == Conversation.MODE_MULTI - || FileBackend.allFilesUnderSize(this, uris, max) + if (c == null || c.getMode() == Conversation.MODE_MULTI + || FileBackend.allFilesUnderSize(this, uris, getMaxHttpUploadSize(c)) || c.getNextEncryption() == Message.ENCRYPTION_OTR) { callback.onPresenceSelected(); } else { @@ -1367,6 +1363,10 @@ public class ConversationActivity extends XmppActivity } } + private long getMaxHttpUploadSize(Conversation conversation) { + return conversation.getAccount().getXmppConnection().getFeatures().getMaxHttpUploadSize(); + } + private void setNeverAskForBatteryOptimizationsAgain() { getPreferences().edit().putBoolean("show_battery_optimization", false).commit(); } -- cgit v1.2.3 From 0460702710fd46cac0850224f34a275ceb8e2c1f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 7 Apr 2016 20:29:40 +0200 Subject: check file owner when attaching files or using them as avatar --- .../conversations/persistance/FileBackend.java | 33 ++++++++++++++++++++++ .../services/XmppConnectionService.java | 10 +++++++ .../ui/PublishProfilePictureActivity.java | 13 +++++++-- src/main/res/values/strings.xml | 1 + 4 files changed, 55 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 21ba45093..69b81569c 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -1,5 +1,7 @@ package eu.siacs.conversations.persistance; +import android.annotation.TargetApi; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.Cursor; @@ -9,8 +11,13 @@ import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.RectF; import android.net.Uri; +import android.os.Build; import android.os.Environment; +import android.os.ParcelFileDescriptor; import android.provider.OpenableColumns; +import android.system.ErrnoException; +import android.system.Os; +import android.system.StructStat; import android.util.Base64; import android.util.Base64OutputStream; import android.util.Log; @@ -19,6 +26,7 @@ import android.webkit.MimeTypeMap; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.File; +import java.io.FileDescriptor; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; @@ -646,4 +654,29 @@ public class FileBackend { } } } + + + public static boolean weOwnFile(Uri uri) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + return false; + } else { + return uri != null + && ContentResolver.SCHEME_FILE.equals(uri.getScheme()) + && weOwnFileLollipop(uri); + } + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private static boolean weOwnFileLollipop(Uri uri) { + try { + File file = new File(uri.getPath()); + FileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY).getFileDescriptor(); + StructStat st = Os.fstat(fd); + return st.st_uid == android.os.Process.myUid(); + } catch (ErrnoException e) { + return true; + } catch (FileNotFoundException e) { + return false; + } + } } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index e9ac38325..2aaf9b622 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -403,6 +403,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa public void attachFileToConversation(final Conversation conversation, final Uri uri, final UiCallback callback) { + if (FileBackend.weOwnFile(uri)) { + Log.d(Config.LOGTAG,"trying to attach file that belonged to us"); + callback.error(R.string.security_error_invalid_file_access, null); + return; + } final Message message; if (conversation.getNextEncryption() == Message.ENCRYPTION_PGP) { message = new Message(conversation, "", Message.ENCRYPTION_DECRYPTED); @@ -441,6 +446,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa } public void attachImageToConversation(final Conversation conversation, final Uri uri, final UiCallback callback) { + if (FileBackend.weOwnFile(uri)) { + Log.d(Config.LOGTAG,"trying to attach file that belonged to us"); + callback.error(R.string.security_error_invalid_file_access, null); + return; + } final String compressPictures = getCompressPicturesPreference(); if ("never".equals(compressPictures) || ("auto".equals(compressPictures) && getFileBackend().useImageAsIs(uri))) { diff --git a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java index 88645c4a5..27a3efe59 100644 --- a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java @@ -23,6 +23,7 @@ import java.io.File; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.persistance.FileBackend; import eu.siacs.conversations.utils.FileUtils; import eu.siacs.conversations.utils.PhoneHelper; import eu.siacs.conversations.xmpp.pep.Avatar; @@ -187,9 +188,13 @@ public class PublishProfilePictureActivity extends XmppActivity { protected void onActivityResult(int requestCode, int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { + Uri source = data.getData(); switch (requestCode) { case REQUEST_CHOOSE_FILE_AND_CROP: - Uri source = data.getData(); + if (FileBackend.weOwnFile(source)) { + Toast.makeText(this,R.string.security_error_invalid_file_access,Toast.LENGTH_SHORT).show(); + return; + } String original = FileUtils.getPath(this, source); if (original != null) { source = Uri.parse("file://"+original); @@ -199,7 +204,11 @@ public class PublishProfilePictureActivity extends XmppActivity { Crop.of(source, destination).asSquare().withMaxSize(size, size).start(this); break; case REQUEST_CHOOSE_FILE: - this.avatarUri = data.getData(); + if (FileBackend.weOwnFile(source)) { + Toast.makeText(this,R.string.security_error_invalid_file_access,Toast.LENGTH_SHORT).show(); + return; + } + this.avatarUri = source; if (xmppConnectionServiceBound) { loadImageIntoPreview(this.avatarUri); } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 082c10b99..e991d0518 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -609,4 +609,5 @@ You already trust this contact. By selecting \'done\' you are just confirming that %s is part of this conference. Select image and crop You have disabled this account + Security error: Invalid file access -- cgit v1.2.3 From c55f7645a434d6f9c23fe36013c0275d8623d34f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 8 Apr 2016 10:41:37 +0200 Subject: pulled translations from transifex --- src/main/res/values-cs/strings.xml | 10 ++++++++++ src/main/res/values-pt-rBR/strings.xml | 16 +++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index 8979f86fc..7642e2978 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -71,6 +71,8 @@ doručení selhalo zamítnuto Připravuji obrázek na přenos + Příprava obrázků pro přenos + Sdílení souborů. Chvíli strpení... Smazat historii Smaže historii konverzací Chcete smazat všechny zprávy v této konverzaci?\n\nVarování: Toto neovlivní zprávy uložené na jiných přístrojích nebo serverech. @@ -312,6 +314,7 @@ Ověřuji %s na HTTP hostiteli Bez připojení. Zkus znovu později Ověřit %s velikost + Kontrola %1$s velikosti na %2$s Možnosti zpráv Zkopírovat text Kopírovat originální URL @@ -350,6 +353,7 @@ Vybrat soubor Přijímám %1$s (%2$d%% dokončeno) Stáhnout %s + Smazat %s soubor Otevřít %s odesílám (%1$d%% přeneseno) @@ -506,6 +510,8 @@ Při vypnuté obrazovce označí váš stav jako pryč Nedostupný při vypnutém zvuku Při tichém módu označí váš stav jako nedostupný + Vibrační mód brát stejně jako tichý + Označí vaše zdroje jako nedostupné při přepnutí do vibračního módu Rozšířená nastavení připojení Zobrazovat nastavení hostname a port při vytváření účtu xmpp.server.cz @@ -542,6 +548,7 @@ Načíst více zpráv Soubor sdílen s %s Obrázek sdílen s %s + Obrázky sdíleny s %s Conversations vyžaduje přístup k externímu úložišti Synchronizovat s kontakty Aplikace Conversations by ráda porovnala váš XMPP seznam s vašimi kontakty, aby mohla zobrazit plná jména a avatary.\n\nConversations načte a porovná kontakty pouze lokálně, bez jejich nahrávání na server.\n\nNyní budete dotázáni na udělení práv pro přístup k seznamu kontaktů. @@ -570,4 +577,7 @@ Toto pole je vyžadováno Opravit zprávu Odeslat opravenou zprávu + Tomuto kontaktu již důvěřujete. Vybráním možnosti \'hotovo\' jen potvrzujete, že %s je součástí této konference. + Vybrat obrázek a oříznout + Tento účet byl vypnut diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 19d25d5d5..ea50da439 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -71,6 +71,8 @@ não foi entregue rejeitada Preparando a imagem para transmissão + Preparando as imagens para o envio + Compartilhando arquivos. Por favor, aguarde... Limpar o histórico Limpa o histórico de conversas Deseja excluir todas as mensagens dessa conversa?\n\nAtenção: Isso não afetará mensagens armazenadas em outros dispositivos ou servidores. @@ -97,7 +99,7 @@ Não foi encontrada nenhuma chave OpenPGP O Conversations não conseguiu criptografar suas mensagens porque os seus contatos não estão anunciando a chave pública deles(as).\n\nPor favor, solicite aos seus contatos que configurem o OpenPGP. Geral - Recurso XMPP + Identificação XMPP O nome pelo qual esse cliente se identifica Aceitar arquivos Aceitar automaticamente arquivos menores que... @@ -312,6 +314,7 @@ Verificando %s no host HTTP Você não está conectado. Tente novamente mais tarde. Verificar o tamanho de %s + Verifique o tamanho de %1$s em %2$s Opções da mensagem Copiar o texto Copiar a URL original @@ -350,6 +353,7 @@ Selecione o arquivo Recebendo %1$s (completou %2$d%%) Baixar %s + Excluir %s arquivo Abrir %s enviando (completou %1$d%%) @@ -501,9 +505,11 @@ Quebrado Presença Afastado quando a tela estiver desligada - Marcar o seu status como afastado quando a tela estiver desligada + Definir o seu status como afastado quando a tela estiver desligada Não disponível quando em modo silencioso - Marcar o seu status como não disponível quando o dispositivo estiver em modo silencioso + Definir o seu status como não disponível quando o dispositivo estiver em modo silencioso + Considerar o modo de vibração como silencioso + Definir o seu status como indisponível quando o dispositivo estiver em modo de vibração Configurações detalhadas da conexão Exibe o nome de host e configurações da porta ao configurar uma conta xmpp.example.com @@ -539,6 +545,7 @@ Carregar mais mensagens Arquivo compartilhado com %s Imagem compartilhada com %s + Imagens compartilhadas com %s O Conversations necessita de acesso ao armazenamento externo Sincronizar com os contatos O Conversations quer procurar por correspondências entre contatos da sua conta Jabber e do seu telefone, para complementar as informações de nome completo e avatares\n\nO Conversations fará a verificação localmente, sem enviar nenhuma informação sua para o servidor\n\nVocê será solicitado a fornecer permissão de acesso aos seus contatos agora. @@ -567,4 +574,7 @@ Este campo é necessário Corrigir a mensagem Enviar a mensagem corrigida + Você já confia nesse contato. Ao selecionar \'Concluído\', você está apenas confirmando que %s é parte dessa conferência. + Selecione e recorte a imagem + Você desabilitou essa conta -- cgit v1.2.3 From db0301310bcb4fa238df4839d793162727270dc1 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 8 Apr 2016 18:28:40 +0200 Subject: removed ernoexception in exchange for a regular exeption to prevent verify error on <5.0 --- src/main/java/eu/siacs/conversations/persistance/FileBackend.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 69b81569c..0861a3a86 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -15,7 +15,6 @@ import android.os.Build; import android.os.Environment; import android.os.ParcelFileDescriptor; import android.provider.OpenableColumns; -import android.system.ErrnoException; import android.system.Os; import android.system.StructStat; import android.util.Base64; @@ -673,10 +672,10 @@ public class FileBackend { FileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY).getFileDescriptor(); StructStat st = Os.fstat(fd); return st.st_uid == android.os.Process.myUid(); - } catch (ErrnoException e) { - return true; } catch (FileNotFoundException e) { return false; + } catch (Exception e) { + return true; } } } -- cgit v1.2.3 From a8ebc5fafcd0c200b960015f7a33ce71d1689a7f Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 8 Apr 2016 20:20:37 +0200 Subject: add required disco#items query to timeout list --- src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 58e510e12..19d4fcba6 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -1117,7 +1117,7 @@ public class XmppConnection implements Runnable { final IqPacket iq = new IqPacket(IqPacket.TYPE.GET); iq.setTo(server.toDomainJid()); iq.query("http://jabber.org/protocol/disco#items"); - this.sendIqPacket(iq, new OnIqPacketReceived() { + String id = this.sendIqPacket(iq, new OnIqPacketReceived() { @Override public void onIqPacketReceived(final Account account, final IqPacket packet) { @@ -1142,6 +1142,9 @@ public class XmppConnection implements Runnable { } } }); + synchronized (this.mPendingServiceDiscoveriesIds) { + this.mPendingServiceDiscoveriesIds.add(id); + } } private void sendEnableCarbons() { -- cgit v1.2.3 From 14b46c3ee7aa860d349bcf8418b6ad35715c9ec4 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 9 Apr 2016 08:53:58 +0200 Subject: transform nimbuzz workaround into a more general 'waitForDisco' condition --- .../eu/siacs/conversations/xmpp/XmppConnection.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index 19d4fcba6..6427c3471 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -118,6 +118,7 @@ public class XmppConnection implements Runnable { private long lastDiscoStarted = 0; private AtomicInteger mPendingServiceDiscoveries = new AtomicInteger(0); private AtomicBoolean mIsServiceItemsDiscoveryPending = new AtomicBoolean(true); + private boolean mWaitForDisco = true; private final ArrayList mPendingServiceDiscoveriesIds = new ArrayList<>(); private boolean mInteractive = false; private int attempt = 0; @@ -1011,8 +1012,9 @@ public class XmppConnection implements Runnable { synchronized (this.disco) { this.disco.clear(); } - mPendingServiceDiscoveries.set(mServerIdentity == Identity.NIMBUZZ ? 1 : 0); + mPendingServiceDiscoveries.set(0); mIsServiceItemsDiscoveryPending.set(true); + mWaitForDisco = mServerIdentity != Identity.NIMBUZZ; lastDiscoStarted = SystemClock.elapsedRealtime(); Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": starting service discovery"); mXmppConnectionService.scheduleWakeUpCall(Config.CONNECT_DISCO_TIMEOUT, account.getUuid().hashCode()); @@ -1031,13 +1033,14 @@ public class XmppConnection implements Runnable { } sendServiceDiscoveryInfo(account.getJid().toBareJid()); sendServiceDiscoveryItems(account.getServer()); + if (!mWaitForDisco) { + finalizeBind(); + } this.lastSessionStarted = SystemClock.elapsedRealtime(); } private void sendServiceDiscoveryInfo(final Jid jid) { - if (mServerIdentity != Identity.NIMBUZZ) { - mPendingServiceDiscoveries.incrementAndGet(); - } + mPendingServiceDiscoveries.incrementAndGet(); final IqPacket iq = new IqPacket(IqPacket.TYPE.GET); iq.setTo(jid); iq.query("http://jabber.org/protocol/disco#info"); @@ -1081,7 +1084,9 @@ public class XmppConnection implements Runnable { Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": could not query disco info for " + jid.toString()); } if (packet.getType() != IqPacket.TYPE.TIMEOUT) { - if (mPendingServiceDiscoveries.decrementAndGet() == 0 && !mIsServiceItemsDiscoveryPending.get()) { + if (mPendingServiceDiscoveries.decrementAndGet() == 0 + && !mIsServiceItemsDiscoveryPending.get() + && mWaitForDisco) { finalizeBind(); } } @@ -1136,7 +1141,7 @@ public class XmppConnection implements Runnable { } if (packet.getType() != IqPacket.TYPE.TIMEOUT) { mIsServiceItemsDiscoveryPending.set(false); - if (mPendingServiceDiscoveries.get() == 0) { + if (mPendingServiceDiscoveries.get() == 0 && mWaitForDisco) { finalizeBind(); } } -- cgit v1.2.3 From 2713fd50c830e0c139ea4ae3194bdd60126bb968 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 9 Apr 2016 10:29:34 +0200 Subject: use last received message id when querying archive --- .../services/MessageArchiveService.java | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java index e8616bd8f..a50b45b12 100644 --- a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java +++ b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java @@ -45,8 +45,10 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { } } } - long startCatchup = getLastMessageTransmitted(account); + Pair pair = mXmppConnectionService.databaseBackend.getLastMessageReceived(account); + long startCatchup = pair == null ? 0 : pair.first; long endCatchup = account.getXmppConnection().getLastSessionEstablished(); + final Query query; if (startCatchup == 0) { return; } else if (endCatchup - startCatchup >= Config.MAM_MAX_CATCHUP) { @@ -57,8 +59,14 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { this.query(conversation,startCatchup); } } + query = new Query(account, startCatchup, endCatchup); + } else { + if (pair.second == null) { + query = new Query(account, startCatchup, endCatchup); + } else { + query = new Query(account, pair.second, endCatchup); + } } - final Query query = new Query(account, startCatchup, endCatchup); this.queries.add(query); this.execute(query); } @@ -75,11 +83,6 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { } } - private long getLastMessageTransmitted(final Account account) { - Pair pair = mXmppConnectionService.databaseBackend.getLastMessageReceived(account); - return pair == null ? 0 : pair.first; - } - public Query query(final Conversation conversation) { if (conversation.getLastMessageTransmitted() < 0 && conversation.countMessages() == 0) { return query(conversation, @@ -283,6 +286,13 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { this.queryId = new BigInteger(50, mXmppConnectionService.getRNG()).toString(32); } + public Query(Account account, String reference, long end) { + this.account = account; + this.reference = reference; + this.end = end; + this.queryId = new BigInteger(50, mXmppConnectionService.getRNG()).toString(32); + } + private Query page(String reference) { Query query = new Query(this.account,this.start,this.end); query.reference = reference; -- cgit v1.2.3 From b99d70bfe74ce5dff1c8ed26d7f3dbd577a22125 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 9 Apr 2016 10:59:54 +0200 Subject: don't show contact details when in conversations with self --- src/main/java/eu/siacs/conversations/entities/Conversation.java | 4 ++++ src/main/java/eu/siacs/conversations/ui/ConversationActivity.java | 1 + src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 4 +++- 3 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 0252ea749..a3ae906b5 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -336,6 +336,10 @@ public class Conversation extends AbstractEntity implements Blockable { return this.correctingMessage; } + public boolean withSelf() { + return getContact().isSelf(); + } + public interface OnMessageFound { void onMessageFound(final Message message); } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index 02a203804..920c07af1 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -411,6 +411,7 @@ public class ConversationActivity extends XmppActivity menuInviteContact.setVisible(getSelectedConversation().getMucOptions().canInvite()); menuSecure.setVisible((Config.supportOpenPgp() || Config.supportOmemo()) && Config.multipleEncryptionChoices()); //only if pgp is supported we have a choice } else { + menuContactDetails.setVisible(!this.getSelectedConversation().withSelf()); menuMucDetails.setVisible(false); menuSecure.setVisible(Config.multipleEncryptionChoices()); } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 1a834ae50..095bf58fa 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -468,7 +468,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa highlightInConference(user); } } else { - activity.switchToContactDetails(message.getContact(), message.getFingerprint()); + if (!message.getContact().isSelf()) { + activity.switchToContactDetails(message.getContact(), message.getFingerprint()); + } } } else { Account account = message.getConversation().getAccount(); -- cgit v1.2.3 From 65548ddccb7f63d623a86ad9a740ded87310e313 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 9 Apr 2016 12:31:08 +0200 Subject: use startdate as lower bound when querying archive with after=x --- .../conversations/services/MessageArchiveService.java | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java index a50b45b12..06df1b38a 100644 --- a/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java +++ b/src/main/java/eu/siacs/conversations/services/MessageArchiveService.java @@ -61,11 +61,8 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { } query = new Query(account, startCatchup, endCatchup); } else { - if (pair.second == null) { - query = new Query(account, startCatchup, endCatchup); - } else { - query = new Query(account, pair.second, endCatchup); - } + query = new Query(account, startCatchup, endCatchup); + query.reference = pair.second; } this.queries.add(query); this.execute(query); @@ -285,14 +282,7 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded { this.end = end; this.queryId = new BigInteger(50, mXmppConnectionService.getRNG()).toString(32); } - - public Query(Account account, String reference, long end) { - this.account = account; - this.reference = reference; - this.end = end; - this.queryId = new BigInteger(50, mXmppConnectionService.getRNG()).toString(32); - } - + private Query page(String reference) { Query query = new Query(this.account,this.start,this.end); query.reference = reference; -- cgit v1.2.3