From 28b8d080c4c5bc280ad3e84711df4ffb49d3f559 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Thu, 12 Sep 2019 11:08:45 +1000 Subject: [PATCH 1/5] Correctly show quote author name in group chats. --- .../securesms/components/InputPanel.java | 4 ++-- .../securesms/components/QuoteView.java | 18 +++++++++++++++++- .../conversation/ConversationActivity.java | 9 ++++++--- .../conversation/ConversationItem.java | 2 +- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/org/thoughtcrime/securesms/components/InputPanel.java b/src/org/thoughtcrime/securesms/components/InputPanel.java index f9fd36ab95..f23c2424c4 100644 --- a/src/org/thoughtcrime/securesms/components/InputPanel.java +++ b/src/org/thoughtcrime/securesms/components/InputPanel.java @@ -150,8 +150,8 @@ public class InputPanel extends LinearLayout composeText.setMediaListener(listener); } - public void setQuote(@NonNull GlideRequests glideRequests, long id, @NonNull Recipient author, @NonNull String body, @NonNull SlideDeck attachments) { - this.quoteView.setQuote(glideRequests, id, author, body, false, attachments); + public void setQuote(@NonNull GlideRequests glideRequests, long id, @NonNull Recipient author, @NonNull String body, @NonNull SlideDeck attachments, @NonNull Recipient conversationRecipient) { + this.quoteView.setQuote(glideRequests, id, author, body, false, attachments, conversationRecipient); this.quoteView.setVisibility(View.VISIBLE); if (this.linkPreview.getVisibility() == View.VISIBLE) { diff --git a/src/org/thoughtcrime/securesms/components/QuoteView.java b/src/org/thoughtcrime/securesms/components/QuoteView.java index ef9dccff24..1f2801ef9d 100644 --- a/src/org/thoughtcrime/securesms/components/QuoteView.java +++ b/src/org/thoughtcrime/securesms/components/QuoteView.java @@ -28,6 +28,7 @@ import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientModifiedListener; +import org.thoughtcrime.securesms.util.GroupUtil; import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.signalservice.loki.api.LokiGroupChatAPI; @@ -58,6 +59,7 @@ public class QuoteView extends FrameLayout implements RecipientModifiedListener private long id; private Recipient author; private String body; + private Recipient conversationRecipient; private TextView mediaDescriptionText; private TextView missingLinkText; private SlideDeck attachments; @@ -145,7 +147,8 @@ public class QuoteView extends FrameLayout implements RecipientModifiedListener @NonNull Recipient author, @Nullable String body, boolean originalMissing, - @NonNull SlideDeck attachments) + @NonNull SlideDeck attachments, + @NonNull Recipient conversationRecipient) { if (this.author != null) this.author.removeListener(this); @@ -153,6 +156,7 @@ public class QuoteView extends FrameLayout implements RecipientModifiedListener this.author = author; this.body = body; this.attachments = attachments; + this.conversationRecipient = conversationRecipient; author.addListener(this); setQuoteAuthor(author); @@ -193,6 +197,18 @@ public class QuoteView extends FrameLayout implements RecipientModifiedListener if (quoteeDisplayName.equals(author.getAddress().toString())) { quoteeDisplayName = DatabaseFactory.getLokiUserDatabase(getContext()).getServerDisplayName(LokiGroupChatAPI.getPublicChatServer() + "." + LokiGroupChatAPI.getPublicChatServerID(), author.getAddress().toString()); } + + // If we're in a group then try and use the display name in the group + if (conversationRecipient.isGroupRecipient()) { + try { + String serverId = GroupUtil.getDecodedStringId(conversationRecipient.getAddress().serialize()); + String senderDisplayName = DatabaseFactory.getLokiUserDatabase(getContext()).getServerDisplayName(serverId, author.getAddress().serialize()); + if (senderDisplayName != null) { quoteeDisplayName = senderDisplayName; } + } catch (Exception e) { + // Do nothing + } + } + authorView.setText(isOwnNumber ? getContext().getString(R.string.QuoteView_you) : quoteeDisplayName); // We use the raw color resource because Android 4.x was struggling with tints here diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 88c5404192..ebc7cb0c0f 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -2743,7 +2743,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity messageRecord.getDateSent(), author, body, - slideDeck); + slideDeck, + recipient); } else if (messageRecord.isMms() && !((MmsMessageRecord) messageRecord).getLinkPreviews().isEmpty()) { LinkPreview linkPreview = ((MmsMessageRecord) messageRecord).getLinkPreviews().get(0); @@ -2757,13 +2758,15 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity messageRecord.getDateSent(), author, messageRecord.getBody(), - slideDeck); + slideDeck, + recipient); } else { inputPanel.setQuote(GlideApp.with(this), messageRecord.getDateSent(), author, messageRecord.getBody(), - messageRecord.isMms() ? ((MmsMessageRecord) messageRecord).getSlideDeck() : new SlideDeck()); + messageRecord.isMms() ? ((MmsMessageRecord) messageRecord).getSlideDeck() : new SlideDeck(), + recipient); } } diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationItem.java b/src/org/thoughtcrime/securesms/conversation/ConversationItem.java index 6dc4cf67c5..bf39982bee 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -775,7 +775,7 @@ public class ConversationItem extends LinearLayout if (current.isMms() && !current.isMmsNotification() && ((MediaMmsMessageRecord)current).getQuote() != null) { Quote quote = ((MediaMmsMessageRecord)current).getQuote(); //noinspection ConstantConditions - quoteView.setQuote(glideRequests, quote.getId(), Recipient.from(context, quote.getAuthor(), true), quote.getText(), quote.isOriginalMissing(), quote.getAttachment()); + quoteView.setQuote(glideRequests, quote.getId(), Recipient.from(context, quote.getAuthor(), true), quote.getText(), quote.isOriginalMissing(), quote.getAttachment(), conversationRecipient); quoteView.setVisibility(View.VISIBLE); quoteView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; From 3a257d745b90ef2b98285b5e6e8e26e5dc562fe8 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Thu, 19 Sep 2019 14:06:54 +1000 Subject: [PATCH 2/5] Debug --- .../securesms/conversation/ConversationActivity.java | 2 +- src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 8110fd00bc..f3755be999 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -2151,7 +2151,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } private void updateInputPanel() { - boolean hasPendingFriendRequest = DatabaseFactory.getLokiThreadDatabase(this).hasPendingFriendRequest(threadId); + boolean hasPendingFriendRequest = !recipient.isGroupRecipient() && DatabaseFactory.getLokiThreadDatabase(this).hasPendingFriendRequest(threadId); inputPanel.setEnabled(!hasPendingFriendRequest); int hintID = hasPendingFriendRequest ? R.string.activity_conversation_pending_friend_request_hint : R.string.activity_conversation_default_hint; inputPanel.setHint(getResources().getString(hintID)); diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 1d9bf993aa..dd0b6d63f4 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -978,7 +978,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType { } })); } - } if (LinkPreviewUtil.isWhitelistedMediaUrl(body)) { + } else if (LinkPreviewUtil.isWhitelistedMediaUrl(body)) { new LinkPreviewRepository(context).fetchGIF(context, body, attachmentOrNull -> Util.runOnMain(() -> { if (attachmentOrNull.isPresent()) { Attachment attachment = attachmentOrNull.get(); From c1c374407ff869fafc24f9a1c7bdecb87580df76 Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Thu, 19 Sep 2019 15:00:52 +1000 Subject: [PATCH 3/5] Improve performance --- build.gradle | 1 + src/org/thoughtcrime/securesms/ApplicationContext.java | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/build.gradle b/build.gradle index 6f82a9cd6c..2779e4f469 100644 --- a/build.gradle +++ b/build.gradle @@ -186,6 +186,7 @@ dependencies { implementation "com.squareup.okhttp3:okhttp:3.12.1" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "nl.komponents.kovenant:kovenant:$kovenant_version" + implementation "nl.komponents.kovenant:kovenant-android:$kovenant_version" implementation "com.github.lelloman:android-identicons:$identicon_version" implementation "com.prof.rssparser:rssparser:$rss_parser_version" implementation "com.mixpanel.android:mixpanel-android:$mixpanel_version" diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java index 53bd2568e8..769497a0a6 100644 --- a/src/org/thoughtcrime/securesms/ApplicationContext.java +++ b/src/org/thoughtcrime/securesms/ApplicationContext.java @@ -104,6 +104,9 @@ import kotlin.Unit; import kotlin.jvm.functions.Function1; import network.loki.messenger.BuildConfig; +import static nl.komponents.kovenant.android.KovenantAndroid.startKovenant; +import static nl.komponents.kovenant.android.KovenantAndroid.stopKovenant; + /** * Will be called once when the TextSecure process is created. * @@ -142,6 +145,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc public void onCreate() { super.onCreate(); LokiGroupChatAPI.Companion.setDebugMode(BuildConfig.DEBUG); // Loki - Set debug mode if needed + startKovenant(); Log.i(TAG, "onCreate()"); initializeSecurityProvider(); initializeLogging(); @@ -198,6 +202,12 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc if (lokiLongPoller != null) { lokiLongPoller.stopIfNeeded(); } } + @Override + public void onTerminate() { + stopKovenant(); + super.onTerminate(); + } + @Override public void injectDependencies(Object object) { if (object instanceof InjectableType) { From 61e1d215c7e0ae51989e89829a48329867780a0a Mon Sep 17 00:00:00 2001 From: Niels Andriesse Date: Thu, 19 Sep 2019 15:13:36 +1000 Subject: [PATCH 4/5] Update build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2779e4f469..8338789935 100644 --- a/build.gradle +++ b/build.gradle @@ -195,7 +195,7 @@ dependencies { } } -def canonicalVersionCode = 14 +def canonicalVersionCode = 15 def canonicalVersionName = "1.2.0" def postFixSize = 10 From 53ae775af80b01a36892afe93e0d26e5e51fc257 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Thu, 26 Sep 2019 13:44:57 +1000 Subject: [PATCH 5/5] Update LokiMessageDatabase. --- src/org/thoughtcrime/securesms/loki/LokiMessageDatabase.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/org/thoughtcrime/securesms/loki/LokiMessageDatabase.kt b/src/org/thoughtcrime/securesms/loki/LokiMessageDatabase.kt index 9c88939be9..9611c826a3 100644 --- a/src/org/thoughtcrime/securesms/loki/LokiMessageDatabase.kt +++ b/src/org/thoughtcrime/securesms/loki/LokiMessageDatabase.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.loki import android.content.ContentValues import android.content.Context +import org.thoughtcrime.securesms.database.Address import org.thoughtcrime.securesms.database.Database import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper @@ -18,6 +19,11 @@ class LokiMessageDatabase(context: Context, helper: SQLCipherOpenHelper) : Datab @JvmStatic val createTableCommand = "CREATE TABLE $tableName ($messageID INTEGER PRIMARY KEY, $serverID INTEGER DEFAULT 0, $friendRequestStatus INTEGER DEFAULT 0);" } + override fun getServerIDFromQuote(quoteID: Long, author: String): Long? { + val message = DatabaseFactory.getMmsSmsDatabase(context).getMessageFor(quoteID, Address.fromSerialized(author)) + return if (message != null) getServerID(message.getId()) else null + } + fun getServerID(messageID: Long): Long? { val database = databaseHelper.readableDatabase return database.get(tableName, "${Companion.messageID} = ?", arrayOf( messageID.toString() )) { cursor ->