From aa7071ad80962f808715bc62aba269015b73baf4 Mon Sep 17 00:00:00 2001
From: Ryan ZHAO <ryanzhaors@qq.com>
Date: Thu, 4 Mar 2021 15:57:01 +1100
Subject: [PATCH] send typing indicator using new pipeline

---
 .../components/TypingStatusSender.java        | 20 +++++++++----------
 .../sending_receiving/MessageSender.kt        |  4 ++--
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusSender.java b/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusSender.java
index 2b4b820ce8..fc6208dbd7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusSender.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusSender.java
@@ -4,25 +4,21 @@ import android.annotation.SuppressLint;
 import android.content.Context;
 import androidx.annotation.NonNull;
 
-import org.thoughtcrime.securesms.ApplicationContext;
-import org.session.libsession.messaging.threads.Address;
+import org.session.libsession.messaging.messages.control.TypingIndicator;
+import org.session.libsession.messaging.sending_receiving.MessageSender;
 import org.thoughtcrime.securesms.database.DatabaseFactory;
 import org.thoughtcrime.securesms.database.ThreadDatabase;
-import org.thoughtcrime.securesms.jobs.TypingSendJob;
 import org.thoughtcrime.securesms.loki.protocol.SessionMetaProtocol;
 import org.session.libsession.messaging.threads.recipients.Recipient;
 import org.session.libsession.utilities.Util;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 @SuppressLint("UseSparseArrays")
 public class TypingStatusSender {
 
-  private static final String TAG = TypingStatusSender.class.getSimpleName();
-
   private static final long REFRESH_TYPING_TIMEOUT = TimeUnit.SECONDS.toMillis(10);
   private static final long PAUSE_TYPING_TIMEOUT   = TimeUnit.SECONDS.toMillis(3);
 
@@ -82,12 +78,16 @@ public class TypingStatusSender {
   private void sendTyping(long threadId, boolean typingStarted) {
     ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
     Recipient recipient = threadDatabase.getRecipientForThreadId(threadId);
+    if (recipient == null) { return; }
     // Loki - Check whether we want to send a typing indicator to this user
     if (recipient != null && !SessionMetaProtocol.shouldSendTypingIndicator(recipient.getAddress())) { return; }
-    // Loki - Take into account multi device
-    if (recipient == null) { return; }
-    long threadID = threadDatabase.getOrCreateThreadIdFor(recipient);
-    ApplicationContext.getInstance(context).getJobManager().add(new TypingSendJob(threadID, typingStarted));
+    TypingIndicator typingIndicator;
+    if (typingStarted) {
+      typingIndicator = new TypingIndicator(TypingIndicator.Kind.STARTED);
+    } else {
+      typingIndicator = new TypingIndicator(TypingIndicator.Kind.STOPPED);
+    }
+    MessageSender.send(typingIndicator, recipient.getAddress());
   }
 
   private class StartRunnable implements Runnable {
diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt
index 61447b795e..7258e2a72f 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt
+++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt
@@ -68,7 +68,7 @@ object MessageSender {
     }
 
     // One-on-One Chats & Closed Groups
-    fun sendToSnodeDestination(destination: Destination, message: Message, isSyncMessage: Boolean = false): Promise<Unit, Exception> {
+    private fun sendToSnodeDestination(destination: Destination, message: Message, isSyncMessage: Boolean = false): Promise<Unit, Exception> {
         val deferred = deferred<Unit, Exception>()
         val promise = deferred.promise
         val storage = MessagingConfiguration.shared.storage
@@ -198,7 +198,7 @@ object MessageSender {
     }
 
     // Open Groups
-    fun sendToOpenGroupDestination(destination: Destination, message: Message): Promise<Unit, Exception> {
+    private fun sendToOpenGroupDestination(destination: Destination, message: Message): Promise<Unit, Exception> {
         val deferred = deferred<Unit, Exception>()
         val storage = MessagingConfiguration.shared.storage
         val preconditionFailure = Exception("Destination should not be contacts or closed groups!")