diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java
index b8d8b0e85..0e275dc48 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java
@@ -33,14 +33,18 @@ import com.google.firebase.iid.FirebaseInstanceId;
import org.conscrypt.Conscrypt;
import org.jetbrains.annotations.NotNull;
+import org.session.libsession.utilities.SSKEnvironment;
+import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier;
import org.session.libsignal.libsignal.state.SessionRecord;
import org.signal.aesgcmprovider.AesGcmProvider;
-import org.thoughtcrime.securesms.components.TypingStatusRepository;
+import org.thoughtcrime.securesms.sskenvironment.ProfileManager;
+import org.thoughtcrime.securesms.sskenvironment.ReadReceiptManager;
+import org.thoughtcrime.securesms.sskenvironment.TypingStatusRepository;
import org.thoughtcrime.securesms.components.TypingStatusSender;
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
import org.thoughtcrime.securesms.crypto.ProfileKeyUtil;
import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.dependencies.InjectableType;
@@ -71,13 +75,12 @@ import org.thoughtcrime.securesms.loki.protocol.SessionResetImplementation;
import org.thoughtcrime.securesms.loki.utilities.Broadcaster;
import org.thoughtcrime.securesms.loki.utilities.UiModeUtilities;
import org.thoughtcrime.securesms.notifications.DefaultMessageNotifier;
-import org.thoughtcrime.securesms.notifications.MessageNotifier;
import org.thoughtcrime.securesms.notifications.NotificationChannels;
import org.thoughtcrime.securesms.notifications.OptimizedMessageNotifier;
import org.thoughtcrime.securesms.profiles.AvatarHelper;
import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.service.ExpiringMessageManager;
import org.thoughtcrime.securesms.service.IncomingMessageObserver;
import org.thoughtcrime.securesms.service.KeyCachingService;
@@ -148,6 +151,8 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
private TypingStatusRepository typingStatusRepository;
private TypingStatusSender typingStatusSender;
private JobManager jobManager;
+ private ReadReceiptManager readReceiptManager;
+ private ProfileManager profileManager;
private IncomingMessageObserver incomingMessageObserver;
private ObjectGraph objectGraph;
private PersistentLogger persistentLogger;
@@ -220,10 +225,13 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
initializeExpiringMessageManager();
initializeTypingStatusRepository();
initializeTypingStatusSender();
+ initializeReadReceiptManager();
+ initializeProfileManager();
initializePeriodicTasks();
initializeWebRtc();
initializePendingMessages();
initializeBlobProvider();
+ SSKEnvironment.Companion.configure(getTypingStatusRepository(), getReadReceiptManager(), getProfileManager(), messageNotifier, getExpiringMessageManager());
}
@Override
@@ -279,6 +287,10 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
return typingStatusSender;
}
+ public ReadReceiptManager getReadReceiptManager() { return readReceiptManager; }
+
+ public ProfileManager getProfileManager() { return profileManager; }
+
public boolean isAppVisible() {
return isAppVisible;
}
@@ -365,6 +377,14 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
this.typingStatusRepository = new TypingStatusRepository();
}
+ private void initializeReadReceiptManager() {
+ this.readReceiptManager = new ReadReceiptManager();
+ }
+
+ private void initializeProfileManager() {
+ this.profileManager = new ProfileManager();
+ }
+
private void initializeTypingStatusSender() {
this.typingStatusSender = new TypingStatusSender(this);
}
@@ -522,7 +542,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
String encodedProfileKey = ProfileKeyUtil.generateEncodedProfileKey(this);
byte[] profileKey = ProfileKeyUtil.getProfileKeyFromEncodedString(encodedProfileKey);
try {
- File profilePicture = AvatarHelper.getAvatarFile(this, Address.fromSerialized(userPublicKey));
+ File profilePicture = AvatarHelper.getAvatarFile(this, Address.Companion.fromSerialized(userPublicKey));
StreamDetails stream = new StreamDetails(new FileInputStream(profilePicture), "image/jpeg", profilePicture.length());
FileServerAPI.shared.uploadProfilePicture(FileServerAPI.shared.getServer(), profileKey, stream, () -> {
TextSecurePreferences.setLastProfilePictureUpload(this, new Date().getTime());
@@ -549,7 +569,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
String url = TextSecurePreferences.getProfilePictureURL(this);
String userMasterDevice = TextSecurePreferences.getMasterHexEncodedPublicKey(this);
if (userMasterDevice != null) {
- Recipient userMasterDeviceAsRecipient = Recipient.from(this, Address.fromSerialized(userMasterDevice), false).resolve();
+ Recipient userMasterDeviceAsRecipient = Recipient.from(this, Address.Companion.fromSerialized(userMasterDevice), false).resolve();
profileKey = userMasterDeviceAsRecipient.getProfileKey();
url = userMasterDeviceAsRecipient.getProfileAvatar();
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java
index ee50397d4..12d712894 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java
@@ -5,12 +5,12 @@ import androidx.annotation.Nullable;
import android.view.View;
import org.thoughtcrime.securesms.contactshare.Contact;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.mms.GlideRequests;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.stickers.StickerLocator;
import org.session.libsignal.libsignal.util.guava.Optional;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java
index 8050784a0..a5f257bdc 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java
@@ -52,7 +52,7 @@ import androidx.viewpager.widget.ViewPager;
import com.codewaves.stickyheadergrid.StickyHeaderGridLayoutManager;
import com.google.android.material.tabs.TabLayout;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter;
import org.thoughtcrime.securesms.database.MediaDatabase;
import org.thoughtcrime.securesms.database.loaders.BucketedThreadMediaLoader;
@@ -60,7 +60,7 @@ import org.thoughtcrime.securesms.database.loaders.BucketedThreadMediaLoader.Buc
import org.thoughtcrime.securesms.database.loaders.ThreadMediaLoader;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.permissions.Permissions;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.AttachmentUtil;
import org.thoughtcrime.securesms.util.SaveAttachmentTask;
import org.thoughtcrime.securesms.util.StickyHeaderDecoration;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java
index d7abc4510..ced6a5b09 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java
@@ -55,7 +55,7 @@ import android.widget.Toast;
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
import org.thoughtcrime.securesms.components.MediaView;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.MediaDatabase.MediaRecord;
import org.thoughtcrime.securesms.database.loaders.PagingMediaLoader;
import org.thoughtcrime.securesms.logging.Log;
@@ -64,8 +64,8 @@ import org.thoughtcrime.securesms.mediapreview.MediaRailAdapter;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.permissions.Permissions;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientModifiedListener;
import org.thoughtcrime.securesms.util.AttachmentUtil;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.SaveAttachmentTask;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java
index 041e92ea2..5b4ab2498 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java
@@ -51,8 +51,8 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.loki.database.LokiMessageDatabase;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientModifiedListener;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.ExpirationUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java
index 4c3467402..4d5d5036c 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java
@@ -11,7 +11,7 @@ import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.loki.views.UserView;
import org.thoughtcrime.securesms.mms.GlideRequests;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.Conversions;
import java.security.MessageDigest;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ShareActivity.java b/app/src/main/java/org/thoughtcrime/securesms/ShareActivity.java
index 45be4d26c..0266b1d2f 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ShareActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/ShareActivity.java
@@ -37,7 +37,7 @@ import androidx.appcompat.widget.Toolbar;
import org.thoughtcrime.securesms.components.SearchToolbar;
import org.thoughtcrime.securesms.conversation.ConversationActivity;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.logging.Log;
@@ -46,7 +46,7 @@ import org.thoughtcrime.securesms.loki.fragments.ContactSelectionListLoader.Disp
import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.providers.BlobProvider;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.stickers.StickerLocator;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.ViewUtil;
@@ -250,7 +250,7 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity
@Override
public void onContactSelected(String number) {
- Recipient recipient = Recipient.from(this, Address.fromExternal(this, number), true);
+ Recipient recipient = Recipient.from(this, Address.Companion.fromExternal(this, number), true);
long existingThread = DatabaseFactory.getThreadDatabase(this).getThreadIdIfExistsFor(recipient);
createConversation(existingThread, recipient.getAddress(), ThreadDatabase.DistributionTypes.DEFAULT);
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/ShortcutLauncherActivity.java b/app/src/main/java/org/thoughtcrime/securesms/ShortcutLauncherActivity.java
index 3777ce4f7..d8e6db673 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/ShortcutLauncherActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/ShortcutLauncherActivity.java
@@ -10,9 +10,9 @@ import androidx.core.app.TaskStackBuilder;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.Toast;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.loki.activities.HomeActivity;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.CommunicationActions;
import network.loki.messenger.R;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java b/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java
index e5e62e385..5295dae19 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java
@@ -21,12 +21,12 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.contacts.avatars.ContactColors;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.loki.utilities.AvatarPlaceholderGenerator;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientExporter;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientExporter;
import org.thoughtcrime.securesms.util.ThemeUtil;
import java.util.Objects;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationTypingView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationTypingView.java
index 4e228db16..336eb2531 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationTypingView.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationTypingView.java
@@ -9,7 +9,7 @@ import android.view.View;
import android.widget.LinearLayout;
import org.thoughtcrime.securesms.mms.GlideRequests;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.ThemeUtil;
import java.util.List;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java
index d35ee5fa7..3894c10d4 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java
@@ -15,7 +15,7 @@ import android.util.AttributeSet;
import network.loki.messenger.R;
import org.thoughtcrime.securesms.components.emoji.EmojiTextView;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.ResUtil;
import org.thoughtcrime.securesms.util.spans.CenterAlignedRelativeSizeSpan;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java
index e7b3f7294..4b2423822 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java
@@ -36,7 +36,7 @@ import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.QuoteModel;
import org.thoughtcrime.securesms.mms.SlideDeck;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java b/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java
index 79f8045d7..9b5222612 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java
@@ -28,8 +28,8 @@ import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideRequests;
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.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientModifiedListener;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.Util;
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 a3c5c9a73..1b08e5005 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusSender.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusSender.java
@@ -5,12 +5,12 @@ import android.content.Context;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.ApplicationContext;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
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.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.Util;
import org.session.libsignal.service.loki.protocol.shelved.multidevice.MultiDeviceProtocol;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java
index 26f5dae7f..322348ab9 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java
@@ -6,7 +6,7 @@ import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.util.Conversions;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto.java
index 02b873121..0ee130778 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto.java
@@ -6,7 +6,7 @@ import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.profiles.AvatarHelper;
import java.io.IOException;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/SystemContactPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/SystemContactPhoto.java
index 863598a5e..a6d2bbd12 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/SystemContactPhoto.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/SystemContactPhoto.java
@@ -6,7 +6,7 @@ import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.util.Conversions;
import java.io.FileNotFoundException;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java
index 7be50b82a..a29e8f10b 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java
@@ -1,34 +1,14 @@
package org.thoughtcrime.securesms.contactshare;
-import android.content.ContentValues;
import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.annotation.WorkerThread;
-import androidx.appcompat.app.AlertDialog;
import android.text.TextUtils;
-import com.annimon.stream.Stream;
+import org.session.libsession.messaging.sending_receiving.contacts.Contact;
import org.thoughtcrime.securesms.components.emoji.EmojiStrings;
-import org.thoughtcrime.securesms.contactshare.Contact.Email;
-import org.thoughtcrime.securesms.contactshare.Contact.Phone;
-import org.thoughtcrime.securesms.contactshare.Contact.PostalAddress;
-import org.thoughtcrime.securesms.database.Address;
-import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.mms.PartAuthority;
-import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.SpanUtil;
-import org.thoughtcrime.securesms.util.Util;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
import network.loki.messenger.R;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java
index 78cfa4575..a05c3d495 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java
@@ -119,7 +119,7 @@ import org.thoughtcrime.securesms.contactshare.Contact;
import org.thoughtcrime.securesms.contactshare.ContactUtil;
import org.thoughtcrime.securesms.contactshare.SimpleTextWatcher;
import org.thoughtcrime.securesms.crypto.SecurityEvent;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.DraftDatabase;
import org.thoughtcrime.securesms.database.DraftDatabase.Draft;
@@ -175,9 +175,9 @@ import org.thoughtcrime.securesms.notifications.MarkReadReceiver;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.profiles.GroupShareProfileView;
import org.thoughtcrime.securesms.providers.BlobProvider;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
-import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientFormattingException;
+import org.session.libsession.messaging.threads.recipients.RecipientModifiedListener;
import org.thoughtcrime.securesms.search.model.MessageResult;
import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.sms.MessageSender;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java
index 6daf91201..1ae20ba0f 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java
@@ -42,7 +42,7 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.SlideDeck;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.Conversions;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.LRUCache;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java
index 624c029f8..8c9995537 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java
@@ -66,7 +66,7 @@ import org.thoughtcrime.securesms.components.ConversationTypingView;
import org.thoughtcrime.securesms.components.recyclerview.SmoothScrollingLinearLayoutManager;
import org.thoughtcrime.securesms.conversation.ConversationAdapter.HeaderViewHolder;
import org.thoughtcrime.securesms.conversation.ConversationAdapter.ItemClickListener;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
import org.thoughtcrime.securesms.database.RecipientDatabase;
@@ -84,7 +84,7 @@ import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.profiles.UnknownSenderView;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
import org.thoughtcrime.securesms.stickers.StickerLocator;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java
index 6ebd777d6..23970d269 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java
@@ -95,8 +95,8 @@ import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideClickListener;
import org.thoughtcrime.securesms.mms.SlidesClickedListener;
import org.thoughtcrime.securesms.mms.TextSlide;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientModifiedListener;
import org.thoughtcrime.securesms.stickers.StickerUrl;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.GroupUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java
index a882c2534..ae9eccfb6 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java
@@ -18,8 +18,8 @@ import org.thoughtcrime.securesms.BindableConversationItem;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.loki.utilities.GeneralUtilitiesKt;
import org.thoughtcrime.securesms.mms.GlideRequests;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientModifiedListener;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.GroupUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/SecurityEvent.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/SecurityEvent.java
index 2933cfbf9..bd5be6874 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/crypto/SecurityEvent.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/SecurityEvent.java
@@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.crypto;
import android.content.Context;
import android.content.Intent;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.service.KeyCachingService;
/**
diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/SessionUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/SessionUtil.java
index 2ce3ef27b..56ee6178b 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/crypto/SessionUtil.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/SessionUtil.java
@@ -4,7 +4,7 @@ import android.content.Context;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.session.libsignal.libsignal.SignalProtocolAddress;
import org.session.libsignal.libsignal.state.SessionStore;
import org.session.libsignal.service.api.push.SignalServiceAddress;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java
index 97038a5e5..4aa20f697 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java
@@ -10,7 +10,7 @@ import org.session.libsignal.metadata.SignalProtos;
import org.session.libsignal.metadata.certificate.CertificateValidator;
import org.session.libsignal.metadata.certificate.InvalidCertificateException;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.session.libsignal.libsignal.util.guava.Optional;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java
index 0db107456..733f6e1bf 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java
@@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.crypto.storage;
import android.content.Context;
import androidx.annotation.NonNull;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.SessionDatabase;
import org.thoughtcrime.securesms.logging.Log;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java
index 0e82b9642..07a3b748d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java
@@ -37,27 +37,33 @@ import net.sqlcipher.database.SQLiteDatabase;
import org.json.JSONArray;
import org.json.JSONException;
-import org.thoughtcrime.securesms.attachments.Attachment;
-import org.thoughtcrime.securesms.attachments.AttachmentId;
-import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
-import org.thoughtcrime.securesms.attachments.DatabaseAttachmentAudioExtras;
+
+import org.session.libsignal.libsignal.logging.Log;
+
import org.thoughtcrime.securesms.crypto.AttachmentSecret;
import org.thoughtcrime.securesms.crypto.ClassicDecryptingPartInputStream;
import org.thoughtcrime.securesms.crypto.ModernDecryptingPartInputStream;
import org.thoughtcrime.securesms.crypto.ModernEncryptingPartOutputStream;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
-import org.thoughtcrime.securesms.logging.Log;
+
+import org.session.libsession.messaging.sending_receiving.attachments.Attachment;
+import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId;
+import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment;
+import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachmentAudioExtras;
+import org.session.libsession.messaging.sending_receiving.attachments.StickerLocator;
+
+import org.session.libsession.utilities.JsonUtils;
+import org.session.libsession.utilities.Util;
+
import org.thoughtcrime.securesms.mms.MediaStream;
import org.thoughtcrime.securesms.mms.MmsException;
import org.thoughtcrime.securesms.mms.PartAuthority;
-import org.thoughtcrime.securesms.stickers.StickerLocator;
+
import org.thoughtcrime.securesms.util.BitmapDecodingException;
import org.thoughtcrime.securesms.util.BitmapUtil;
import org.thoughtcrime.securesms.util.ExternalStorageUtil;
-import org.thoughtcrime.securesms.util.JsonUtils;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.MediaUtil.ThumbnailData;
-import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.video.EncryptedMediaDataSource;
import java.io.File;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java
index 1fed44d50..70497828d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java
@@ -6,7 +6,6 @@ import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
-import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -16,10 +15,14 @@ import com.annimon.stream.Stream;
import net.sqlcipher.database.SQLiteDatabase;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
-import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.BitmapUtil;
-import org.thoughtcrime.securesms.util.GroupUtil;
-import org.thoughtcrime.securesms.util.Util;
+
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.Address;
+import org.session.libsession.messaging.threads.GroupRecord;
+import org.session.libsession.utilities.GroupUtil;
+import org.session.libsession.utilities.Util;
+
import org.session.libsignal.libsignal.util.guava.Optional;
import org.session.libsignal.service.api.messages.SignalServiceAttachmentPointer;
import org.session.libsignal.service.loki.database.LokiOpenGroupDatabaseProtocol;
@@ -125,13 +128,13 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, new String[] {GROUP_ID},
MEMBERS + " = ? AND " + MMS + " = ?",
- new String[] {Address.toSerializedList(members, ','), mms ? "1" : "0"},
+ new String[] {Address.Companion.toSerializedList(members, ','), mms ? "1" : "0"},
null, null, null);
try {
if (cursor != null && cursor.moveToNext()) {
return cursor.getString(cursor.getColumnIndexOrThrow(GROUP_ID));
} else {
- String groupId = GroupUtil.getEncodedId(allocateGroupId(), mms);
+ String groupId = GroupUtil.INSTANCE.getEncodedGroupID(allocateGroupId());
create(groupId, null, members, null, null, admins);
return groupId;
}
@@ -154,7 +157,7 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
if (!includeSelf && Util.isOwnNumber(context, member))
continue;
- if (member.isPhone()) {
+ if (member.isContact()) {
recipients.add(Recipient.from(context, member, false));
}
}
@@ -164,12 +167,12 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
public boolean isClosedGroupMember(String hexEncodedPublicKey) {
try {
- Address address = Address.fromSerialized(hexEncodedPublicKey);
+ Address address = Address.Companion.fromSerialized(hexEncodedPublicKey);
Reader reader = DatabaseFactory.getGroupDatabase(context).getGroups();
GroupRecord record;
while ((record = reader.getNext()) != null) {
- if (record.isClosedGroup() && record.members.contains(address)) {
+ if (record.isClosedGroup() && record.getMembers().contains(address)) {
return true;
}
}
@@ -188,7 +191,7 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
ContentValues contentValues = new ContentValues();
contentValues.put(GROUP_ID, groupId);
contentValues.put(TITLE, title);
- contentValues.put(MEMBERS, Address.toSerializedList(members, ','));
+ contentValues.put(MEMBERS, Address.Companion.toSerializedList(members, ','));
if (avatar != null) {
contentValues.put(AVATAR_ID, avatar.getId());
@@ -201,15 +204,15 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
contentValues.put(AVATAR_RELAY, relay);
contentValues.put(TIMESTAMP, System.currentTimeMillis());
contentValues.put(ACTIVE, 1);
- contentValues.put(MMS, GroupUtil.isMmsGroup(groupId));
+ contentValues.put(MMS, GroupUtil.INSTANCE.isMmsGroup(groupId));
if (admins != null) {
- contentValues.put(ADMINS, Address.toSerializedList(admins, ','));
+ contentValues.put(ADMINS, Address.Companion.toSerializedList(admins, ','));
}
databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, contentValues);
- Recipient.applyCached(Address.fromSerialized(groupId), recipient -> {
+ Recipient.applyCached(Address.Companion.fromSerialized(groupId), recipient -> {
recipient.setName(title);
recipient.setGroupAvatarId(avatar != null ? avatar.getId() : null);
recipient.setParticipants(Stream.of(members).map(memberAddress -> Recipient.from(context, memberAddress, true)).toList());
@@ -222,7 +225,7 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
int result = databaseHelper.getWritableDatabase().delete(TABLE_NAME, GROUP_ID + " = ?", new String[]{groupId});
if (result > 0) {
- Recipient.removeCached(Address.fromSerialized(groupId));
+ Recipient.removeCached(Address.Companion.fromSerialized(groupId));
notifyConversationListListeners();
return true;
} else {
@@ -246,7 +249,7 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
GROUP_ID + " = ?",
new String[] {groupId});
- Recipient.applyCached(Address.fromSerialized(groupId), recipient -> {
+ Recipient.applyCached(Address.Companion.fromSerialized(groupId), recipient -> {
recipient.setName(title);
recipient.setGroupAvatarId(avatar != null ? avatar.getId() : null);
});
@@ -261,7 +264,7 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?",
new String[] {groupID});
- Recipient recipient = Recipient.from(context, Address.fromSerialized(groupID), false);
+ Recipient recipient = Recipient.from(context, Address.Companion.fromSerialized(groupID), false);
recipient.setName(newValue);
}
@@ -284,20 +287,20 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?",
new String[] {groupID});
- Recipient.applyCached(Address.fromSerialized(groupID), recipient -> recipient.setGroupAvatarId(avatarId == 0 ? null : avatarId));
+ Recipient.applyCached(Address.Companion.fromSerialized(groupID), recipient -> recipient.setGroupAvatarId(avatarId == 0 ? null : avatarId));
}
public void updateMembers(String groupId, List
members) {
Collections.sort(members);
ContentValues contents = new ContentValues();
- contents.put(MEMBERS, Address.toSerializedList(members, ','));
+ contents.put(MEMBERS, Address.Companion.toSerializedList(members, ','));
contents.put(ACTIVE, 1);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?",
new String[] {groupId});
- Recipient.applyCached(Address.fromSerialized(groupId), recipient -> {
+ Recipient.applyCached(Address.Companion.fromSerialized(groupId), recipient -> {
recipient.setParticipants(Stream.of(members).map(a -> Recipient.from(context, a, false)).toList());
});
}
@@ -306,7 +309,7 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
Collections.sort(admins);
ContentValues contents = new ContentValues();
- contents.put(ADMINS, Address.toSerializedList(admins, ','));
+ contents.put(ADMINS, Address.Companion.toSerializedList(admins, ','));
contents.put(ACTIVE, 1);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?", new String[] {groupId});
@@ -317,12 +320,12 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
currentMembers.remove(source);
ContentValues contents = new ContentValues();
- contents.put(MEMBERS, Address.toSerializedList(currentMembers, ','));
+ contents.put(MEMBERS, Address.Companion.toSerializedList(currentMembers, ','));
databaseHelper.getWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?",
new String[] {groupId});
- Recipient.applyCached(Address.fromSerialized(groupId), recipient -> {
+ Recipient.applyCached(Address.Companion.fromSerialized(groupId), recipient -> {
List current = recipient.getParticipants();
Recipient removal = Recipient.from(context, source, false);
@@ -342,7 +345,7 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
if (cursor != null && cursor.moveToFirst()) {
String serializedMembers = cursor.getString(cursor.getColumnIndexOrThrow(MEMBERS));
- return Address.fromSerializedList(serializedMembers, ',');
+ return Address.Companion.fromSerializedList(serializedMembers, ',');
}
return new LinkedList<>();
@@ -421,106 +424,4 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
this.cursor.close();
}
}
-
- public static class GroupRecord {
-
- private final String id;
- private final String title;
- private final List members;
- private final byte[] avatar;
- private final long avatarId;
- private final byte[] avatarKey;
- private final byte[] avatarDigest;
- private final String avatarContentType;
- private final String relay;
- private final boolean active;
- private final boolean mms;
- private final String url;
- private final List admins;
-
- public GroupRecord(String id, String title, String members, byte[] avatar,
- long avatarId, byte[] avatarKey, String avatarContentType,
- String relay, boolean active, byte[] avatarDigest, boolean mms, String url, String admins)
- {
- this.id = id;
- this.title = title;
- this.avatar = avatar;
- this.avatarId = avatarId;
- this.avatarKey = avatarKey;
- this.avatarDigest = avatarDigest;
- this.avatarContentType = avatarContentType;
- this.relay = relay;
- this.active = active;
- this.mms = mms;
- this.url = url;
-
- if (!TextUtils.isEmpty(members)) this.members = Address.fromSerializedList(members, ',');
- else this.members = new LinkedList<>();
-
- if (!TextUtils.isEmpty(admins)) this.admins = Address.fromSerializedList(admins, ',');
- else this.admins = new LinkedList<>();
- }
-
- public byte[] getId() {
- try {
- return GroupUtil.getDecodedId(id);
- } catch (IOException ioe) {
- throw new AssertionError(ioe);
- }
- }
-
- public String getEncodedId() {
- return id;
- }
-
- public String getTitle() {
- return title;
- }
-
- public List getMembers() {
- return members;
- }
-
- public byte[] getAvatar() {
- return avatar;
- }
-
- public long getAvatarId() {
- return avatarId;
- }
-
- public byte[] getAvatarKey() {
- return avatarKey;
- }
-
- public byte[] getAvatarDigest() {
- return avatarDigest;
- }
-
- public String getAvatarContentType() {
- return avatarContentType;
- }
-
- public String getRelay() {
- return relay;
- }
-
- public boolean isActive() {
- return active;
- }
-
- public boolean isMms() {
- return mms;
- }
-
- public boolean isOpenGroup() { return Address.fromSerialized(id).isOpenGroup(); }
-
- public boolean isRSSFeed() { return Address.fromSerialized(id).isRSSFeed(); }
-
- public boolean isClosedGroup() { return Address.fromSerialized(id).isClosedGroup(); }
-
- public String getUrl() { return url; }
-
- public List getAdmins() { return admins; }
- }
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptDatabase.java
index 4d83184a5..2ead176e1 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptDatabase.java
@@ -10,6 +10,8 @@ import net.sqlcipher.database.SQLiteDatabase;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
+import org.session.libsession.messaging.threads.Address;
+
import java.util.LinkedList;
import java.util.List;
@@ -80,7 +82,7 @@ public class GroupReceiptDatabase extends Database {
try (Cursor cursor = db.query(TABLE_NAME, null, MMS_ID + " = ?", new String[] {String.valueOf(mmsId)}, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
- results.add(new GroupReceiptInfo(Address.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS))),
+ results.add(new GroupReceiptInfo(Address.Companion.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS))),
cursor.getInt(cursor.getColumnIndexOrThrow(STATUS)),
cursor.getLong(cursor.getColumnIndexOrThrow(TIMESTAMP)),
cursor.getInt(cursor.getColumnIndexOrThrow(UNIDENTIFIED)) == 1));
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessagingDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessagingDatabase.java
index 22ef0aef7..952d927e7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/MessagingDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessagingDatabase.java
@@ -15,6 +15,8 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.util.JsonUtils;
import org.session.libsignal.libsignal.IdentityKey;
+import org.session.libsession.messaging.threads.Address;
+
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java
index 83af72604..1c2657bc3 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java
@@ -62,8 +62,8 @@ import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
import org.thoughtcrime.securesms.mms.OutgoingSecureMediaMessage;
import org.thoughtcrime.securesms.mms.QuoteModel;
import org.thoughtcrime.securesms.mms.SlideDeck;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientFormattingException;
import org.thoughtcrime.securesms.util.JsonUtils;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java
index 1d6fe8890..4bd6d0381 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java
@@ -29,6 +29,8 @@ import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.util.Util;
+import org.session.libsession.messaging.threads.Address;
+
import java.util.HashSet;
import java.util.Set;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java
index a5ceeb550..6d00ff087 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java
@@ -10,14 +10,17 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import net.sqlcipher.database.SQLiteDatabase;
-
-import org.thoughtcrime.securesms.color.MaterialColor;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
-import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.util.Base64;
-import org.thoughtcrime.securesms.util.Util;
+
+import org.session.libsession.utilities.color.MaterialColor;
+import org.session.libsession.messaging.threads.Address;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient.*;
+import org.session.libsession.utilities.Base64;
+import org.session.libsession.utilities.Util;
+
import org.session.libsignal.libsignal.util.guava.Optional;
+import org.session.libsignal.libsignal.logging.Log;
import java.io.Closeable;
import java.io.IOException;
@@ -70,67 +73,13 @@ public class RecipientDatabase extends Database {
.map(columnName -> TABLE_NAME + "." + columnName)
.toList();
- public enum VibrateState {
- DEFAULT(0), ENABLED(1), DISABLED(2);
-
- private final int id;
-
- VibrateState(int id) {
- this.id = id;
- }
-
- public int getId() {
- return id;
- }
-
- public static VibrateState fromId(int id) {
- return values()[id];
- }
- }
-
- public enum RegisteredState {
- UNKNOWN(0), REGISTERED(1), NOT_REGISTERED(2);
-
- private final int id;
-
- RegisteredState(int id) {
- this.id = id;
- }
-
- public int getId() {
- return id;
- }
-
- public static RegisteredState fromId(int id) {
- return values()[id];
- }
- }
-
- public enum UnidentifiedAccessMode {
- UNKNOWN(0), DISABLED(1), ENABLED(2), UNRESTRICTED(3);
-
- private final int mode;
-
- UnidentifiedAccessMode(int mode) {
- this.mode = mode;
- }
-
- public int getMode() {
- return mode;
- }
-
- public static UnidentifiedAccessMode fromMode(int mode) {
- return values()[mode];
- }
- }
-
public static final String CREATE_TABLE =
"CREATE TABLE " + TABLE_NAME +
" (" + ID + " INTEGER PRIMARY KEY, " +
ADDRESS + " TEXT UNIQUE, " +
BLOCK + " INTEGER DEFAULT 0," +
NOTIFICATION + " TEXT DEFAULT NULL, " +
- VIBRATE + " INTEGER DEFAULT " + VibrateState.DEFAULT.getId() + ", " +
+ VIBRATE + " INTEGER DEFAULT " + Recipient.VibrateState.DEFAULT.getId() + ", " +
MUTE_UNTIL + " INTEGER DEFAULT 0, " +
COLOR + " TEXT DEFAULT NULL, " +
SEEN_INVITE_REMINDER + " INTEGER DEFAULT 0, " +
@@ -146,7 +95,7 @@ public class RecipientDatabase extends Database {
SIGNAL_PROFILE_AVATAR + " TEXT DEFAULT NULL, " +
PROFILE_SHARING + " INTEGER DEFAULT 0, " +
CALL_RINGTONE + " TEXT DEFAULT NULL, " +
- CALL_VIBRATE + " INTEGER DEFAULT " + VibrateState.DEFAULT.getId() + ", " +
+ CALL_VIBRATE + " INTEGER DEFAULT " + Recipient.VibrateState.DEFAULT.getId() + ", " +
NOTIFICATION_CHANNEL + " TEXT DEFAULT NULL, " +
UNIDENTIFIED_ACCESS_MODE + " INTEGER DEFAULT 0, " +
FORCE_SMS_SELECTION + " INTEGER DEFAULT 0);";
@@ -234,16 +183,15 @@ public class RecipientDatabase extends Database {
}
return Optional.of(new RecipientSettings(blocked, muteUntil,
- VibrateState.fromId(messageVibrateState),
- VibrateState.fromId(callVibrateState),
+ Recipient.VibrateState.fromId(messageVibrateState),
+ Recipient.VibrateState.fromId(callVibrateState),
Util.uri(messageRingtone), Util.uri(callRingtone),
- color,
- defaultSubscriptionId, expireMessages,
- RegisteredState.fromId(registeredState),
+ color, defaultSubscriptionId, expireMessages,
+ Recipient.RegisteredState.fromId(registeredState),
profileKey, systemDisplayName, systemContactPhoto,
systemPhoneLabel, systemContactUri,
signalProfileName, signalProfileAvatar, profileSharing,
- notificationChannel, UnidentifiedAccessMode.fromMode(unidentifiedAccessMode),
+ notificationChannel, Recipient.UnidentifiedAccessMode.fromMode(unidentifiedAccessMode),
forceSmsSelection));
}
@@ -382,7 +330,7 @@ public class RecipientDatabase extends Database {
try (Cursor cursor = db.query(TABLE_NAME, new String[] {ADDRESS}, null, null, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
- results.add(Address.fromExternal(context, cursor.getString(0)));
+ results.add(Address.Companion.fromExternal(context, cursor.getString(0)));
}
}
@@ -422,7 +370,7 @@ public class RecipientDatabase extends Database {
try (Cursor cursor = db.query(TABLE_NAME, new String[] {ADDRESS}, REGISTERED + " = ?", new String[] {"1"}, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
- results.add(Address.fromSerialized(cursor.getString(0)));
+ results.add(Address.Companion.fromSerialized(cursor.getString(0)));
}
}
@@ -435,7 +383,7 @@ public class RecipientDatabase extends Database {
try (Cursor cursor = db.query(TABLE_NAME, new String[] {ADDRESS}, SYSTEM_DISPLAY_NAME + " IS NOT NULL AND " + SYSTEM_DISPLAY_NAME + " != \"\"", null, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
- results.add(Address.fromSerialized(cursor.getString(0)));
+ results.add(Address.Companion.fromSerialized(cursor.getString(0)));
}
}
@@ -449,7 +397,7 @@ public class RecipientDatabase extends Database {
db.beginTransaction();
try (Cursor cursor = db.query(TABLE_NAME, new String[] {ADDRESS, COLOR, SYSTEM_DISPLAY_NAME}, SYSTEM_DISPLAY_NAME + " IS NOT NULL AND " + SYSTEM_DISPLAY_NAME + " != \"\"", null, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
- Address address = Address.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)));
+ Address address = Address.Companion.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)));
MaterialColor newColor = updater.update(cursor.getString(cursor.getColumnIndexOrThrow(SYSTEM_DISPLAY_NAME)),
cursor.getString(cursor.getColumnIndexOrThrow(COLOR)));
@@ -537,158 +485,6 @@ public class RecipientDatabase extends Database {
MaterialColor update(@NonNull String name, @Nullable String color);
}
- public static class RecipientSettings {
- private final boolean blocked;
- private final long muteUntil;
- private final VibrateState messageVibrateState;
- private final VibrateState callVibrateState;
- private final Uri messageRingtone;
- private final Uri callRingtone;
- private final MaterialColor color;
- private final int defaultSubscriptionId;
- private final int expireMessages;
- private final RegisteredState registered;
- private final byte[] profileKey;
- private final String systemDisplayName;
- private final String systemContactPhoto;
- private final String systemPhoneLabel;
- private final String systemContactUri;
- private final String signalProfileName;
- private final String signalProfileAvatar;
- private final boolean profileSharing;
- private final String notificationChannel;
- private final UnidentifiedAccessMode unidentifiedAccessMode;
- private final boolean forceSmsSelection;
-
- RecipientSettings(boolean blocked, long muteUntil,
- @NonNull VibrateState messageVibrateState,
- @NonNull VibrateState callVibrateState,
- @Nullable Uri messageRingtone,
- @Nullable Uri callRingtone,
- @Nullable MaterialColor color,
- int defaultSubscriptionId,
- int expireMessages,
- @NonNull RegisteredState registered,
- @Nullable byte[] profileKey,
- @Nullable String systemDisplayName,
- @Nullable String systemContactPhoto,
- @Nullable String systemPhoneLabel,
- @Nullable String systemContactUri,
- @Nullable String signalProfileName,
- @Nullable String signalProfileAvatar,
- boolean profileSharing,
- @Nullable String notificationChannel,
- @NonNull UnidentifiedAccessMode unidentifiedAccessMode,
- boolean forceSmsSelection)
- {
- this.blocked = blocked;
- this.muteUntil = muteUntil;
- this.messageVibrateState = messageVibrateState;
- this.callVibrateState = callVibrateState;
- this.messageRingtone = messageRingtone;
- this.callRingtone = callRingtone;
- this.color = color;
- this.defaultSubscriptionId = defaultSubscriptionId;
- this.expireMessages = expireMessages;
- this.registered = registered;
- this.profileKey = profileKey;
- this.systemDisplayName = systemDisplayName;
- this.systemContactPhoto = systemContactPhoto;
- this.systemPhoneLabel = systemPhoneLabel;
- this.systemContactUri = systemContactUri;
- this.signalProfileName = signalProfileName;
- this.signalProfileAvatar = signalProfileAvatar;
- this.profileSharing = profileSharing;
- this.notificationChannel = notificationChannel;
- this.unidentifiedAccessMode = unidentifiedAccessMode;
- this.forceSmsSelection = forceSmsSelection;
- }
-
- public @Nullable MaterialColor getColor() {
- return color;
- }
-
- public boolean isBlocked() {
- return blocked;
- }
-
- public long getMuteUntil() {
- return muteUntil;
- }
-
- public @NonNull VibrateState getMessageVibrateState() {
- return messageVibrateState;
- }
-
- public @NonNull VibrateState getCallVibrateState() {
- return callVibrateState;
- }
-
- public @Nullable Uri getMessageRingtone() {
- return messageRingtone;
- }
-
- public @Nullable Uri getCallRingtone() {
- return callRingtone;
- }
-
- public Optional getDefaultSubscriptionId() {
- return defaultSubscriptionId != -1 ? Optional.of(defaultSubscriptionId) : Optional.absent();
- }
-
- public int getExpireMessages() {
- return expireMessages;
- }
-
- public RegisteredState getRegistered() {
- return registered;
- }
-
- public @Nullable byte[] getProfileKey() {
- return profileKey;
- }
-
- public @Nullable String getSystemDisplayName() {
- return systemDisplayName;
- }
-
- public @Nullable String getSystemContactPhotoUri() {
- return systemContactPhoto;
- }
-
- public @Nullable String getSystemPhoneLabel() {
- return systemPhoneLabel;
- }
-
- public @Nullable String getSystemContactUri() {
- return systemContactUri;
- }
-
- public @Nullable String getProfileName() {
- return signalProfileName;
- }
-
- public @Nullable String getProfileAvatar() {
- return signalProfileAvatar;
- }
-
- public boolean isProfileSharing() {
- return profileSharing;
- }
-
- public @Nullable String getNotificationChannel() {
- return notificationChannel;
- }
-
- public @NonNull UnidentifiedAccessMode getUnidentifiedAccessMode() {
- return unidentifiedAccessMode;
- }
-
- public boolean isForceSmsSelection() {
- return forceSmsSelection;
- }
- }
-
public static class RecipientReader implements Closeable {
private final Context context;
@@ -701,7 +497,7 @@ public class RecipientDatabase extends Database {
public @NonNull Recipient getCurrent() {
String serialized = cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS));
- return Recipient.from(context, Address.fromSerialized(serialized), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(serialized), false);
}
public @Nullable Recipient getNext() {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java
index 197426827..0ea70e5a4 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java
@@ -38,7 +38,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
import org.thoughtcrime.securesms.jobs.TrimThreadJob;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.sms.IncomingGroupMessage;
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java
index 66e83a36f..bdd8d88fd 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java
@@ -26,7 +26,7 @@ import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteStatement;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import java.util.HashSet;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt
new file mode 100644
index 000000000..20a03d0ee
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt
@@ -0,0 +1,321 @@
+package org.thoughtcrime.securesms.database
+
+import android.content.Context
+import android.net.Uri
+import com.google.protobuf.ByteString
+import org.session.libsession.messaging.StorageProtocol
+import org.session.libsession.messaging.jobs.AttachmentUploadJob
+import org.session.libsession.messaging.jobs.Job
+import org.session.libsession.messaging.jobs.MessageSendJob
+import org.session.libsession.messaging.messages.Message
+import org.session.libsession.messaging.messages.visible.Attachment
+import org.session.libsession.messaging.messages.visible.VisibleMessage
+import org.session.libsession.messaging.opengroups.OpenGroup
+import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId
+import org.session.libsession.messaging.sending_receiving.linkpreview.LinkPreview
+import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel
+import org.session.libsession.messaging.threads.Address
+import org.session.libsession.messaging.threads.GroupRecord
+import org.session.libsession.messaging.threads.recipients.Recipient
+import org.session.libsession.utilities.TextSecurePreferences
+import org.session.libsignal.libsignal.util.KeyHelper
+import org.session.libsignal.libsignal.util.guava.Optional
+import org.session.libsignal.service.api.messages.SignalServiceAttachmentPointer
+import org.session.libsignal.service.api.messages.SignalServiceGroup
+import org.session.libsignal.service.internal.push.SignalServiceProtos
+import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
+import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage
+import org.thoughtcrime.securesms.mms.PartAuthority
+import org.thoughtcrime.securesms.sms.IncomingGroupMessage
+import org.thoughtcrime.securesms.sms.IncomingTextMessage
+import org.thoughtcrime.securesms.util.GroupUtil
+
+class Storage(val context: Context): StorageProtocol {
+ override fun getUserPublicKey(): String? {
+ return TextSecurePreferences.getLocalNumber(context)
+ }
+
+ override fun getUserKeyPair(): Pair? {
+ val userPublicKey = TextSecurePreferences.getLocalNumber(context) ?: return null
+ val userPrivateKey = IdentityKeyUtil.getIdentityKeyPair(context).privateKey.serialize()
+ return Pair(userPublicKey, userPrivateKey)
+ }
+
+ override fun getUserDisplayName(): String? {
+ return TextSecurePreferences.getProfileName(context)
+ }
+
+ override fun getUserProfileKey(): ByteArray? {
+ val profileKey = TextSecurePreferences.getProfileKey(context) ?: return null
+ return profileKey.toByteArray()
+ }
+
+ override fun getUserProfilePictureURL(): String? {
+ return TextSecurePreferences.getProfilePictureURL(context)
+ }
+
+ override fun getProfileKeyForRecipient(recipientPublicKey: String): ByteArray? {
+ val address = Address.fromSerialized(recipientPublicKey)
+ val recipient = Recipient.from(context, address, false)
+ return recipient.profileKey
+ }
+
+ override fun getOrGenerateRegistrationID(): Int {
+ var registrationID = TextSecurePreferences.getLocalRegistrationId(context)
+ if (registrationID == null) {
+ registrationID = KeyHelper.generateRegistrationId(false)
+ TextSecurePreferences.setLocalRegistrationId(context, registrationID)
+ }
+ return registrationID
+ }
+
+ override fun persist(job: Job) {
+ TODO("Not yet implemented")
+ }
+
+ override fun persist(attachments: List): List {
+ TODO("Not yet implemented")
+ }
+
+ override fun persist(message: VisibleMessage, quotes: QuoteModel?, linkPreview: List, groupPublicKey: String?, openGroupID: String?): Long? {
+ TODO("Not yet implemented")
+ }
+
+ override fun markJobAsSucceeded(job: Job) {
+ TODO("Not yet implemented")
+ }
+
+ override fun markJobAsFailed(job: Job) {
+ TODO("Not yet implemented")
+ }
+
+ override fun getAllPendingJobs(type: String): List {
+ TODO("Not yet implemented")
+ }
+
+ override fun getAttachmentUploadJob(attachmentID: Long): AttachmentUploadJob? {
+ TODO("Not yet implemented")
+ }
+
+ override fun getMessageSendJob(messageSendJobID: String): MessageSendJob? {
+ TODO("Not yet implemented")
+ }
+
+ override fun resumeMessageSendJobIfNeeded(messageSendJobID: String) {
+ TODO("Not yet implemented")
+ }
+
+ override fun isJobCanceled(job: Job): Boolean {
+ TODO("Not yet implemented")
+ }
+
+ override fun getAuthToken(server: String): String? {
+ return DatabaseFactory.getLokiAPIDatabase(context).getAuthToken(server)
+ }
+
+ override fun setAuthToken(server: String, newValue: String?) {
+ DatabaseFactory.getLokiAPIDatabase(context).setAuthToken(server, newValue)
+ }
+
+ override fun removeAuthToken(server: String) {
+ DatabaseFactory.getLokiAPIDatabase(context).setAuthToken(server, null)
+ }
+
+ override fun getOpenGroup(threadID: String): OpenGroup? {
+ TODO("Not yet implemented")
+ }
+
+ override fun getThreadID(openGroupID: String): String? {
+ TODO("Not yet implemented")
+ }
+
+ override fun getOpenGroupPublicKey(server: String): String? {
+ TODO("Not yet implemented")
+ }
+
+ override fun setOpenGroupPublicKey(server: String, newValue: String) {
+ TODO("Not yet implemented")
+ }
+
+ override fun setOpenGroupDisplayName(publicKey: String, channel: Long, server: String, displayName: String) {
+ TODO("Not yet implemented")
+ }
+
+ override fun getOpenGroupDisplayName(publicKey: String, channel: Long, server: String): String? {
+ TODO("Not yet implemented")
+ }
+
+ override fun getLastMessageServerID(group: Long, server: String): Long? {
+ return DatabaseFactory.getLokiAPIDatabase(context).getLastMessageServerID(group, server)
+ }
+
+ override fun setLastMessageServerID(group: Long, server: String, newValue: Long) {
+ DatabaseFactory.getLokiAPIDatabase(context).setLastMessageServerID(group, server, newValue)
+ }
+
+ override fun removeLastMessageServerID(group: Long, server: String) {
+ DatabaseFactory.getLokiAPIDatabase(context).removeLastMessageServerID(group, server)
+ }
+
+ override fun getLastDeletionServerID(group: Long, server: String): Long? {
+ return DatabaseFactory.getLokiAPIDatabase(context).getLastDeletionServerID(group, server)
+ }
+
+ override fun setLastDeletionServerID(group: Long, server: String, newValue: Long) {
+ DatabaseFactory.getLokiAPIDatabase(context).setLastDeletionServerID(group, server, newValue)
+ }
+
+ override fun removeLastDeletionServerID(group: Long, server: String) {
+ DatabaseFactory.getLokiAPIDatabase(context).removeLastDeletionServerID(group, server)
+ }
+
+ override fun setUserCount(group: Long, server: String, newValue: Int) {
+ DatabaseFactory.getLokiAPIDatabase(context).setUserCount(group, server, newValue)
+ }
+
+ override fun setOpenGroupProfilePictureURL(group: Long, server: String, newValue: String) {
+ DatabaseFactory.getLokiAPIDatabase(context).setOpenGroupProfilePictureURL(group, server, newValue)
+ }
+
+ override fun getOpenGroupProfilePictureURL(group: Long, server: String): String? {
+ return DatabaseFactory.getLokiAPIDatabase(context).getOpenGroupProfilePictureURL(group, server)
+ }
+
+ override fun updateTitle(groupID: String, newValue: String) {
+ DatabaseFactory.getGroupDatabase(context).updateTitle(groupID, newValue)
+ }
+
+ override fun updateProfilePicture(groupID: String, newValue: ByteArray) {
+ DatabaseFactory.getGroupDatabase(context).updateProfilePicture(groupID, newValue)
+ }
+
+ override fun getReceivedMessageTimestamps(): Set {
+ TODO("Not yet implemented")
+ }
+
+ override fun addReceivedMessageTimestamp(timestamp: Long) {
+ TODO("Not yet implemented")
+ }
+
+ override fun insertMessageOutbox(message: Message) {
+ TODO("Not yet implemented")
+ }
+
+ override fun insertMessageInbox(message: Message) {
+ TODO("Not yet implemented")
+ }
+
+ override fun setErrorMessage(message: Message, error: Exception) {
+ TODO("Not yet implemented")
+ }
+
+ override fun getGroup(groupID: String): GroupRecord? {
+ val group = DatabaseFactory.getGroupDatabase(context).getGroup(groupID)
+ return if (group.isPresent) { group.get() } else null
+ }
+
+ override fun createGroup(groupId: String, title: String?, members: List, avatar: SignalServiceAttachmentPointer?, relay: String?, admins: List) {
+ DatabaseFactory.getGroupDatabase(context).create(groupId, title, members, avatar, relay, admins)
+ }
+
+ override fun setActive(groupID: String, value: Boolean) {
+ DatabaseFactory.getGroupDatabase(context).setActive(groupID, value)
+ }
+
+ override fun removeMember(groupID: String, member: Address) {
+ DatabaseFactory.getGroupDatabase(context).removeMember(groupID, member)
+ }
+
+ override fun updateMembers(groupID: String, members: List) {
+ DatabaseFactory.getGroupDatabase(context).updateMembers(groupID, members)
+ }
+
+ override fun insertIncomingInfoMessage(context: Context, senderPublicKey: String, groupID: String, type0: SignalServiceProtos.GroupContext.Type, type1: SignalServiceGroup.Type, name: String, members: Collection, admins: Collection) {
+ val groupContextBuilder = SignalServiceProtos.GroupContext.newBuilder()
+ .setId(ByteString.copyFrom(GroupUtil.getDecodedId(groupID)))
+ .setType(type0)
+ .setName(name)
+ .addAllMembers(members)
+ .addAllAdmins(admins)
+ val group = SignalServiceGroup(type1, GroupUtil.getDecodedId(groupID), SignalServiceGroup.GroupType.SIGNAL, name, members.toList(), null, admins.toList())
+ val m = IncomingTextMessage(Address.fromSerialized(senderPublicKey), 1, System.currentTimeMillis(), "", Optional.of(group), 0, true)
+ val infoMessage = IncomingGroupMessage(m, groupContextBuilder.build(), "")
+ val smsDB = DatabaseFactory.getSmsDatabase(context)
+ smsDB.insertMessageInbox(infoMessage)
+ }
+
+ override fun insertOutgoingInfoMessage(context: Context, groupID: String, type: SignalServiceProtos.GroupContext.Type, name: String, members: Collection, admins: Collection, threadID: Long) {
+ val recipient = Recipient.from(context, Address.fromSerialized(groupID), false)
+ val groupContextBuilder = SignalServiceProtos.GroupContext.newBuilder()
+ .setId(ByteString.copyFrom(GroupUtil.getDecodedId(groupID)))
+ .setType(type)
+ .setName(name)
+ .addAllMembers(members)
+ .addAllAdmins(admins)
+ val infoMessage = OutgoingGroupMediaMessage(recipient, groupContextBuilder.build(), null, System.currentTimeMillis(), 0, null, listOf(), listOf())
+ val mmsDB = DatabaseFactory.getMmsDatabase(context)
+ val infoMessageID = mmsDB.insertMessageOutbox(infoMessage, threadID, false, null)
+ mmsDB.markAsSent(infoMessageID, true)
+ }
+
+ override fun setProfileSharing(address: Address, value: Boolean) {
+ val recipient = Recipient.from(context, address, false)
+ DatabaseFactory.getRecipientDatabase(context).setProfileSharing(recipient, value)
+ }
+
+ override fun getOrCreateThreadIdFor(address: Address): Long {
+ val recipient = Recipient.from(context, address, false)
+ return DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient)
+ }
+
+ override fun getOrCreateThreadIdFor(publicKey: String, groupPublicKey: String?, openGroupID: String?): Long? {
+ TODO("Not yet implemented")
+ }
+
+ override fun getThreadIdFor(address: Address): Long? {
+ val recipient = Recipient.from(context, address, false)
+ val threadID = DatabaseFactory.getThreadDatabase(context).getThreadIdIfExistsFor(recipient)
+ return if (threadID < 0) null else threadID
+ }
+
+ override fun getSessionRequestSentTimestamp(publicKey: String): Long? {
+ return DatabaseFactory.getLokiAPIDatabase(context).getSessionRequestSentTimestamp(publicKey)
+ }
+
+ override fun setSessionRequestSentTimestamp(publicKey: String, newValue: Long) {
+ DatabaseFactory.getLokiAPIDatabase(context).setSessionRequestSentTimestamp(publicKey, newValue)
+ }
+
+ override fun getSessionRequestProcessedTimestamp(publicKey: String): Long? {
+ return DatabaseFactory.getLokiAPIDatabase(context).getSessionRequestProcessedTimestamp(publicKey)
+ }
+
+ override fun setSessionRequestProcessedTimestamp(publicKey: String, newValue: Long) {
+ DatabaseFactory.getLokiAPIDatabase(context).setSessionRequestProcessedTimestamp(publicKey, newValue)
+ }
+
+ override fun getDisplayName(publicKey: String): String? {
+ return DatabaseFactory.getLokiUserDatabase(context).getDisplayName(publicKey)
+ }
+
+ override fun getServerDisplayName(serverID: String, publicKey: String): String? {
+ return DatabaseFactory.getLokiUserDatabase(context).getServerDisplayName(serverID, publicKey)
+ }
+
+ override fun getProfilePictureURL(publicKey: String): String? {
+ return DatabaseFactory.getLokiUserDatabase(context).getProfilePictureURL(publicKey)
+ }
+
+ override fun getRecipientSettings(address: Address): Recipient.RecipientSettings? {
+ val recipientSettings = DatabaseFactory.getRecipientDatabase(context).getRecipientSettings(address)
+ return if (recipientSettings.isPresent) { recipientSettings.get() } else null
+ }
+
+ override fun getAttachmentDataUri(attachmentId: AttachmentId): Uri {
+ return PartAuthority.getAttachmentDataUri(attachmentId)
+ }
+
+ override fun getAttachmentThumbnailUri(attachmentId: AttachmentId): Uri {
+ return PartAuthority.getAttachmentThumbnailUri(attachmentId)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java
index 6ec09cf5f..139e58464 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java
@@ -29,11 +29,8 @@ import com.annimon.stream.Stream;
import net.sqlcipher.database.SQLiteDatabase;
-import org.thoughtcrime.securesms.contactshare.Contact;
import org.thoughtcrime.securesms.contactshare.ContactUtil;
-import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord;
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
-import org.thoughtcrime.securesms.database.RecipientDatabase.RecipientSettings;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord;
import org.thoughtcrime.securesms.database.model.MessageRecord;
@@ -42,10 +39,16 @@ import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.util.DelimiterUtil;
-import org.thoughtcrime.securesms.util.TextSecurePreferences;
-import org.thoughtcrime.securesms.util.Util;
+
+import org.session.libsession.messaging.sending_receiving.contacts.Contact;
+import org.session.libsession.messaging.threads.GroupRecord;
+import org.session.libsession.messaging.threads.Address;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient.RecipientSettings;
+import org.session.libsession.utilities.Util;
+import org.session.libsession.utilities.TextSecurePreferences;
+import org.session.libsession.utilities.DelimiterUtil;
+
import org.session.libsignal.libsignal.util.Pair;
import org.session.libsignal.libsignal.util.guava.Optional;
@@ -553,7 +556,7 @@ public class ThreadDatabase extends Database {
cursor = db.query(TABLE_NAME, null, ID + " = ?", new String[] {threadId+""}, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
- Address address = Address.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)));
+ Address address = Address.Companion.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)));
addressCache.put(threadId, address);
return Recipient.from(context, address, false);
}
@@ -732,7 +735,7 @@ public class ThreadDatabase extends Database {
public ThreadRecord getCurrent() {
long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(ThreadDatabase.ID));
int distributionType = cursor.getInt(cursor.getColumnIndexOrThrow(ThreadDatabase.TYPE));
- Address address = Address.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(ThreadDatabase.ADDRESS)));
+ Address address = Address.Companion.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(ThreadDatabase.ADDRESS)));
Optional settings;
Optional groupRecord;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatch.java b/app/src/main/java/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatch.java
index 88d95017b..2e8ab3095 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatch.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatch.java
@@ -13,7 +13,7 @@ import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.util.Base64;
import org.session.libsignal.libsignal.IdentityKey;
import org.session.libsignal.libsignal.InvalidKeyException;
@@ -41,7 +41,7 @@ public class IdentityKeyMismatch {
@JsonIgnore
public Address getAddress() {
- return Address.fromSerialized(address);
+ return Address.Companion.fromSerialized(address);
}
public IdentityKey getIdentityKey() {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/documents/NetworkFailure.java b/app/src/main/java/org/thoughtcrime/securesms/database/documents/NetworkFailure.java
index 63861c9ef..ce16b50ff 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/documents/NetworkFailure.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/documents/NetworkFailure.java
@@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.database.documents;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
public class NetworkFailure {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java
index 4cb29cfc9..a367b23aa 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java
@@ -10,10 +10,10 @@ import androidx.loader.content.AsyncTaskLoader;
import com.annimon.stream.Stream;
import network.loki.messenger.R;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MediaDatabase;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java
index f2dd7081c..95428693d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ConversationListLoader.java
@@ -6,7 +6,7 @@ import android.database.MatrixCursor;
import android.database.MergeCursor;
import org.thoughtcrime.securesms.contacts.ContactAccessor;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.util.AbstractCursorLoader;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/PagingMediaLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/PagingMediaLoader.java
index 690a0c24f..4798ccf31 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/PagingMediaLoader.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/PagingMediaLoader.java
@@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.attachments.AttachmentId;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.mms.PartAuthority;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.AsyncLoader;
public class PagingMediaLoader extends AsyncLoader> {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ThreadMediaLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ThreadMediaLoader.java
index abcff10e1..91ed7332d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ThreadMediaLoader.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ThreadMediaLoader.java
@@ -5,9 +5,9 @@ import android.content.Context;
import android.database.Cursor;
import androidx.annotation.NonNull;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.AbstractCursorLoader;
public class ThreadMediaLoader extends AbstractCursorLoader {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java
index 567f03e26..ab40f3381 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java
@@ -22,7 +22,7 @@ import android.text.SpannableString;
import org.thoughtcrime.securesms.database.MmsSmsColumns;
import org.thoughtcrime.securesms.database.SmsDatabase;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
/**
* The base class for all message record models. Encapsulates basic data
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java
index f03ce5ffc..157e2eb1f 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java
@@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.mms.SlideDeck;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import java.util.List;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java
index 7e8fe3498..75dbbd67e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java
@@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.database.MmsSmsColumns;
import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.GroupUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MmsMessageRecord.java
index 679c8f15f..eaadf4cb3 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MmsMessageRecord.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MmsMessageRecord.java
@@ -4,13 +4,15 @@ package org.thoughtcrime.securesms.database.model;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import org.thoughtcrime.securesms.contactshare.Contact;
+import org.session.libsession.messaging.sending_receiving.contacts.Contact;
+import org.session.libsession.messaging.sending_receiving.linkpreview.LinkPreview;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
-import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck;
-import org.thoughtcrime.securesms.recipients.Recipient;
+
import java.util.LinkedList;
import java.util.List;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java
index e58ba7543..370d2adb8 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java
@@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.database.SmsDatabase.Status;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
import org.thoughtcrime.securesms.mms.SlideDeck;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import java.util.Collections;
import java.util.LinkedList;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/Quote.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/Quote.java
index 638ca9d71..fe01e2da4 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/model/Quote.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/Quote.java
@@ -4,7 +4,7 @@ package org.thoughtcrime.securesms.database.model;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.mms.SlideDeck;
public class Quote {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java
index 127375cdc..bd03f0eb0 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java
@@ -25,7 +25,7 @@ import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.database.MmsSmsColumns;
import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import java.util.LinkedList;
import java.util.List;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java
index edac627a0..0ae6fc61d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java
@@ -29,7 +29,7 @@ import androidx.annotation.Nullable;
import org.thoughtcrime.securesms.database.MmsSmsColumns;
import org.thoughtcrime.securesms.database.SmsDatabase;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.ExpirationUtil;
import network.loki.messenger.R;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java
index 94f3026bf..20b9fdac2 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java
@@ -11,14 +11,14 @@ import com.google.protobuf.ByteString;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.attachments.UriAttachment;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage;
import org.thoughtcrime.securesms.providers.BlobProvider;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.util.BitmapUtil;
import org.thoughtcrime.securesms.util.GroupUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java
index f2546a349..829e8ea59 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java
@@ -8,7 +8,7 @@ import androidx.annotation.Nullable;
import com.google.protobuf.ByteString;
import org.thoughtcrime.securesms.ApplicationContext;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.MessagingDatabase.InsertResult;
@@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.loki.protocol.ClosedGroupsProtocol;
import org.thoughtcrime.securesms.mms.MmsException;
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.sms.IncomingGroupMessage;
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
import org.thoughtcrime.securesms.util.Base64;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java
index 30f391ec3..8138f840a 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java
@@ -7,7 +7,7 @@ import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.attachments.AttachmentId;
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
import org.thoughtcrime.securesms.attachments.PointerAttachment;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.dependencies.InjectableType;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java
index 7aa331c28..2a45ec75f 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java
@@ -13,7 +13,7 @@ import com.google.android.mms.pdu_alt.RetrieveConf;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.attachments.UriAttachment;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.InsertResult;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java
index 1dee3ff33..25e02cdc1 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java
@@ -13,10 +13,10 @@ import com.google.android.mms.pdu_alt.PduHeaders;
import com.google.android.mms.pdu_alt.PduParser;
import org.thoughtcrime.securesms.ApplicationContext;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MmsDatabase;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.Util;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java
index 5ca2d33dc..ce0d7d688 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java
@@ -21,7 +21,7 @@ import com.klinker.android.send_message.Utils;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.attachments.Attachment;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MmsDatabase;
import org.thoughtcrime.securesms.database.NoSuchMessageException;
@@ -36,7 +36,7 @@ import org.thoughtcrime.securesms.mms.MmsException;
import org.thoughtcrime.securesms.mms.MmsSendResult;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
import org.thoughtcrime.securesms.mms.PartAuthority;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.transport.InsecureFallbackApprovalException;
import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
import org.thoughtcrime.securesms.util.Hex;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptJob.java
index 0d997a82e..cb4fba9db 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptJob.java
@@ -36,7 +36,7 @@ import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
import org.thoughtcrime.securesms.crypto.SecurityEvent;
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase;
@@ -80,9 +80,9 @@ import org.thoughtcrime.securesms.mms.OutgoingSecureMediaMessage;
import org.thoughtcrime.securesms.mms.QuoteModel;
import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.mms.StickerSlide;
-import org.thoughtcrime.securesms.notifications.MessageNotifier;
+import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier;
import org.thoughtcrime.securesms.notifications.NotificationChannels;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.sms.IncomingEncryptedMessage;
import org.thoughtcrime.securesms.sms.IncomingEndSessionMessage;
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
@@ -292,7 +292,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
SessionMetaProtocol.handleProfileKeyUpdate(context, content);
}
- if (SessionMetaProtocol.shouldSendDeliveryReceipt(message, Address.fromSerialized(content.getSender()))) {
+ if (SessionMetaProtocol.shouldSendDeliveryReceipt(message, Address.Companion.fromSerialized(content.getSender()))) {
handleNeedsDeliveryReceipt(content, message);
}
}
@@ -324,7 +324,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
Log.w(TAG, "Got unrecognized message...");
}
- resetRecipientToPush(Recipient.from(context, Address.fromSerialized(content.getSender()), false));
+ resetRecipientToPush(Recipient.from(context, Address.Companion.fromSerialized(content.getSender()), false));
// if (envelope.isPreKeySignalMessage()) {
// ApplicationContext.getInstance(context).getJobManager().add(new RefreshPreKeysJob());
@@ -365,7 +365,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
@NonNull Optional smsMessageId)
{
SmsDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context);
- IncomingTextMessage incomingTextMessage = new IncomingTextMessage(Address.fromSerialized(content.getSender()),
+ IncomingTextMessage incomingTextMessage = new IncomingTextMessage(Address.Companion.fromSerialized(content.getSender()),
content.getSenderDevice(),
content.getTimestamp(),
"", Optional.absent(), 0,
@@ -528,8 +528,8 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
if (message.getMessage().getProfileKey().isPresent()) {
Recipient recipient = null;
- if (message.getDestination().isPresent()) recipient = Recipient.from(context, Address.fromSerialized(message.getDestination().get()), false);
- else if (message.getMessage().getGroupInfo().isPresent()) recipient = Recipient.from(context, Address.fromSerialized(GroupUtil.getEncodedId(message.getMessage().getGroupInfo().get())), false);
+ if (message.getDestination().isPresent()) recipient = Recipient.from(context, Address.Companion.fromSerialized(message.getDestination().get()), false);
+ else if (message.getMessage().getGroupInfo().isPresent()) recipient = Recipient.from(context, Address.Companion.fromSerialized(GroupUtil.getEncodedId(message.getMessage().getGroupInfo().get())), false);
if (recipient != null && !recipient.isSystemContact() && !recipient.isProfileSharing()) {
@@ -933,7 +933,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
}
if (canRecoverAutomatically(e)) {
- Recipient recipient = Recipient.from(context, Address.fromSerialized(sender), false);
+ Recipient recipient = Recipient.from(context, Address.Companion.fromSerialized(sender), false);
LokiThreadDatabase threadDB = DatabaseFactory.getLokiThreadDatabase(context);
long threadID = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
threadDB.addSessionRestoreDevice(threadID, sender);
@@ -1017,7 +1017,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
{
ApplicationContext.getInstance(context)
.getJobManager()
- .add(new SendDeliveryReceiptJob(Address.fromSerialized(content.getSender()), message.getTimestamp()));
+ .add(new SendDeliveryReceiptJob(Address.Companion.fromSerialized(content.getSender()), message.getTimestamp()));
}
@SuppressLint("DefaultLocale")
@@ -1025,9 +1025,9 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
@NonNull SignalServiceReceiptMessage message)
{
// Redirect message to master device conversation
- Address masterAddress = Address.fromSerialized(content.getSender());
+ Address masterAddress = Address.Companion.fromSerialized(content.getSender());
- if (masterAddress.isPhone()) {
+ if (masterAddress.isContact()) {
Recipient masterRecipient = getMessageMasterDestination(content.getSender());
masterAddress = masterRecipient.getAddress();
}
@@ -1046,9 +1046,9 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
if (TextSecurePreferences.isReadReceiptsEnabled(context)) {
// Redirect message to master device conversation
- Address masterAddress = Address.fromSerialized(content.getSender());
+ Address masterAddress = Address.Companion.fromSerialized(content.getSender());
- if (masterAddress.isPhone()) {
+ if (masterAddress.isContact()) {
Recipient masterRecipient = getMessageMasterDestination(content.getSender());
masterAddress = masterRecipient.getAddress();
}
@@ -1069,13 +1069,13 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
return;
}
- Recipient author = Recipient.from(context, Address.fromSerialized(content.getSender()), false);
+ Recipient author = Recipient.from(context, Address.Companion.fromSerialized(content.getSender()), false);
long threadId;
if (typingMessage.getGroupId().isPresent()) {
// Typing messages should only apply to closed groups, thus we use `getEncodedId`
- Address groupAddress = Address.fromSerialized(GroupUtil.getEncodedId(typingMessage.getGroupId().get(), false));
+ Address groupAddress = Address.Companion.fromSerialized(GroupUtil.getEncodedId(typingMessage.getGroupId().get(), false));
Recipient groupRecipient = Recipient.from(context, groupAddress, false);
threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdIfExistsFor(groupRecipient);
@@ -1092,10 +1092,10 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
if (typingMessage.isTypingStarted()) {
Log.d(TAG, "Typing started on thread " + threadId);
- ApplicationContext.getInstance(context).getTypingStatusRepository().onTypingStarted(context,threadId, author, content.getSenderDevice());
+ ApplicationContext.getInstance(context).getTypingStatusRepository().didReceiveTypingStartedMessage(context,threadId, author.getAddress(), content.getSenderDevice());
} else {
Log.d(TAG, "Typing stopped on thread " + threadId);
- ApplicationContext.getInstance(context).getTypingStatusRepository().onTypingStopped(context, threadId, author, content.getSenderDevice(), false);
+ ApplicationContext.getInstance(context).getTypingStatusRepository().didReceiveTypingStoppedMessage(context, threadId, author.getAddress(), content.getSenderDevice(), false);
}
}
@@ -1112,7 +1112,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
return Optional.absent();
}
- Address author = Address.fromSerialized(quote.get().getAuthor().getNumber());
+ Address author = Address.Companion.fromSerialized(quote.get().getAuthor().getNumber());
MessageRecord message = DatabaseFactory.getMmsSmsDatabase(context).getMessageFor(quote.get().getId(), author);
if (message != null) {
@@ -1227,21 +1227,21 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
private Recipient getSyncMessageDestination(SentTranscriptMessage message) {
if (message.getMessage().isGroupMessage()) {
- return Recipient.from(context, Address.fromSerialized(GroupUtil.getEncodedId(message.getMessage().getGroupInfo().get())), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(GroupUtil.getEncodedId(message.getMessage().getGroupInfo().get())), false);
} else {
- return Recipient.from(context, Address.fromSerialized(message.getDestination().get()), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(message.getDestination().get()), false);
}
}
private Recipient getSyncMessageMasterDestination(SentTranscriptMessage message) {
if (message.getMessage().isGroupMessage()) {
- return Recipient.from(context, Address.fromSerialized(GroupUtil.getEncodedId(message.getMessage().getGroupInfo().get())), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(GroupUtil.getEncodedId(message.getMessage().getGroupInfo().get())), false);
} else {
String publicKey = message.getDestination().get();
String userPublicKey = TextSecurePreferences.getLocalNumber(context);
Set allUserDevices = org.session.libsignal.service.loki.protocol.shelved.multidevice.MultiDeviceProtocol.shared.getAllLinkedDevices(userPublicKey);
if (allUserDevices.contains(publicKey)) {
- return Recipient.from(context, Address.fromSerialized(userPublicKey), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(userPublicKey), false);
} else {
try {
// TODO: Burn this with fire when we can
@@ -1250,9 +1250,9 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
if (masterPublicKey == null) {
masterPublicKey = publicKey;
}
- return Recipient.from(context, Address.fromSerialized(masterPublicKey), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(masterPublicKey), false);
} catch (Exception e) {
- return Recipient.from(context, Address.fromSerialized(publicKey), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(publicKey), false);
}
}
}
@@ -1260,20 +1260,20 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
private Recipient getMessageDestination(SignalServiceContent content, SignalServiceDataMessage message) {
if (message.getGroupInfo().isPresent()) {
- return Recipient.from(context, Address.fromExternal(context, GroupUtil.getEncodedId(message.getGroupInfo().get().getGroupId(), false)), false);
+ return Recipient.from(context, Address.Companion.fromExternal(context, GroupUtil.getEncodedId(message.getGroupInfo().get().getGroupId(), false)), false);
} else {
- return Recipient.from(context, Address.fromExternal(context, content.getSender()), false);
+ return Recipient.from(context, Address.Companion.fromExternal(context, content.getSender()), false);
}
}
private Recipient getMessageMasterDestination(String publicKey) {
if (!PublicKeyValidation.isValid(publicKey)) {
- return Recipient.from(context, Address.fromSerialized(publicKey), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(publicKey), false);
} else {
String userPublicKey = TextSecurePreferences.getLocalNumber(context);
Set allUserDevices = org.session.libsignal.service.loki.protocol.shelved.multidevice.MultiDeviceProtocol.shared.getAllLinkedDevices(userPublicKey);
if (allUserDevices.contains(publicKey)) {
- return Recipient.from(context, Address.fromSerialized(userPublicKey), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(userPublicKey), false);
} else {
try {
// TODO: Burn this with fire when we can
@@ -1282,21 +1282,21 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
if (masterPublicKey == null) {
masterPublicKey = publicKey;
}
- return Recipient.from(context, Address.fromSerialized(masterPublicKey), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(masterPublicKey), false);
} catch (Exception e) {
- return Recipient.from(context, Address.fromSerialized(publicKey), false);
+ return Recipient.from(context, Address.Companion.fromSerialized(publicKey), false);
}
}
}
}
private void notifyTypingStoppedFromIncomingMessage(@NonNull Recipient conversationRecipient, @NonNull String sender, int device) {
- Recipient author = Recipient.from(context, Address.fromSerialized(sender), false);
+ Recipient author = Recipient.from(context, Address.Companion.fromSerialized(sender), false);
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(conversationRecipient);
if (threadId > 0) {
Log.d(TAG, "Typing stopped on thread " + threadId + " due to an incoming message.");
- ApplicationContext.getInstance(context).getTypingStatusRepository().onTypingStopped(context, threadId, author, device, true);
+ ApplicationContext.getInstance(context).getTypingStatusRepository().didReceiveTypingStoppedMessage(context, threadId, author.getAddress(), device, true);
}
}
@@ -1311,7 +1311,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
return true;
}
- Recipient sender = Recipient.from(context, Address.fromSerialized(content.getSender()), false);
+ Recipient sender = Recipient.from(context, Address.Companion.fromSerialized(content.getSender()), false);
if (content.getDeviceLink().isPresent()) {
return false;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java
index c4faad91d..5d2a0557a 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java
@@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MmsDatabase;
import org.thoughtcrime.securesms.database.NoSuchMessageException;
@@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.loki.protocol.ClosedGroupsProtocol;
import org.thoughtcrime.securesms.mms.MmsException;
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.transport.RetryLaterException;
import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
import org.thoughtcrime.securesms.util.GroupUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java
index 138256b6a..ad0d8af67 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java
@@ -4,7 +4,7 @@ package org.thoughtcrime.securesms.jobs;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord;
@@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.session.libsignal.libsignal.util.guava.Optional;
import org.session.libsignal.service.api.SignalServiceMessageSender;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java
index 8599a22a2..8bc8088d4 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java
@@ -10,7 +10,7 @@ import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
import org.thoughtcrime.securesms.database.MmsDatabase;
@@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.loki.database.LokiMessageDatabase;
import org.thoughtcrime.securesms.mms.MmsException;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.service.ExpiringMessageManager;
import org.thoughtcrime.securesms.transport.InsecureFallbackApprovalException;
import org.thoughtcrime.securesms.transport.RetryLaterException;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushReceivedJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushReceivedJob.java
index 77f2dd32f..178935d24 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushReceivedJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushReceivedJob.java
@@ -3,13 +3,13 @@ package org.thoughtcrime.securesms.jobs;
import android.annotation.SuppressLint;
import androidx.annotation.NonNull;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
import org.thoughtcrime.securesms.database.RecipientDatabase;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.session.libsignal.service.api.messages.SignalServiceEnvelope;
public abstract class PushReceivedJob extends BaseJob {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java
index 9c73dc4be..f0bab8045 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java
@@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.contactshare.Contact;
import org.thoughtcrime.securesms.contactshare.ContactModelMapper;
import org.thoughtcrime.securesms.crypto.ProfileKeyUtil;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.events.PartProgressEvent;
import org.thoughtcrime.securesms.jobmanager.Job;
@@ -24,7 +24,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
import org.thoughtcrime.securesms.mms.PartAuthority;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.BitmapDecodingException;
import org.thoughtcrime.securesms.util.BitmapUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java
index 533f26813..5a8ed20f1 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java
@@ -5,7 +5,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
import org.thoughtcrime.securesms.database.NoSuchMessageException;
@@ -16,7 +16,7 @@ import org.thoughtcrime.securesms.dependencies.InjectableType;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.loki.database.LokiMessageDatabase;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.service.ExpiringMessageManager;
import org.thoughtcrime.securesms.transport.InsecureFallbackApprovalException;
import org.thoughtcrime.securesms.transport.RetryLaterException;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupInfoJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupInfoJob.java
index cd4ab5ab2..fdb8a1edb 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupInfoJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupInfoJob.java
@@ -3,13 +3,13 @@ package org.thoughtcrime.securesms.jobs;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.dependencies.InjectableType;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.util.GroupUtil;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.session.libsignal.service.api.SignalServiceMessageSender;
import org.session.libsignal.service.api.crypto.UntrustedIdentityException;
import org.session.libsignal.service.api.messages.SignalServiceDataMessage;
@@ -80,7 +80,7 @@ public class RequestGroupInfoJob extends BaseJob implements InjectableType {
.build();
messageSender.sendMessage(0, new SignalServiceAddress(source),
- UnidentifiedAccessUtil.getAccessFor(context, Recipient.from(context, Address.fromExternal(context, source), false)),
+ UnidentifiedAccessUtil.getAccessFor(context, Recipient.from(context, Address.Companion.fromExternal(context, source), false)),
message);
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java
index 8412508b3..8d7223ec0 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java
@@ -5,7 +5,10 @@ import android.app.Application;
import androidx.annotation.NonNull;
import android.text.TextUtils;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.utilities.Util;
+
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
@@ -15,8 +18,6 @@ import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.RecipientDatabase;
import org.thoughtcrime.securesms.dependencies.InjectableType;
import org.thoughtcrime.securesms.profiles.AvatarHelper;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.util.Util;
import org.session.libsignal.service.api.SignalServiceMessageReceiver;
import org.session.libsignal.service.api.push.exceptions.PushNetworkException;
@@ -132,7 +133,7 @@ public class RetrieveProfileAvatarJob extends BaseJob implements InjectableType
@Override
public @NonNull RetrieveProfileAvatarJob create(@NonNull Parameters parameters, @NonNull Data data) {
return new RetrieveProfileAvatarJob(parameters,
- Recipient.from(application, Address.fromSerialized(data.getString(KEY_ADDRESS)), true),
+ Recipient.from(application, Address.Companion.fromSerialized(data.getString(KEY_ADDRESS)), true),
data.getString(KEY_PROFILE_AVATAR));
}
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java
index 8b85b0e4f..757fe9602 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java
@@ -4,13 +4,13 @@ package org.thoughtcrime.securesms.jobs;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.dependencies.InjectableType;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.session.libsignal.service.api.SignalServiceMessageSender;
import org.session.libsignal.service.api.crypto.UntrustedIdentityException;
import org.session.libsignal.service.api.messages.SignalServiceReceiptMessage;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java
index 3b6d074b6..163d160fa 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java
@@ -4,13 +4,13 @@ package org.thoughtcrime.securesms.jobs;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.dependencies.InjectableType;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.session.libsignal.service.api.SignalServiceMessageSender;
import org.session.libsignal.service.api.crypto.UntrustedIdentityException;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java
index 158e3c3d4..938b04fc9 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java
@@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.InsertResult;
import org.thoughtcrime.securesms.database.SmsDatabase;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java
index f4cf0be17..c09be679d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java
@@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.NoSuchMessageException;
import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.service.SmsDeliveryListener;
import org.thoughtcrime.securesms.transport.UndeliverableMessageException;
import org.thoughtcrime.securesms.util.NumberUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java
index 4b13471f9..957be3242 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java
@@ -10,7 +10,7 @@ import org.thoughtcrime.securesms.dependencies.InjectableType;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.session.libsignal.libsignal.util.guava.Optional;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt
index 60599de1e..4ed4c7047 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreateClosedGroupActivity.kt
@@ -17,7 +17,7 @@ import network.loki.messenger.R
import nl.komponents.kovenant.ui.successUi
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
import org.thoughtcrime.securesms.conversation.ConversationActivity
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.ThreadDatabase
import org.thoughtcrime.securesms.groups.GroupManager
@@ -25,7 +25,7 @@ import org.thoughtcrime.securesms.loki.protocol.ClosedGroupsProtocol
import org.thoughtcrime.securesms.loki.utilities.fadeIn
import org.thoughtcrime.securesms.loki.utilities.fadeOut
import org.thoughtcrime.securesms.mms.GlideApp
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.session.libsignal.libsignal.util.guava.Optional
import java.lang.ref.WeakReference
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreatePrivateChatActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreatePrivateChatActivity.kt
index e71ce1ae3..db4494f47 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreatePrivateChatActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/CreatePrivateChatActivity.kt
@@ -17,12 +17,12 @@ import kotlinx.android.synthetic.main.fragment_enter_public_key.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
import org.thoughtcrime.securesms.conversation.ConversationActivity
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.ThreadDatabase
import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragment
import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragmentDelegate
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.session.libsignal.service.loki.utilities.PublicKeyValidation
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/EditClosedGroupActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/EditClosedGroupActivity.kt
index 48de4ef3a..87169ca26 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/EditClosedGroupActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/EditClosedGroupActivity.kt
@@ -18,7 +18,7 @@ import nl.komponents.kovenant.ui.failUi
import nl.komponents.kovenant.ui.successUi
import org.session.libsignal.service.loki.utilities.toHexString
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.groups.GroupManager
import org.thoughtcrime.securesms.loki.dialogs.ClosedGroupEditingOptionsBottomSheet
@@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.loki.protocol.ClosedGroupsProtocol
import org.thoughtcrime.securesms.loki.utilities.fadeIn
import org.thoughtcrime.securesms.loki.utilities.fadeOut
import org.thoughtcrime.securesms.mms.GlideApp
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.thoughtcrime.securesms.util.ThemeUtil
import java.io.IOException
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/EditClosedGroupMembersAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/EditClosedGroupMembersAdapter.kt
index 53e36cd39..3c07136f1 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/EditClosedGroupMembersAdapter.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/EditClosedGroupMembersAdapter.kt
@@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.loki.activities
import android.content.Context
import androidx.recyclerview.widget.RecyclerView
import android.view.ViewGroup
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.loki.views.UserView
import org.thoughtcrime.securesms.mms.GlideRequests
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
class EditClosedGroupMembersAdapter(
private val context: Context,
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt
index 350208232..e070de271 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt
@@ -29,7 +29,7 @@ import network.loki.messenger.R
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
import org.thoughtcrime.securesms.conversation.ConversationActivity
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.model.ThreadRecord
import org.thoughtcrime.securesms.loki.api.ResetThreadSessionJob
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/QRCodeActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/QRCodeActivity.kt
index 181880b85..0ae7e33fd 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/QRCodeActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/QRCodeActivity.kt
@@ -16,14 +16,14 @@ import kotlinx.android.synthetic.main.fragment_view_my_qr_code.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
import org.thoughtcrime.securesms.conversation.ConversationActivity
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.ThreadDatabase
import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragment
import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragmentDelegate
import org.thoughtcrime.securesms.loki.utilities.QRCodeUtilities
import org.thoughtcrime.securesms.loki.utilities.toPx
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.FileProviderUtil
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.session.libsignal.service.loki.utilities.PublicKeyValidation
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/RecoveryPhraseRestoreActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/RecoveryPhraseRestoreActivity.kt
index 0d4acd6ec..e49345c60 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/RecoveryPhraseRestoreActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/RecoveryPhraseRestoreActivity.kt
@@ -15,7 +15,7 @@ import kotlinx.android.synthetic.main.activity_recovery_phrase_restore.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.loki.utilities.KeyPairUtilities
import org.thoughtcrime.securesms.loki.utilities.MnemonicUtilities
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/RegisterActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/RegisterActivity.kt
index 2a7c76119..f9010ba72 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/RegisterActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/RegisterActivity.kt
@@ -20,7 +20,7 @@ import kotlinx.android.synthetic.main.activity_register.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.loki.utilities.KeyPairUtilities
import org.thoughtcrime.securesms.loki.utilities.push
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SelectContactsAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SelectContactsAdapter.kt
index 66f7e7c76..135762f66 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SelectContactsAdapter.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SelectContactsAdapter.kt
@@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.loki.activities
import android.content.Context
import androidx.recyclerview.widget.RecyclerView
import android.view.ViewGroup
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.loki.views.UserView
import org.thoughtcrime.securesms.mms.GlideRequests
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
class SelectContactsAdapter(private val context: Context, private val glide: GlideRequests) : RecyclerView.Adapter() {
val selectedMembers = mutableSetOf()
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SettingsActivity.kt
index 99fc5362e..aca9a7cef 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SettingsActivity.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/SettingsActivity.kt
@@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
import org.thoughtcrime.securesms.avatar.AvatarSelection
import org.thoughtcrime.securesms.crypto.ProfileKeyUtil
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.loki.dialogs.ChangeUiModeDialog
import org.thoughtcrime.securesms.loki.dialogs.ClearAllDataDialog
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/api/PublicChatPoller.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/api/PublicChatPoller.kt
index 002859952..59b0c6516 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/api/PublicChatPoller.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/api/PublicChatPoller.kt
@@ -9,13 +9,13 @@ import nl.komponents.kovenant.functional.bind
import nl.komponents.kovenant.functional.map
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.jobs.PushDecryptJob
import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob
import org.thoughtcrime.securesms.loki.protocol.SessionMetaProtocol
import org.thoughtcrime.securesms.loki.utilities.successBackground
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.session.libsignal.libsignal.util.guava.Optional
import org.session.libsignal.service.api.messages.SignalServiceAttachmentPointer
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt
index f9bef9df1..6af8b1058 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/api/ResetThreadSessionJob.kt
@@ -1,12 +1,12 @@
package org.thoughtcrime.securesms.loki.api
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.jobmanager.Data
import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
import org.thoughtcrime.securesms.jobs.BaseJob
import org.thoughtcrime.securesms.logging.Log
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.sms.MessageSender
import org.thoughtcrime.securesms.sms.OutgoingEndSessionMessage
import org.thoughtcrime.securesms.sms.OutgoingTextMessage
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiMessageDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiMessageDatabase.kt
index 4208dd713..108783a51 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiMessageDatabase.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiMessageDatabase.kt
@@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.loki.database
import android.content.ContentValues
import android.content.Context
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.Database
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabase.kt
index 988195460..69b1cd889 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabase.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiThreadDatabase.kt
@@ -3,16 +3,19 @@ package org.thoughtcrime.securesms.loki.database
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
-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
import org.thoughtcrime.securesms.loki.utilities.*
-import org.thoughtcrime.securesms.recipients.Recipient
-import org.thoughtcrime.securesms.util.TextSecurePreferences
+
+import org.session.libsession.messaging.threads.Address
+import org.session.libsession.messaging.threads.recipients.Recipient
+import org.session.libsession.utilities.TextSecurePreferences
+import org.session.libsignal.service.loki.api.opengroups.PublicChat
+
import org.session.libsignal.libsignal.loki.SessionResetStatus
import org.session.libsignal.service.internal.util.JsonUtil
-import org.session.libsignal.service.loki.api.opengroups.PublicChat
import org.session.libsignal.service.loki.database.LokiThreadDatabaseProtocol
import org.session.libsignal.service.loki.utilities.PublicKeyValidation
@@ -119,7 +122,7 @@ class LokiThreadDatabase(context: Context, helper: SQLCipherOpenHelper) : Databa
}
fun getSessionRestoreDevices(threadID: Long): Set {
- return TextSecurePreferences.getStringPreference(context, "session_restore_devices_$threadID", "")
+ return TextSecurePreferences.getStringPreference(context, "session_restore_devices_$threadID", "")!!
.split(",")
.filter { PublicKeyValidation.isValid(it) }
.toSet()
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiUserDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiUserDatabase.kt
index d05f9e293..8c9273443 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiUserDatabase.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/database/LokiUserDatabase.kt
@@ -4,12 +4,12 @@ import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import org.thoughtcrime.securesms.logging.Log
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.Database
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
import org.thoughtcrime.securesms.loki.utilities.get
import org.thoughtcrime.securesms.loki.utilities.insertOrUpdate
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.session.libsignal.service.loki.database.LokiUserDatabaseProtocol
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/dialogs/ConversationOptionsBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/dialogs/ConversationOptionsBottomSheet.kt
index f803e0fce..e6ee83162 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/dialogs/ConversationOptionsBottomSheet.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/dialogs/ConversationOptionsBottomSheet.kt
@@ -10,7 +10,7 @@ import kotlinx.android.synthetic.main.fragment_closed_group_edit_bottom_sheet.*
import kotlinx.android.synthetic.main.fragment_conversation_bottom_sheet.*
import kotlinx.android.synthetic.main.fragment_device_list_bottom_sheet.*
import network.loki.messenger.R
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
public class ConversationOptionsBottomSheet : BottomSheetDialogFragment() {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListAdapter.kt
index d9cfa2f61..802b2f4f1 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListAdapter.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListAdapter.kt
@@ -9,7 +9,7 @@ import kotlinx.android.synthetic.main.contact_selection_list_divider.view.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.loki.views.UserView
import org.thoughtcrime.securesms.mms.GlideRequests
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
class ContactSelectionListAdapter(private val context: Context, private val multiSelect: Boolean) : RecyclerView.Adapter() {
lateinit var glide: GlideRequests
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListFragment.kt
index 1dfd5e577..bb6566345 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListFragment.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListFragment.kt
@@ -14,7 +14,7 @@ import network.loki.messenger.R
import org.thoughtcrime.securesms.contacts.ContactsCursorLoader
import org.thoughtcrime.securesms.logging.Log
import org.thoughtcrime.securesms.mms.GlideApp
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
class ContactSelectionListFragment : Fragment(), LoaderManager.LoaderCallbacks>, ContactClickListener {
private var cursorFilter: String? = null
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListLoader.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListLoader.kt
index 4bfacb84a..35d0f56a7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListLoader.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/fragments/ContactSelectionListLoader.kt
@@ -4,7 +4,7 @@ import android.content.Context
import network.loki.messenger.R
import org.thoughtcrime.securesms.loki.utilities.Contact
import org.thoughtcrime.securesms.loki.utilities.ContactUtilities
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.AsyncLoader
sealed class ContactSelectionListItem {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupsProtocol.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupsProtocol.kt
index 0bd88f35f..803c58764 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupsProtocol.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupsProtocol.kt
@@ -6,13 +6,13 @@ import com.google.protobuf.ByteString
import nl.komponents.kovenant.Promise
import nl.komponents.kovenant.deferred
import org.thoughtcrime.securesms.ApplicationContext
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.loki.api.LokiPushNotificationManager
import org.thoughtcrime.securesms.loki.api.LokiPushNotificationManager.ClosedGroupOperation
import org.thoughtcrime.securesms.loki.utilities.recipient
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.sms.IncomingGroupMessage
import org.thoughtcrime.securesms.sms.IncomingTextMessage
import org.thoughtcrime.securesms.sms.MessageSender
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/NullMessageSendJob.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/NullMessageSendJob.kt
index b13269bdc..43b79e31e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/NullMessageSendJob.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/NullMessageSendJob.kt
@@ -3,13 +3,13 @@ package org.thoughtcrime.securesms.loki.protocol
import com.google.protobuf.ByteString
import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.jobmanager.Data
import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
import org.thoughtcrime.securesms.jobs.BaseJob
import org.thoughtcrime.securesms.logging.Log
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.session.libsignal.service.api.push.SignalServiceAddress
import org.session.libsignal.service.internal.push.SignalServiceProtos
import org.session.libsignal.service.loki.protocol.meta.TTLUtilities
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt
index 47a2aed59..94a28e0af 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt
@@ -2,11 +2,11 @@ package org.thoughtcrime.securesms.loki.protocol
import android.content.Context
import org.thoughtcrime.securesms.ApplicationContext
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.RecipientDatabase
import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.session.libsignal.service.api.messages.SignalServiceContent
import org.session.libsignal.service.api.messages.SignalServiceDataMessage
@@ -56,7 +56,7 @@ object SessionMetaProtocol {
val recipient = Recipient.from(context, Address.fromSerialized(content.sender), false)
if (recipient.profileKey == null || !MessageDigest.isEqual(recipient.profileKey, message.profileKey.get())) {
database.setProfileKey(recipient, message.profileKey.get())
- database.setUnidentifiedAccessMode(recipient, RecipientDatabase.UnidentifiedAccessMode.UNKNOWN)
+ database.setUnidentifiedAccessMode(recipient, Recipient.UnidentifiedAccessMode.UNKNOWN)
val url = content.senderProfilePictureURL.or("")
ApplicationContext.getInstance(context).jobManager.add(RetrieveProfileAvatarJob(recipient, url))
val userMasterPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(context)
@@ -71,7 +71,8 @@ object SessionMetaProtocol {
*/
@JvmStatic
fun canUserReplyToNotification(recipient: Recipient): Boolean {
- return !recipient.address.isRSSFeed
+ // TODO return !recipient.address.isRSSFeed
+ return true
}
@JvmStatic
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/SessionResetImplementation.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/SessionResetImplementation.kt
index d8675e727..2ad11a951 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/SessionResetImplementation.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/SessionResetImplementation.kt
@@ -2,9 +2,9 @@ package org.thoughtcrime.securesms.loki.protocol
import android.content.Context
import org.thoughtcrime.securesms.ApplicationContext
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.sms.OutgoingTextMessage
import org.session.libsignal.libsignal.loki.SessionResetProtocol
import org.session.libsignal.libsignal.loki.SessionResetStatus
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/ContactUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/ContactUtilities.kt
index 0d06872af..4aaa05cac 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/ContactUtilities.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/ContactUtilities.kt
@@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.loki.utilities
import android.content.Context
import org.thoughtcrime.securesms.database.DatabaseFactory
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.session.libsignal.service.loki.protocol.shelved.multidevice.MultiDeviceProtocol
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/NotificationUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/NotificationUtilities.kt
index 2b98a4bc3..ca0e711d9 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/NotificationUtilities.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/NotificationUtilities.kt
@@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.loki.utilities
import android.content.Context
import org.thoughtcrime.securesms.database.DatabaseFactory
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
fun getOpenGroupDisplayName(recipient: Recipient, threadRecipient: Recipient, context: Context): String {
val threadID = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(threadRecipient)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/ProfilePictureModifiedEvent.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/ProfilePictureModifiedEvent.kt
index a05676ef6..f12e4482c 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/ProfilePictureModifiedEvent.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/ProfilePictureModifiedEvent.kt
@@ -1,5 +1,5 @@
package org.thoughtcrime.securesms.loki.utilities
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
data class ProfilePictureModifiedEvent(val recipient: Recipient)
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/RecipientUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/RecipientUtilities.kt
index 0b6d5eee4..18a5f4409 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/RecipientUtilities.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/utilities/RecipientUtilities.kt
@@ -1,8 +1,8 @@
package org.thoughtcrime.securesms.loki.utilities
import android.content.Context
-import org.thoughtcrime.securesms.database.Address
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.Address
+import org.session.libsession.messaging.threads.recipients.Recipient
fun recipient(context: Context, publicKey: String): Recipient {
return Recipient.from(context, Address.fromSerialized(publicKey), false)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/views/ProfilePictureView.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/views/ProfilePictureView.kt
index 573e64798..599c3557c 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/views/ProfilePictureView.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/views/ProfilePictureView.kt
@@ -11,11 +11,11 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
import kotlinx.android.synthetic.main.view_profile_picture.view.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto
-import org.thoughtcrime.securesms.database.Address
+import org.session.libsession.messaging.threads.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.loki.utilities.AvatarPlaceholderGenerator
import org.thoughtcrime.securesms.mms.GlideRequests
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.session.libsignal.service.loki.protocol.mentions.MentionsManager
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/views/SessionRestoreBannerView.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/views/SessionRestoreBannerView.kt
index b5fcabc10..0c164b88d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/views/SessionRestoreBannerView.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/views/SessionRestoreBannerView.kt
@@ -8,7 +8,7 @@ import android.widget.LinearLayout
import kotlinx.android.synthetic.main.session_restore_banner.view.*
import network.loki.messenger.R
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
class SessionRestoreBannerView : LinearLayout {
lateinit var recipient: Recipient
diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/views/UserView.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/views/UserView.kt
index 4f82336aa..4c6098a71 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/loki/views/UserView.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/loki/views/UserView.kt
@@ -11,7 +11,7 @@ import network.loki.messenger.R
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.loki.utilities.MentionManagerUtilities
import org.thoughtcrime.securesms.mms.GlideRequests
-import org.thoughtcrime.securesms.recipients.Recipient
+import org.session.libsession.messaging.threads.recipients.Recipient
class UserView : LinearLayout {
var openGroupThreadID: Long = -1 // FIXME: This is a bit ugly
diff --git a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageActivity.java b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageActivity.java
index 414042636..9ea6a235d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageActivity.java
@@ -22,9 +22,9 @@ import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
import org.thoughtcrime.securesms.components.ConversationItemFooter;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.Util;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerFolderFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerFolderFragment.java
index 681dd029d..f670f9aab 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerFolderFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerFolderFragment.java
@@ -20,7 +20,7 @@ import android.view.ViewGroup;
import android.view.WindowManager;
import org.thoughtcrime.securesms.mms.GlideApp;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.session.libsignal.libsignal.util.guava.Optional;
import network.loki.messenger.R;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java
index 045b3fdf1..d3834a919 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivity.java
@@ -22,11 +22,11 @@ import androidx.lifecycle.ViewModelProvider;
import org.session.libsignal.libsignal.util.guava.Optional;
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.providers.BlobProvider;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.scribbles.ImageEditorFragment;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.Util;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java
index 71996dde8..1a084a74e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendFragment.java
@@ -41,7 +41,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mediapreview.MediaRailAdapter;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.providers.BlobProvider;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.scribbles.ImageEditorFragment;
import org.thoughtcrime.securesms.util.CharacterCalculator.CharacterState;
import org.thoughtcrime.securesms.util.MediaUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java
index bf6ddd8c9..eb1a990b8 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java
@@ -53,7 +53,7 @@ import org.thoughtcrime.securesms.mediasend.MediaSendActivity;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.providers.DeprecatedPersistentBlobProvider;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.BitmapUtil;
import org.thoughtcrime.securesms.util.ExternalStorageUtil;
import org.thoughtcrime.securesms.util.FileProviderUtil;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMediaMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMediaMessage.java
index 779a46014..e101c7c63 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMediaMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMediaMessage.java
@@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.mms;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.attachments.PointerAttachment;
import org.thoughtcrime.securesms.contactshare.Contact;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.session.libsignal.libsignal.util.guava.Optional;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java
index 3951cb0aa..c48f751bb 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java
@@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.mms;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.database.ThreadDatabase;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import java.util.Collections;
import java.util.LinkedList;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingGroupMediaMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingGroupMediaMessage.java
index f86a48d1a..442a207a3 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingGroupMediaMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingGroupMediaMessage.java
@@ -7,7 +7,7 @@ import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.contactshare.Contact;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.Base64;
import org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMediaMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMediaMessage.java
index cb5252a65..42275f8aa 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMediaMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMediaMessage.java
@@ -9,7 +9,7 @@ import org.thoughtcrime.securesms.contactshare.Contact;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import java.util.LinkedList;
import java.util.List;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingSecureMediaMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingSecureMediaMessage.java
index 8332c0657..a67a7e596 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingSecureMediaMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingSecureMediaMessage.java
@@ -6,7 +6,7 @@ import androidx.annotation.Nullable;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.contactshare.Contact;
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import java.util.Collections;
import java.util.List;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java b/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java
index c16bb44d9..e82332c31 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java
@@ -7,8 +7,8 @@ import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import org.thoughtcrime.securesms.attachments.Attachment;
-import org.thoughtcrime.securesms.attachments.AttachmentId;
+import org.session.libsession.messaging.sending_receiving.attachments.Attachment;
+import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.providers.BlobProvider;
import org.thoughtcrime.securesms.providers.DeprecatedPersistentBlobProvider;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/PartUriParser.java b/app/src/main/java/org/thoughtcrime/securesms/mms/PartUriParser.java
index ca2239326..8a81d6e00 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/PartUriParser.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/PartUriParser.java
@@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.mms;
import android.content.ContentUris;
import android.net.Uri;
-import org.thoughtcrime.securesms.attachments.AttachmentId;
+import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId;
public class PartUriParser {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/QuoteId.java b/app/src/main/java/org/thoughtcrime/securesms/mms/QuoteId.java
index 929c52760..11f19d820 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/QuoteId.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/QuoteId.java
@@ -5,7 +5,7 @@ import androidx.annotation.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.logging.Log;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java b/app/src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java
index 953f0a5c0..d2ffb8bb8 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java
@@ -4,7 +4,7 @@ package org.thoughtcrime.securesms.mms;
import androidx.annotation.Nullable;
import org.thoughtcrime.securesms.attachments.Attachment;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import java.util.List;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/AbstractNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/AbstractNotificationBuilder.java
index 32a14ccc7..fa4849422 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/AbstractNotificationBuilder.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/AbstractNotificationBuilder.java
@@ -13,7 +13,7 @@ import android.text.TextUtils;
import network.loki.messenger.R;
import org.thoughtcrime.securesms.database.RecipientDatabase;
import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPreference;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/AndroidAutoReplyReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/AndroidAutoReplyReceiver.java
index 273c2d144..8fe847cc3 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/AndroidAutoReplyReceiver.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/AndroidAutoReplyReceiver.java
@@ -26,11 +26,11 @@ import android.os.Bundle;
import androidx.core.app.RemoteInput;
import org.thoughtcrime.securesms.ApplicationContext;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
import org.session.libsignal.libsignal.logging.Log;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java
index cc585e52a..dfae6ef5e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java
@@ -38,6 +38,10 @@ import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import android.text.TextUtils;
+import org.jetbrains.annotations.NotNull;
+import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier;
+import org.session.libsignal.service.api.messages.SignalServiceGroup;
+import org.session.libsignal.service.internal.push.SignalServiceProtos;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.contactshare.Contact;
import org.thoughtcrime.securesms.contactshare.ContactUtil;
@@ -53,7 +57,7 @@ import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.loki.protocol.SessionMetaProtocol;
import org.thoughtcrime.securesms.loki.utilities.MentionUtilities;
import org.thoughtcrime.securesms.mms.SlideDeck;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.service.IncomingMessageObserver;
import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.util.ServiceUtil;
@@ -61,6 +65,7 @@ import org.thoughtcrime.securesms.util.SpanUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.session.libsignal.service.internal.util.Util;
+import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.ListIterator;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java
index 08592cbef..a5735f742 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java
@@ -12,7 +12,7 @@ import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.ApplicationContext;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.ExpirationInfo;
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/MessageNotifier.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/MessageNotifier.java
deleted file mode 100644
index 7de28dfde..000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MessageNotifier.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.thoughtcrime.securesms.notifications;
-
-import android.content.Context;
-
-import org.thoughtcrime.securesms.recipients.Recipient;
-
-import androidx.annotation.NonNull;
-
-public interface MessageNotifier {
- void setVisibleThread(long threadId);
- void setLastDesktopActivityTimestamp(long timestamp);
- void notifyMessageDeliveryFailed(Context context, Recipient recipient, long threadId);
- void cancelDelayedNotifications();
- void updateNotification(@NonNull Context context);
- void updateNotification(@NonNull Context context, long threadId);
- void updateNotification(@NonNull Context context, long threadId, boolean signal);
- void updateNotification(@androidx.annotation.NonNull Context context, boolean signal, int reminderCount);
- void clearReminder(@NonNull Context context);
-}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java
index 11e57af36..e51529c9e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java
@@ -12,7 +12,7 @@ import android.text.SpannableStringBuilder;
import org.thoughtcrime.securesms.loki.activities.HomeActivity;
import org.thoughtcrime.securesms.loki.utilities.NotificationUtilities;
import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPreference;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java
index ab3bf457f..5926f95db 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java
@@ -22,11 +22,11 @@ import com.annimon.stream.Stream;
import network.loki.messenger.BuildConfig;
import network.loki.messenger.R;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.RecipientDatabase;
import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.session.libsignal.libsignal.logging.Log;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationItem.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationItem.java
index 7ffa4d185..63b11231c 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationItem.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationItem.java
@@ -10,7 +10,7 @@ import androidx.core.app.TaskStackBuilder;
import org.thoughtcrime.securesms.conversation.ConversationActivity;
import org.thoughtcrime.securesms.mms.SlideDeck;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
public class NotificationItem {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java
index 6200ff038..1e9c5b404 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java
@@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.conversation.ConversationActivity;
import org.thoughtcrime.securesms.conversation.ConversationPopupActivity;
import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import java.util.LinkedHashSet;
import java.util.LinkedList;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/OptimizedMessageNotifier.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/OptimizedMessageNotifier.java
index 15e656c07..12aabaf32 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/OptimizedMessageNotifier.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/OptimizedMessageNotifier.java
@@ -6,12 +6,18 @@ import android.os.Looper;
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
+import org.jetbrains.annotations.NotNull;
+import org.session.libsignal.service.api.messages.SignalServiceGroup;
+import org.session.libsignal.service.internal.push.SignalServiceProtos;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.loki.api.PublicChatManager;
-import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.Debouncer;
import org.session.libsignal.service.loki.api.Poller;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier;
+
+import java.util.Collection;
import java.util.concurrent.TimeUnit;
public class OptimizedMessageNotifier implements MessageNotifier {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java
index ca92ecc06..211044061 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java
@@ -26,11 +26,11 @@ import android.os.Bundle;
import androidx.core.app.RemoteInput;
import org.thoughtcrime.securesms.ApplicationContext;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.sms.OutgoingEncryptedMessage;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java
index f9e80a34b..577f02962 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java
@@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.notifications;
import android.content.Context;
import androidx.annotation.NonNull;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
public enum ReplyMethod {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java
index 7237cf979..a371e9910 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java
@@ -36,7 +36,7 @@ import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPreference;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.BitmapUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/AvatarHelper.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/AvatarHelper.java
index 5a082f532..e06b58ae0 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/profiles/AvatarHelper.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/AvatarHelper.java
@@ -7,7 +7,7 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import java.io.File;
import java.io.FileInputStream;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java
index c403aef63..658b1b89f 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java
@@ -15,7 +15,7 @@ import android.widget.FrameLayout;
import network.loki.messenger.R;
import org.thoughtcrime.securesms.database.DatabaseFactory;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.ViewUtil;
public class GroupShareProfileView extends FrameLayout {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java
index d3f2a57bf..3428eeb9d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java
@@ -9,8 +9,8 @@ import android.widget.FrameLayout;
import network.loki.messenger.R;
import org.thoughtcrime.securesms.database.DatabaseFactory;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientExporter;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientExporter;
import org.thoughtcrime.securesms.util.ViewUtil;
public class UnknownSenderView extends FrameLayout {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java b/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java
index b9a10d0e2..627b9910f 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java
@@ -27,15 +27,17 @@ import android.os.MemoryFile;
import android.os.ParcelFileDescriptor;
import android.provider.OpenableColumns;
import androidx.annotation.NonNull;
-import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.attachments.AttachmentId;
-import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
+import org.session.libsignal.libsignal.logging.Log;
+
+import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId;
+import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment;
+import org.session.libsession.utilities.Util;
+
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.mms.PartUriParser;
import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.util.MemoryFileUtil;
-import org.thoughtcrime.securesms.util.Util;
import java.io.FileNotFoundException;
import java.io.IOException;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java
index 4b1b653cc..f6fdc531a 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java
@@ -36,7 +36,7 @@ import org.thoughtcrime.securesms.contacts.avatars.GroupRecordContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.SystemContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.TransparentContactPhoto;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.RecipientDatabase.RecipientSettings;
@@ -46,7 +46,7 @@ import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.loki.utilities.ProfilePictureModifiedEvent;
import org.thoughtcrime.securesms.notifications.NotificationChannels;
-import org.thoughtcrime.securesms.recipients.RecipientProvider.RecipientDetails;
+import org.session.libsession.messaging.threads.recipients.RecipientProvider.RecipientDetails;
import org.thoughtcrime.securesms.util.FutureTaskListener;
import org.thoughtcrime.securesms.util.ListenableFutureTask;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientExporter.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientExporter.java
index d8caceedf..e968fa427 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientExporter.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientExporter.java
@@ -4,7 +4,7 @@ import android.content.Intent;
import android.provider.ContactsContract;
import android.text.TextUtils;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import static android.content.Intent.ACTION_INSERT_OR_EDIT;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientProvider.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientProvider.java
index e8740f78f..fac15b935 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientProvider.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientProvider.java
@@ -24,7 +24,7 @@ import android.text.TextUtils;
import network.loki.messenger.R;
import org.thoughtcrime.securesms.color.MaterialColor;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord;
import org.thoughtcrime.securesms.database.RecipientDatabase.RecipientSettings;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java b/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java
index e7c614099..a8a4600c4 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java
@@ -9,14 +9,14 @@ import android.text.TextUtils;
import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.contacts.ContactAccessor;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.CursorList;
import org.thoughtcrime.securesms.database.MmsSmsColumns;
import org.thoughtcrime.securesms.database.SearchDatabase;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.search.model.MessageResult;
import org.thoughtcrime.securesms.search.model.SearchResult;
import org.thoughtcrime.securesms.util.Stopwatch;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/search/model/MessageResult.java b/app/src/main/java/org/thoughtcrime/securesms/search/model/MessageResult.java
index b93610974..96daeb317 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/search/model/MessageResult.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/search/model/MessageResult.java
@@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.search.model;
import androidx.annotation.NonNull;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
/**
* Represents a search result for a message.
diff --git a/app/src/main/java/org/thoughtcrime/securesms/search/model/SearchResult.java b/app/src/main/java/org/thoughtcrime/securesms/search/model/SearchResult.java
index 66d00a842..2bcab9f0f 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/search/model/SearchResult.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/search/model/SearchResult.java
@@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.database.CursorList;
import org.thoughtcrime.securesms.database.model.ThreadRecord;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import java.util.List;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/DirectShareService.java b/app/src/main/java/org/thoughtcrime/securesms/service/DirectShareService.java
index 7604bb08f..61eb9d6cd 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/DirectShareService.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/DirectShareService.java
@@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.GlideApp;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.util.BitmapUtil;
import java.util.LinkedList;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java
index ab0c01f87..eb478dfa2 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java
@@ -1,19 +1,31 @@
package org.thoughtcrime.securesms.service;
import android.content.Context;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.session.libsession.messaging.threads.Address;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.utilities.SSKEnvironment;
+import org.session.libsignal.libsignal.util.guava.Optional;
+import org.session.libsignal.service.api.messages.SignalServiceGroup;
+import org.session.libsignal.service.internal.push.SignalServiceProtos;
+import org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MmsDatabase;
import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.database.model.MessageRecord;
+import org.thoughtcrime.securesms.mms.IncomingMediaMessage;
+import org.thoughtcrime.securesms.mms.MmsException;
import java.util.Comparator;
import java.util.TreeSet;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
-public class ExpiringMessageManager {
+public class ExpiringMessageManager implements SSKEnvironment.MessageExpirationManagerProtocol {
private static final String TAG = ExpiringMessageManager.class.getSimpleName();
@@ -52,6 +64,45 @@ public class ExpiringMessageManager {
}
}
+ @Override
+ public void setExpirationTimer(@Nullable Long messageID, int duration, @NotNull String senderPublicKey, @NotNull SignalServiceProtos.Content content) {
+ try {
+ MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
+ Address address = Address.Companion.fromSerialized(senderPublicKey);
+ Recipient recipient = Recipient.from(context, address, false);
+ Optional groupInfo = Optional.absent();
+ if (content.getDataMessage().hasGroup()) {
+ GroupContext groupContext = content.getDataMessage().getGroup();
+ groupInfo = Optional.of(new SignalServiceGroup(groupContext.getId().toByteArray(), SignalServiceGroup.GroupType.SIGNAL));
+ }
+ IncomingMediaMessage mediaMessage = new IncomingMediaMessage(address, content.getDataMessage().getTimestamp(), -1,
+ duration * 1000L, true,
+ false,
+ Optional.absent(),
+ groupInfo,
+ Optional.absent(),
+ Optional.absent(),
+ Optional.absent(),
+ Optional.absent(),
+ Optional.absent());
+
+ database.insertSecureDecryptedMessageInbox(mediaMessage, -1);
+
+ DatabaseFactory.getRecipientDatabase(context).setExpireMessages(recipient, duration);
+
+ if (messageID != null) {
+ DatabaseFactory.getSmsDatabase(context).deleteMessage(messageID);
+ }
+ } catch (MmsException e) {
+ Log.e("Loki", "Failed to insert expiration update message.");
+ }
+ }
+
+ @Override
+ public void disableExpirationTimer(@Nullable Long messageID, @NotNull String senderPublicKey, @NotNull SignalServiceProtos.Content content) {
+ setExpirationTimer(messageID, 0, senderPublicKey, content);
+ }
+
private class LoadTask implements Runnable {
public void run() {
SmsDatabase.Reader smsReader = smsDatabase.readerFor(smsDatabase.getExpirationStartedMessages());
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java b/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java
index 56e819cc6..6baeaf601 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java
@@ -7,9 +7,9 @@ import android.text.TextUtils;
import android.widget.Toast;
import network.loki.messenger.R;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
import org.thoughtcrime.securesms.util.Rfc5724Uri;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingJoinedMessage.java b/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingJoinedMessage.java
index 6996559bd..163c10cc9 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingJoinedMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingJoinedMessage.java
@@ -1,6 +1,6 @@
package org.thoughtcrime.securesms.sms;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.session.libsignal.libsignal.util.guava.Optional;
import org.session.libsignal.service.api.messages.SignalServiceGroup;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingTextMessage.java b/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingTextMessage.java
index d063064ba..af8c72003 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingTextMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingTextMessage.java
@@ -7,7 +7,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.telephony.SmsMessage;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.session.libsignal.libsignal.util.guava.Optional;
import org.session.libsignal.service.api.messages.SignalServiceGroup;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java
index 551f24d6d..515271f8e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java
@@ -21,7 +21,7 @@ import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.attachments.Attachment;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.AttachmentDatabase;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId;
@@ -42,7 +42,7 @@ import org.thoughtcrime.securesms.jobs.SmsSendJob;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.MmsException;
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.thoughtcrime.securesms.service.ExpiringMessageManager;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.session.libsignal.libsignal.util.guava.Optional;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingEncryptedMessage.java b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingEncryptedMessage.java
index 9f2bfcb87..21c3a6186 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingEncryptedMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingEncryptedMessage.java
@@ -1,6 +1,6 @@
package org.thoughtcrime.securesms.sms;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
public class OutgoingEncryptedMessage extends OutgoingTextMessage {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingIdentityDefaultMessage.java b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingIdentityDefaultMessage.java
index 30bc27a27..14531ef24 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingIdentityDefaultMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingIdentityDefaultMessage.java
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.sms;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
public class OutgoingIdentityDefaultMessage extends OutgoingTextMessage {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingIdentityVerifiedMessage.java b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingIdentityVerifiedMessage.java
index 23d83334c..a0a580674 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingIdentityVerifiedMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingIdentityVerifiedMessage.java
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.sms;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
public class OutgoingIdentityVerifiedMessage extends OutgoingTextMessage {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingKeyExchangeMessage.java b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingKeyExchangeMessage.java
index 557814c89..9737866a9 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingKeyExchangeMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingKeyExchangeMessage.java
@@ -1,6 +1,6 @@
package org.thoughtcrime.securesms.sms;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
public class OutgoingKeyExchangeMessage extends OutgoingTextMessage {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingTextMessage.java b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingTextMessage.java
index e74cb8ff9..76fe05166 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingTextMessage.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/sms/OutgoingTextMessage.java
@@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.sms;
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
public class OutgoingTextMessage {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sskenvironment/ProfileManager.kt b/app/src/main/java/org/thoughtcrime/securesms/sskenvironment/ProfileManager.kt
new file mode 100644
index 000000000..53781d1ab
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/sskenvironment/ProfileManager.kt
@@ -0,0 +1,33 @@
+package org.thoughtcrime.securesms.sskenvironment
+
+import android.content.Context
+import org.session.libsession.messaging.threads.recipients.Recipient
+import org.session.libsession.utilities.SSKEnvironment
+import org.thoughtcrime.securesms.ApplicationContext
+import org.thoughtcrime.securesms.database.DatabaseFactory
+import org.thoughtcrime.securesms.database.RecipientDatabase
+import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob
+
+class ProfileManager: SSKEnvironment.ProfileManagerProtocol {
+ override fun setDisplayName(context: Context, recipient: Recipient, displayName: String) {
+ DatabaseFactory.getLokiUserDatabase(context).setDisplayName(recipient.address.serialize(), displayName)
+ }
+
+ override fun setProfilePictureURL(context: Context, recipient: Recipient, profilePictureURL: String) {
+ ApplicationContext.getInstance(context).jobManager.add(RetrieveProfileAvatarJob(recipient, profilePictureURL))
+ }
+
+ override fun setProfileKey(context: Context, recipient: Recipient, profileKey: ByteArray) {
+ val database = DatabaseFactory.getRecipientDatabase(context)
+ database.setProfileKey(recipient, profileKey)
+ }
+
+ override fun setUnidentifiedAccessMode(context: Context, recipient: Recipient, unidentifiedAccessMode: Recipient.UnidentifiedAccessMode) {
+ val database = DatabaseFactory.getRecipientDatabase(context)
+ database.setUnidentifiedAccessMode(recipient, unidentifiedAccessMode)
+ }
+
+ override fun updateOpenGroupProfilePicturesIfNeeded(context: Context) {
+ ApplicationContext.getInstance(context).updateOpenGroupProfilePicturesIfNeeded()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/sskenvironment/ReadReceiptManager.kt b/app/src/main/java/org/thoughtcrime/securesms/sskenvironment/ReadReceiptManager.kt
new file mode 100644
index 000000000..1cf1af596
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/sskenvironment/ReadReceiptManager.kt
@@ -0,0 +1,23 @@
+package org.thoughtcrime.securesms.sskenvironment
+
+import android.content.Context
+import org.session.libsession.messaging.threads.Address
+import org.session.libsession.utilities.SSKEnvironment
+import org.session.libsession.utilities.TextSecurePreferences
+import org.session.libsignal.libsignal.logging.Log
+import org.thoughtcrime.securesms.database.DatabaseFactory
+import org.thoughtcrime.securesms.database.MessagingDatabase.SyncMessageId
+
+class ReadReceiptManager: SSKEnvironment.ReadReceiptManagerProtocol {
+ override fun processReadReceipts(context: Context, fromRecipientId: String, sentTimestamps: List, readTimestamp: Long) {
+ if (TextSecurePreferences.isReadReceiptsEnabled(context)) {
+
+ // Redirect message to master device conversation
+ var address = Address.fromSerialized(fromRecipientId)
+ for (timestamp in sentTimestamps) {
+ Log.i("Loki", "Received encrypted read receipt: (XXXXX, $timestamp)")
+ DatabaseFactory.getMmsSmsDatabase(context).incrementReadReceiptCount(SyncMessageId(address, timestamp), readTimestamp)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusRepository.java b/app/src/main/java/org/thoughtcrime/securesms/sskenvironment/TypingStatusRepository.java
similarity index 77%
rename from app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusRepository.java
rename to app/src/main/java/org/thoughtcrime/securesms/sskenvironment/TypingStatusRepository.java
index 96671d790..8361ef1b7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusRepository.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/sskenvironment/TypingStatusRepository.java
@@ -1,4 +1,4 @@
-package org.thoughtcrime.securesms.components;
+package org.thoughtcrime.securesms.sskenvironment;
import android.annotation.SuppressLint;
import androidx.lifecycle.LiveData;
@@ -9,10 +9,13 @@ import androidx.annotation.NonNull;
import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
-import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.util.TextSecurePreferences;
-import org.thoughtcrime.securesms.util.Util;
+import org.jetbrains.annotations.NotNull;
+import org.session.libsession.messaging.threads.Address;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.utilities.SSKEnvironment;
+import org.session.libsession.utilities.TextSecurePreferences;
+import org.session.libsession.utilities.Util;
+import org.session.libsignal.libsignal.logging.Log;
import java.util.ArrayList;
import java.util.Collections;
@@ -24,7 +27,7 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
@SuppressLint("UseSparseArrays")
-public class TypingStatusRepository {
+public class TypingStatusRepository implements SSKEnvironment.TypingIndicatorsProtocol {
private static final String TAG = TypingStatusRepository.class.getSimpleName();
@@ -42,13 +45,14 @@ public class TypingStatusRepository {
this.threadsNotifier = new MutableLiveData<>();
}
- public synchronized void onTypingStarted(@NonNull Context context, long threadId, @NonNull Recipient author, int device) {
- if (author.getAddress().serialize().equals(TextSecurePreferences.getLocalNumber(context))) {
+ @Override
+ public synchronized void didReceiveTypingStartedMessage(@NotNull Context context, long threadId, @NotNull Address author, int device) {
+ if (author.serialize().equals(TextSecurePreferences.getLocalNumber(context))) {
return;
}
Set typists = Util.getOrDefault(typistMap, threadId, new LinkedHashSet<>());
- Typist typist = new Typist(author, device, threadId);
+ Typist typist = new Typist(Recipient.from(context, author, false), device, threadId);
if (!typists.contains(typist)) {
typists.add(typist);
@@ -61,18 +65,19 @@ public class TypingStatusRepository {
Util.cancelRunnableOnMain(timer);
}
- timer = () -> onTypingStopped(context, threadId, author, device, false);
+ timer = () -> didReceiveTypingStoppedMessage(context, threadId, author, device, false);
Util.runOnMainDelayed(timer, RECIPIENT_TYPING_TIMEOUT);
timers.put(typist, timer);
}
- public synchronized void onTypingStopped(@NonNull Context context, long threadId, @NonNull Recipient author, int device, boolean isReplacedByIncomingMessage) {
- if (author.getAddress().serialize().equals(TextSecurePreferences.getLocalNumber(context))) {
+ @Override
+ public synchronized void didReceiveTypingStoppedMessage(@NotNull Context context, long threadId, @NotNull Address author, int device, boolean isReplacedByIncomingMessage) {
+ if (author.serialize().equals(TextSecurePreferences.getLocalNumber(context))) {
return;
}
Set typists = Util.getOrDefault(typistMap, threadId, new LinkedHashSet<>());
- Typist typist = new Typist(author, device, threadId);
+ Typist typist = new Typist(Recipient.from(context, author, false), device, threadId);
if (typists.contains(typist)) {
typists.remove(typist);
@@ -90,6 +95,11 @@ public class TypingStatusRepository {
}
}
+ @Override
+ public synchronized void didReceiveIncomingMessage(@NotNull Context context, long threadId, @NotNull Address author, int device) {
+ didReceiveTypingStoppedMessage(context, threadId, author, device, true);
+ }
+
public synchronized LiveData getTypists(long threadId) {
MutableLiveData notifier = Util.getOrDefault(notifiers, threadId, new MutableLiveData<>());
notifiers.put(threadId, notifier);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java b/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java
index 4249c27bb..e201e683a 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java
@@ -16,10 +16,10 @@ import android.widget.Toast;
import org.thoughtcrime.securesms.conversation.ConversationActivity;
import network.loki.messenger.R;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.permissions.Permissions;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
public class CommunicationActions {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java
index efd177a76..5dcfeb62d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java
@@ -7,13 +7,13 @@ import androidx.annotation.WorkerThread;
import com.google.protobuf.ByteString;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
+import org.session.libsession.messaging.threads.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.RecipientModifiedListener;
import org.session.libsignal.libsignal.util.guava.Optional;
import org.session.libsignal.service.api.messages.SignalServiceGroup;
@@ -167,7 +167,7 @@ public class GroupUtil {
}
private Recipient toRecipient(String hexEncodedPublicKey) {
- Address address = Address.fromSerialized(hexEncodedPublicKey);
+ Address address = Address.Companion.fromSerialized(hexEncodedPublicKey);
return Recipient.from(context, address, false);
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java
index c603abe95..401777906 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java
@@ -11,7 +11,7 @@ import android.widget.ImageButton;
import android.widget.TextView;
import network.loki.messenger.R;
-import org.thoughtcrime.securesms.recipients.Recipient;
+import org.session.libsession.messaging.threads.recipients.Recipient;
import org.session.libsignal.libsignal.util.guava.Optional;
import java.util.Collection;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/Util.java b/app/src/main/java/org/thoughtcrime/securesms/util/Util.java
index 01dcb02a1..f5bc2f548 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/Util.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/Util.java
@@ -41,7 +41,7 @@ import android.text.style.StyleSpan;
import com.google.android.mms.pdu_alt.EncodedStringValue;
import org.thoughtcrime.securesms.components.ComposeText;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mms.OutgoingLegacyMmsConnection;
import org.session.libsignal.libsignal.util.guava.Optional;
@@ -208,9 +208,8 @@ public class Util {
public static boolean isOwnNumber(Context context, Address address) {
if (address.isGroup()) return false;
- if (address.isEmail()) return false;
- return TextSecurePreferences.getLocalNumber(context).equals(address.toPhoneString());
+ return TextSecurePreferences.getLocalNumber(context).equals(address.serialize());
}
public static void readFully(InputStream in, byte[] buffer) throws IOException {
diff --git a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientExporterTest.java b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientExporterTest.java
index d92a16134..5cf7df5da 100644
--- a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientExporterTest.java
+++ b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientExporterTest.java
@@ -9,7 +9,7 @@ import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import static android.provider.ContactsContract.Intents.Insert.EMAIL;
import static android.provider.ContactsContract.Intents.Insert.NAME;
diff --git a/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt b/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt
index 1df7403d7..6de13761c 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt
+++ b/libsession/src/main/java/org/session/libsession/messaging/StorageProtocol.kt
@@ -1,6 +1,7 @@
package org.session.libsession.messaging
+import android.content.Context
import android.net.Uri
import org.session.libsession.messaging.jobs.AttachmentUploadJob
import org.session.libsession.messaging.jobs.Job
@@ -18,12 +19,14 @@ import org.session.libsession.messaging.threads.recipients.Recipient.RecipientSe
import org.session.libsignal.libsignal.ecc.ECKeyPair
import org.session.libsignal.libsignal.ecc.ECPrivateKey
import org.session.libsignal.service.api.messages.SignalServiceAttachmentPointer
+import org.session.libsignal.service.api.messages.SignalServiceGroup
+import org.session.libsignal.service.internal.push.SignalServiceProtos
interface StorageProtocol {
// General
fun getUserPublicKey(): String?
- fun getUserKeyPair(): ECKeyPair?
+ fun getUserKeyPair(): Pair?
fun getUserDisplayName(): String?
fun getUserProfileKey(): ByteArray?
fun getUserProfilePictureURL(): String?
@@ -34,10 +37,6 @@ interface StorageProtocol {
fun getOrGenerateRegistrationID(): Int
- // Shared Sender Keys
- fun getClosedGroupPrivateKey(publicKey: String): ECPrivateKey?
- fun isClosedGroup(publicKey: String): Boolean
-
// Jobs
fun persist(job: Job)
fun markJobAsSucceeded(job: Job)
@@ -97,6 +96,11 @@ interface StorageProtocol {
fun setActive(groupID: String, value: Boolean)
fun removeMember(groupID: String, member: Address)
fun updateMembers(groupID: String, members: List)
+ // Closed Group
+ fun insertIncomingInfoMessage(context: Context, senderPublicKey: String, groupID: String, type0: SignalServiceProtos.GroupContext.Type, type1: SignalServiceGroup.Type,
+ name: String, members: Collection, admins: Collection)
+ fun insertOutgoingInfoMessage(context: Context, groupID: String, type: SignalServiceProtos.GroupContext.Type, name: String,
+ members: Collection, admins: Collection, threadID: Long)
// Settings
fun setProfileSharing(address: Address, value: Boolean)
diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/signal/IncomingMediaMessage.java b/libsession/src/main/java/org/session/libsession/messaging/messages/signal/IncomingMediaMessage.java
deleted file mode 100644
index 25a17139f..000000000
--- a/libsession/src/main/java/org/session/libsession/messaging/messages/signal/IncomingMediaMessage.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package org.session.libsession.messaging.messages.signal;
-
-import org.session.libsession.messaging.sending_receiving.attachments.Attachment;
-import org.session.libsession.messaging.sending_receiving.attachments.PointerAttachment;
-import org.session.libsession.messaging.sending_receiving.linkpreview.LinkPreview;
-import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel;
-import org.session.libsession.messaging.threads.Address;
-import org.session.libsession.utilities.GroupUtil;
-import org.session.libsignal.libsignal.util.guava.Optional;
-import org.session.libsignal.service.api.messages.SignalServiceAttachment;
-import org.session.libsignal.service.api.messages.SignalServiceGroup;
-import org.session.libsession.messaging.sending_receiving.contacts.Contact;
-
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-public class IncomingMediaMessage {
-
- private final Address from;
- private final Address groupId;
- private final String body;
- private final boolean push;
- private final long sentTimeMillis;
- private final int subscriptionId;
- private final long expiresIn;
- private final boolean expirationUpdate;
- private final QuoteModel quote;
- private final boolean unidentified;
-
- private final List attachments = new LinkedList<>();
- private final List sharedContacts = new LinkedList<>();
- private final List linkPreviews = new LinkedList<>();
-
- public IncomingMediaMessage(Address from,
- Optional groupId,
- String body,
- long sentTimeMillis,
- List attachments,
- int subscriptionId,
- long expiresIn,
- boolean expirationUpdate,
- boolean unidentified)
- {
- this.from = from;
- this.groupId = groupId.orNull();
- this.sentTimeMillis = sentTimeMillis;
- this.body = body;
- this.push = false;
- this.subscriptionId = subscriptionId;
- this.expiresIn = expiresIn;
- this.expirationUpdate = expirationUpdate;
- this.quote = null;
- this.unidentified = unidentified;
-
- this.attachments.addAll(attachments);
- }
-
- public IncomingMediaMessage(Address from,
- long sentTimeMillis,
- int subscriptionId,
- long expiresIn,
- boolean expirationUpdate,
- boolean unidentified,
- Optional body,
- Optional group,
- Optional> attachments,
- Optional quote,
- Optional> sharedContacts,
- Optional> linkPreviews,
- Optional sticker)
- {
- this.push = true;
- this.from = from;
- this.sentTimeMillis = sentTimeMillis;
- this.body = body.orNull();
- this.subscriptionId = subscriptionId;
- this.expiresIn = expiresIn;
- this.expirationUpdate = expirationUpdate;
- this.quote = quote.orNull();
- this.unidentified = unidentified;
-
- if (group.isPresent()) this.groupId = Address.Companion.fromSerialized(GroupUtil.INSTANCE.getEncodedGroupID(group.get().getGroupId()));
- else this.groupId = null;
-
- this.attachments.addAll(PointerAttachment.forPointers(attachments));
- this.sharedContacts.addAll(sharedContacts.or(Collections.emptyList()));
- this.linkPreviews.addAll(linkPreviews.or(Collections.emptyList()));
-
- if (sticker.isPresent()) {
- this.attachments.add(sticker.get());
- }
- }
-
- public int getSubscriptionId() {
- return subscriptionId;
- }
-
- public String getBody() {
- return body;
- }
-
- public List getAttachments() {
- return attachments;
- }
-
- public Address getFrom() {
- return from;
- }
-
- public Address getGroupId() {
- return groupId;
- }
-
- public boolean isPushMessage() {
- return push;
- }
-
- public boolean isExpirationUpdate() {
- return expirationUpdate;
- }
-
- public long getSentTimeMillis() {
- return sentTimeMillis;
- }
-
- public long getExpiresIn() {
- return expiresIn;
- }
-
- public boolean isGroupMessage() {
- return groupId != null;
- }
-
- public QuoteModel getQuote() {
- return quote;
- }
-
- public List getSharedContacts() {
- return sharedContacts;
- }
-
- public List getLinkPreviews() {
- return linkPreviews;
- }
-
- public boolean isUnidentified() {
- return unidentified;
- }
-}
diff --git a/libsession/src/main/java/org/session/libsession/messaging/opengroups/OpenGroupAPI.kt b/libsession/src/main/java/org/session/libsession/messaging/opengroups/OpenGroupAPI.kt
index be03acc1f..c500f6508 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/opengroups/OpenGroupAPI.kt
+++ b/libsession/src/main/java/org/session/libsession/messaging/opengroups/OpenGroupAPI.kt
@@ -196,7 +196,7 @@ object OpenGroupAPI: DotNetAPI() {
val userKeyPair = storage.getUserKeyPair() ?: throw Error.Generic
val userDisplayName = storage.getUserDisplayName() ?: throw Error.Generic
Thread {
- val signedMessage = message.sign(userKeyPair.privateKey.serialize())
+ val signedMessage = message.sign(userKeyPair.second)
if (signedMessage == null) {
deferred.reject(Error.SigningFailed)
} else {
@@ -212,7 +212,7 @@ object OpenGroupAPI: DotNetAPI() {
format.timeZone = TimeZone.getTimeZone("GMT")
val dateAsString = data["created_at"] as String
val timestamp = format.parse(dateAsString).time
- @Suppress("NAME_SHADOWING") val message = OpenGroupMessage(serverID, userKeyPair.hexEncodedPublicKey, userDisplayName, text, timestamp, openGroupMessageType, message.quote, message.attachments, null, signedMessage.signature, timestamp)
+ @Suppress("NAME_SHADOWING") val message = OpenGroupMessage(serverID, userKeyPair.first, userDisplayName, text, timestamp, openGroupMessageType, message.quote, message.attachments, null, signedMessage.signature, timestamp)
message
} catch (exception: Exception) {
Log.d("Loki", "Couldn't parse message for open group with ID: $channel on server: $server.")
diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverDecryption.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverDecryption.kt
index f4d0cdb84..9ed6870f9 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverDecryption.kt
+++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverDecryption.kt
@@ -3,6 +3,7 @@ package org.session.libsession.messaging.sending_receiving
import org.session.libsession.messaging.MessagingConfiguration
import org.session.libsession.messaging.sending_receiving.MessageReceiver.Error
import org.session.libsession.utilities.AESGCM
+import org.session.libsession.utilities.GroupUtil
import org.whispersystems.curve25519.Curve25519
@@ -38,16 +39,16 @@ object MessageReceiverDecryption {
internal fun decryptWithSharedSenderKeys(envelope: SignalServiceProtos.Envelope): Pair {
// 1. ) Check preconditions
val groupPublicKey = envelope.source
- if (!MessagingConfiguration.shared.storage.isClosedGroup(groupPublicKey)) { throw Error.InvalidGroupPublicKey }
+ if (!GroupUtil.isClosedGroup(groupPublicKey)) { throw Error.InvalidGroupPublicKey }
val data = envelope.content
if (data.count() == 0) { throw Error.NoData }
- val groupPrivateKey = MessagingConfiguration.shared.storage.getClosedGroupPrivateKey(groupPublicKey) ?: throw Error.NoGroupPrivateKey
+ val groupPrivateKey = MessagingConfiguration.shared.sskDatabase.getClosedGroupPrivateKey(groupPublicKey) ?: throw Error.NoGroupPrivateKey
// 2. ) Parse the wrapper
val wrapper = SignalServiceProtos.ClosedGroupCiphertextMessageWrapper.parseFrom(data)
val ivAndCiphertext = wrapper.ciphertext.toByteArray()
val ephemeralPublicKey = wrapper.ephemeralPublicKey.toByteArray()
// 3. ) Decrypt the data inside
- val ephemeralSharedSecret = Curve25519.getInstance(Curve25519.BEST).calculateAgreement(ephemeralPublicKey, groupPrivateKey.serialize())
+ val ephemeralSharedSecret = Curve25519.getInstance(Curve25519.BEST).calculateAgreement(ephemeralPublicKey, groupPrivateKey.toByteArray())
val mac = Mac.getInstance("HmacSHA256")
mac.init(SecretKeySpec("LOKI".toByteArray(), "HmacSHA256"))
val symmetricKey = mac.doFinal(ephemeralSharedSecret)
diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt
index df8f1021b..6f8cca601 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt
+++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageReceiverHandler.kt
@@ -27,6 +27,7 @@ import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsignal.libsignal.logging.Log
import org.session.libsignal.libsignal.util.Hex
import org.session.libsignal.libsignal.util.guava.Optional
+import org.session.libsignal.service.api.messages.SignalServiceGroup
import org.session.libsignal.service.internal.push.SignalServiceProtos
import org.session.libsignal.service.loki.protocol.closedgroups.ClosedGroupRatchet
import org.session.libsignal.service.loki.protocol.closedgroups.ClosedGroupRatchetCollectionType
@@ -38,7 +39,9 @@ import java.util.*
import kotlin.collections.ArrayList
internal fun MessageReceiver.isBlock(publicKey: String): Boolean {
- return SSKEnvironment.shared.blockManager.isRecipientIdBlocked(publicKey)
+ val context = MessagingConfiguration.shared.context
+ val recipient = Recipient.from(context, Address.fromSerialized(publicKey), false)
+ return recipient.isBlocked
}
fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content, openGroupID: String?) {
@@ -46,13 +49,14 @@ fun MessageReceiver.handle(message: Message, proto: SignalServiceProtos.Content,
is ReadReceipt -> handleReadReceipt(message)
is TypingIndicator -> handleTypingIndicator(message)
is ClosedGroupUpdate -> handleClosedGroupUpdate(message)
- is ExpirationTimerUpdate -> handleExpirationTimerUpdate(message)
+ is ExpirationTimerUpdate -> handleExpirationTimerUpdate(message, proto)
is VisibleMessage -> handleVisibleMessage(message, proto, openGroupID)
}
}
private fun MessageReceiver.handleReadReceipt(message: ReadReceipt) {
- SSKEnvironment.shared.readReceiptManager.processReadReceipts(message.sender!!, message.timestamps!!.asList(), message.receivedTimestamp!!)
+ val context = MessagingConfiguration.shared.context
+ SSKEnvironment.shared.readReceiptManager.processReadReceipts(context, message.sender!!, message.timestamps!!.asList(), message.receivedTimestamp!!)
}
private fun MessageReceiver.handleTypingIndicator(message: TypingIndicator) {
@@ -83,20 +87,25 @@ fun MessageReceiver.cancelTypingIndicatorsIfNeeded(senderPublicKey: String) {
SSKEnvironment.shared.typingIndicators.didReceiveIncomingMessage(context, threadID.toLong(), address, 1)
}
-private fun MessageReceiver.handleExpirationTimerUpdate(message: ExpirationTimerUpdate) {
+private fun MessageReceiver.handleExpirationTimerUpdate(message: ExpirationTimerUpdate, proto: SignalServiceProtos.Content) {
if (message.duration!! > 0) {
- setExpirationTimer(message.duration!!, message.sender!!, message.groupPublicKey)
+ setExpirationTimer(message, proto)
} else {
- disableExpirationTimer(message.sender!!, message.groupPublicKey)
+ disableExpirationTimer(message, proto)
}
}
-fun MessageReceiver.setExpirationTimer(duration: Int, senderPublicKey: String, groupPublicKey: String?) {
-
+fun MessageReceiver.setExpirationTimer(message: ExpirationTimerUpdate, proto: SignalServiceProtos.Content) {
+ val id = message.id?.toLong()
+ val duration = message.duration!!
+ val senderPublicKey = message.sender!!
+ SSKEnvironment.shared.messageExpirationManager.setExpirationTimer(id, duration, senderPublicKey, proto)
}
-fun MessageReceiver.disableExpirationTimer(senderPublicKey: String, groupPublicKey: String?) {
-
+fun MessageReceiver.disableExpirationTimer(message: ExpirationTimerUpdate, proto: SignalServiceProtos.Content) {
+ val id = message.id?.toLong()
+ val senderPublicKey = message.sender!!
+ SSKEnvironment.shared.messageExpirationManager.disableExpirationTimer(id, senderPublicKey, proto)
}
fun MessageReceiver.handleVisibleMessage(message: VisibleMessage, proto: SignalServiceProtos.Content, openGroupID: String?) {
@@ -125,14 +134,14 @@ fun MessageReceiver.handleVisibleMessage(message: VisibleMessage, proto: SignalS
// Update the user's local name if the message came from their master device
TextSecurePreferences.setProfileName(context, displayName)
}
- profileManager.setDisplayName(recipient, displayName)
+ profileManager.setDisplayName(context, recipient, displayName)
if (recipient.profileKey == null || !MessageDigest.isEqual(recipient.profileKey, newProfile.profileKey)) {
- profileManager.setProfileKey(recipient, newProfile.profileKey!!)
- profileManager.setUnidentifiedAccessMode(recipient, Recipient.UnidentifiedAccessMode.UNKNOWN)
+ profileManager.setProfileKey(context, recipient, newProfile.profileKey!!)
+ profileManager.setUnidentifiedAccessMode(context, recipient, Recipient.UnidentifiedAccessMode.UNKNOWN)
val url = newProfile.profilePictureURL.orEmpty()
- profileManager.setProfilePictureURL(recipient, url)
+ profileManager.setProfilePictureURL(context, recipient, url)
if (userPublicKey == message.sender) {
- profileManager.updateOpenGroupProfilePicturesIfNeeded()
+ profileManager.updateOpenGroupProfilePicturesIfNeeded(context)
}
}
}
@@ -192,6 +201,7 @@ private fun MessageReceiver.handleClosedGroupUpdate(message: ClosedGroupUpdate)
}
private fun MessageReceiver.handleNewGroup(message: ClosedGroupUpdate) {
+ val context = MessagingConfiguration.shared.context
val storage = MessagingConfiguration.shared.storage
val sskDatabase = MessagingConfiguration.shared.sskDatabase
if (message.kind !is ClosedGroupUpdate.Kind.New) { return }
@@ -241,12 +251,11 @@ private fun MessageReceiver.handleNewGroup(message: ClosedGroupUpdate) {
// Notify the PN server
PushNotificationAPI.performOperation(PushNotificationAPI.ClosedGroupOperation.Subscribe, groupPublicKey, userPublicKey)
// Notify the user
- /* TODO
- insertIncomingInfoMessage(context, senderPublicKey, groupID, SignalServiceProtos.GroupContext.Type.UPDATE, SignalServiceGroup.Type.UPDATE, name, members, admins)
- */
+ storage.insertIncomingInfoMessage(context, message.sender!!, groupID, SignalServiceProtos.GroupContext.Type.UPDATE, SignalServiceGroup.Type.UPDATE, name, members, admins)
}
private fun MessageReceiver.handleGroupUpdate(message: ClosedGroupUpdate) {
+ val context = MessagingConfiguration.shared.context
val storage = MessagingConfiguration.shared.storage
val sskDatabase = MessagingConfiguration.shared.sskDatabase
if (message.kind !is ClosedGroupUpdate.Kind.Info) { return }
@@ -272,6 +281,7 @@ private fun MessageReceiver.handleGroupUpdate(message: ClosedGroupUpdate) {
val oldMembers = group.members.map { it.serialize() }.toSet()
val userPublicKey = storage.getUserPublicKey()!!
val wasUserRemoved = !members.contains(userPublicKey)
+ val wasSenderRemoved = !members.contains(message.sender!!)
if (members.toSet().intersect(oldMembers) != oldMembers.toSet()) {
val allOldRatchets = sskDatabase.getAllClosedGroupRatchets(groupPublicKey, ClosedGroupRatchetCollectionType.Current)
for (pair in allOldRatchets) {
@@ -304,9 +314,9 @@ private fun MessageReceiver.handleGroupUpdate(message: ClosedGroupUpdate) {
storage.updateTitle(groupID, name)
storage.updateMembers(groupID, members.map { Address.fromSerialized(it) })
// Notify the user if needed
- val infoType = if (wasUserRemoved) SignalServiceProtos.GroupContext.Type.QUIT else SignalServiceProtos.GroupContext.Type.UPDATE
- val threadID = storage.getOrCreateThreadIdFor(Address.fromSerialized(groupID))
- // TODO insertOutgoingInfoMessage(context, groupID, infoType, name, members, admins, threadID)
+ val type0 = if (wasSenderRemoved) SignalServiceProtos.GroupContext.Type.QUIT else SignalServiceProtos.GroupContext.Type.UPDATE
+ val type1 = if (wasSenderRemoved) SignalServiceGroup.Type.QUIT else SignalServiceGroup.Type.UPDATE
+ storage.insertIncomingInfoMessage(context, message.sender!!, groupID, type0, type1, name, members, admins)
}
private fun MessageReceiver.handleSenderKeyRequest(message: ClosedGroupUpdate) {
diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderClosedGroup.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderClosedGroup.kt
index 8604c3d49..08ee03d2c 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderClosedGroup.kt
+++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderClosedGroup.kt
@@ -12,6 +12,7 @@ import org.session.libsession.messaging.sending_receiving.notifications.PushNoti
import org.session.libsession.messaging.sending_receiving.MessageSender.Error
import org.session.libsession.messaging.threads.Address
import org.session.libsession.utilities.GroupUtil
+import org.session.libsession.utilities.SSKEnvironment
import org.session.libsignal.libsignal.ecc.Curve
@@ -27,6 +28,7 @@ import java.util.*
fun MessageSender.createClosedGroup(name: String, members: Collection): Promise {
val deferred = deferred()
// Prepare
+ val context = MessagingConfiguration.shared.context
val storage = MessagingConfiguration.shared.storage
val members = members
val userPublicKey = storage.getUserPublicKey()!!
@@ -64,9 +66,7 @@ fun MessageSender.createClosedGroup(name: String, members: Collection):
PushNotificationAPI.performOperation(PushNotificationAPI.ClosedGroupOperation.Subscribe, groupPublicKey, userPublicKey)
// Notify the user
val threadID =storage.getOrCreateThreadIdFor(Address.fromSerialized(groupID))
- /* TODO
- insertOutgoingInfoMessage(context, groupID, GroupContext.Type.UPDATE, name, members, admins, threadID)
- */
+ storage.insertOutgoingInfoMessage(context, groupID, SignalServiceProtos.GroupContext.Type.UPDATE, name, members, admins, threadID)
// Fulfill the promise
deferred.resolve(groupPublicKey)
// Return
@@ -75,6 +75,7 @@ fun MessageSender.createClosedGroup(name: String, members: Collection):
fun MessageSender.update(groupPublicKey: String, members: Collection, name: String): Promise {
val deferred = deferred()
+ val context = MessagingConfiguration.shared.context
val storage = MessagingConfiguration.shared.storage
val userPublicKey = storage.getUserPublicKey()!!
val sskDatabase = MessagingConfiguration.shared.sskDatabase
@@ -197,9 +198,7 @@ fun MessageSender.update(groupPublicKey: String, members: Collection, na
// Notify the user
val infoType = if (isUserLeaving) SignalServiceProtos.GroupContext.Type.QUIT else SignalServiceProtos.GroupContext.Type.UPDATE
val threadID = storage.getOrCreateThreadIdFor(Address.fromSerialized(groupID))
- /* TODO
- insertOutgoingInfoMessage(context, groupID, infoType, name, members, admins, threadID)
- */
+ storage.insertOutgoingInfoMessage(context, groupID, infoType, name, members, admins, threadID)
deferred.resolve(Unit)
return deferred.promise
}
diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderConvenience.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderConvenience.kt
index 4efecc8d1..99d346aef 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderConvenience.kt
+++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSenderConvenience.kt
@@ -27,7 +27,6 @@ fun MessageSender.send(message: Message, address: Address) {
fun MessageSender.sendNonDurably(message: VisibleMessage, attachments: List, address: Address): Promise {
prep(attachments, message)
- // TODO: Deal with attachments
return sendNonDurably(message, address)
}
diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/attachments/DatabaseAttachmentAudioExtras.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/attachments/DatabaseAttachmentAudioExtras.kt
new file mode 100644
index 000000000..f47510c43
--- /dev/null
+++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/attachments/DatabaseAttachmentAudioExtras.kt
@@ -0,0 +1,23 @@
+package org.session.libsession.messaging.sending_receiving.attachments
+
+data class DatabaseAttachmentAudioExtras(
+ val attachmentId: AttachmentId,
+ /** Small amount of normalized audio byte samples to visualise the content (e.g. draw waveform). */
+ val visualSamples: ByteArray,
+ /** Duration of the audio track in milliseconds. May be [DURATION_UNDEFINED] when it is not known. */
+ val durationMs: Long = DURATION_UNDEFINED) {
+
+ companion object {
+ const val DURATION_UNDEFINED = -1L
+ }
+
+ override fun equals(other: Any?): Boolean {
+ return other != null &&
+ other is DatabaseAttachmentAudioExtras &&
+ other.attachmentId == attachmentId
+ }
+
+ override fun hashCode(): Int {
+ return attachmentId.hashCode()
+ }
+}
\ No newline at end of file
diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/notifications/NotificationProtocol.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/notifications/MessageNotifier.kt
similarity index 80%
rename from libsession/src/main/java/org/session/libsession/messaging/sending_receiving/notifications/NotificationProtocol.kt
rename to libsession/src/main/java/org/session/libsession/messaging/sending_receiving/notifications/MessageNotifier.kt
index 293c5f77e..724341524 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/notifications/NotificationProtocol.kt
+++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/notifications/MessageNotifier.kt
@@ -2,8 +2,10 @@ package org.session.libsession.messaging.sending_receiving.notifications
import android.content.Context
import org.session.libsession.messaging.threads.recipients.Recipient
+import org.session.libsignal.service.api.messages.SignalServiceGroup
+import org.session.libsignal.service.internal.push.SignalServiceProtos
-interface NotificationProtocol {
+interface MessageNotifier {
fun setVisibleThread(threadId: Long)
fun setLastDesktopActivityTimestamp(timestamp: Long)
fun notifyMessageDeliveryFailed(context: Context?, recipient: Recipient?, threadId: Long)
diff --git a/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/Recipient.java b/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/Recipient.java
index df5a5fdca..332bfa09d 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/Recipient.java
+++ b/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/Recipient.java
@@ -786,7 +786,7 @@ public class Recipient implements RecipientModifiedListener {
private final UnidentifiedAccessMode unidentifiedAccessMode;
private final boolean forceSmsSelection;
- RecipientSettings(boolean blocked, long muteUntil,
+ public RecipientSettings(boolean blocked, long muteUntil,
@NonNull VibrateState messageVibrateState,
@NonNull VibrateState callVibrateState,
@Nullable Uri messageRingtone,
diff --git a/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/RecipientExporter.java b/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/RecipientExporter.java
index 855ef016d..1fd28e0c1 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/RecipientExporter.java
+++ b/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/RecipientExporter.java
@@ -4,7 +4,7 @@ import android.content.Intent;
import android.provider.ContactsContract;
import android.text.TextUtils;
-import org.thoughtcrime.securesms.database.Address;
+import org.session.libsession.messaging.threads.Address;
import static android.content.Intent.ACTION_INSERT_OR_EDIT;
diff --git a/libsession/src/main/java/org/session/libsession/messaging/utilities/DotNetAPI.kt b/libsession/src/main/java/org/session/libsession/messaging/utilities/DotNetAPI.kt
index 380b2d124..de791f99b 100644
--- a/libsession/src/main/java/org/session/libsession/messaging/utilities/DotNetAPI.kt
+++ b/libsession/src/main/java/org/session/libsession/messaging/utilities/DotNetAPI.kt
@@ -82,7 +82,7 @@ open class DotNetAPI {
private fun requestNewAuthToken(server: String): Promise {
Log.d("Loki", "Requesting auth token for server: $server.")
val userKeyPair = MessagingConfiguration.shared.storage.getUserKeyPair() ?: throw Error.Generic
- val parameters: Map = mapOf( "pubKey" to userKeyPair.hexEncodedPublicKey )
+ val parameters: Map = mapOf( "pubKey" to userKeyPair.first )
return execute(HTTPVerb.GET, server, "loki/v1/get_challenge", false, parameters).map(SnodeAPI.sharedContext) { json ->
try {
val base64EncodedChallenge = json["cipherText64"] as String
@@ -95,7 +95,7 @@ open class DotNetAPI {
serverPublicKey = Hex.fromStringCondensed(hexEncodedServerPublicKey.removing05PrefixIfNeeded())
}
// The challenge is prefixed by the 16 bit IV
- val tokenAsData = DiffieHellman.decrypt(challenge, serverPublicKey, userKeyPair.privateKey.serialize())
+ val tokenAsData = DiffieHellman.decrypt(challenge, serverPublicKey, userKeyPair.second)
val token = tokenAsData.toString(Charsets.UTF_8)
token
} catch (exception: Exception) {
diff --git a/libsession/src/main/java/org/session/libsession/utilities/DelimiterUtil.kt b/libsession/src/main/java/org/session/libsession/utilities/DelimiterUtil.kt
index 5ee2e634e..24ae26575 100644
--- a/libsession/src/main/java/org/session/libsession/utilities/DelimiterUtil.kt
+++ b/libsession/src/main/java/org/session/libsession/utilities/DelimiterUtil.kt
@@ -3,14 +3,17 @@ package org.session.libsession.utilities
import java.util.regex.Pattern
object DelimiterUtil {
+ @JvmStatic
fun escape(value: String, delimiter: Char): String {
return value.replace("" + delimiter, "\\" + delimiter)
}
+ @JvmStatic
fun unescape(value: String, delimiter: Char): String {
return value.replace("\\" + delimiter, "" + delimiter)
}
+ @JvmStatic
fun split(value: String, delimiter: Char): Array {
val regex = "(?, readTimestamp: Long)
+ fun processReadReceipts(context: Context, fromRecipientId: String, sentTimestamps: List, readTimestamp: Long)
}
interface ProfileManagerProtocol {
- fun setDisplayName(recipient: Recipient, displayName: String)
- fun setProfilePictureURL(recipient: Recipient, profilePictureURL: String)
- fun setProfileKey(recipient: Recipient, profileKey: ByteArray)
- fun setUnidentifiedAccessMode(recipient: Recipient, unidentifiedAccessMode: Recipient.UnidentifiedAccessMode)
- fun updateOpenGroupProfilePicturesIfNeeded()
+ fun setDisplayName(context: Context, recipient: Recipient, displayName: String)
+ fun setProfilePictureURL(context: Context, recipient: Recipient, profilePictureURL: String)
+ fun setProfileKey(context: Context, recipient: Recipient, profileKey: ByteArray)
+ fun setUnidentifiedAccessMode(context: Context, recipient: Recipient, unidentifiedAccessMode: Recipient.UnidentifiedAccessMode)
+ fun updateOpenGroupProfilePicturesIfNeeded(context: Context)
+ }
+
+ interface MessageExpirationManagerProtocol {
+ fun setExpirationTimer(messageID: Long?, duration: Int, senderPublicKey: String, content: SignalServiceProtos.Content)
+ fun disableExpirationTimer(messageID: Long?, senderPublicKey: String, content: SignalServiceProtos.Content)
}
companion object {
lateinit var shared: SSKEnvironment
fun configure(typingIndicators: TypingIndicatorsProtocol,
- blockManager: BlockingManagerProtocol,
readReceiptManager: ReadReceiptManagerProtocol,
profileManager: ProfileManagerProtocol,
- notificationManager: NotificationProtocol) {
+ notificationManager: MessageNotifier,
+ messageExpirationManager: MessageExpirationManagerProtocol) {
if (Companion::shared.isInitialized) { return }
- shared = SSKEnvironment(typingIndicators, blockManager, readReceiptManager, profileManager, notificationManager)
+ shared = SSKEnvironment(typingIndicators, readReceiptManager, profileManager, notificationManager, messageExpirationManager)
}
}
}
\ No newline at end of file
diff --git a/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt b/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt
index 180698362..ddabe95b7 100644
--- a/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt
+++ b/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt
@@ -334,6 +334,7 @@ object TextSecurePreferences {
return getBooleanPreference(context, INCOGNITO_KEYBORAD_PREF, true)
}
+ @JvmStatic
fun isReadReceiptsEnabled(context: Context): Boolean {
return getBooleanPreference(context, READ_RECEIPTS_PREF, false)
}
diff --git a/libsession/src/main/java/org/session/libsession/utilities/Util.kt b/libsession/src/main/java/org/session/libsession/utilities/Util.kt
index 533c85599..94da8a8f8 100644
--- a/libsession/src/main/java/org/session/libsession/utilities/Util.kt
+++ b/libsession/src/main/java/org/session/libsession/utilities/Util.kt
@@ -1,8 +1,15 @@
package org.session.libsession.utilities
+import android.content.Context
import android.net.Uri
import android.os.Handler
import android.os.Looper
+import org.session.libsession.messaging.threads.Address
+import org.session.libsignal.libsignal.logging.Log
+import java.io.Closeable
+import java.io.IOException
+import java.io.InputStream
+import java.io.OutputStream
import java.util.*
import java.util.concurrent.ExecutorService
import java.util.concurrent.ThreadPoolExecutor
@@ -16,6 +23,21 @@ object Util {
return Looper.myLooper() == Looper.getMainLooper()
}
+ @JvmStatic
+ @Throws(IOException::class)
+ fun copy(`in`: InputStream, out: OutputStream): Long {
+ val buffer = ByteArray(8192)
+ var read: Int
+ var total: Long = 0
+ while (`in`.read(buffer).also { read = it } != -1) {
+ out.write(buffer, 0, read)
+ total += read.toLong()
+ }
+ `in`.close()
+ out.close()
+ return total
+ }
+
@JvmStatic
fun uri(uri: String?): Uri? {
return if (uri == null) null else Uri.parse(uri)
@@ -27,6 +49,16 @@ object Util {
else getHandler()?.post(runnable)
}
+ @JvmStatic
+ fun runOnMainDelayed(runnable: Runnable, delayMillis: Long) {
+ getHandler()?.postDelayed(runnable, delayMillis)
+ }
+
+ @JvmStatic
+ fun cancelRunnableOnMain(runnable: Runnable) {
+ getHandler()?.removeCallbacks(runnable)
+ }
+
private fun getHandler(): Handler? {
if (handler == null) {
synchronized(Util::class.java) {
@@ -77,4 +109,55 @@ object Util {
return Arrays.hashCode(objects)
}
+ @JvmStatic
+ fun getOrDefault(map: Map, key: K, defaultValue: V): V? {
+ return if (map.containsKey(key)) map[key] else defaultValue
+ }
+
+ @JvmStatic
+ @Throws(IOException::class)
+ fun getStreamLength(`in`: InputStream): Long {
+ val buffer = ByteArray(4096)
+ var totalSize = 0
+ var read: Int
+ while (`in`.read(buffer).also { read = it } != -1) {
+ totalSize += read
+ }
+ return totalSize.toLong()
+ }
+
+ @JvmStatic
+ fun toIntExact(value: Long): Int {
+ if (value.toInt().compareTo(value) != 0){
+ throw ArithmeticException("integer overflow")
+ }
+ return value.toInt()
+ }
+
+ @JvmStatic
+ fun close(closeable: Closeable) {
+ try {
+ closeable.close()
+ } catch (e: IOException) {
+ Log.w("Loki", e)
+ }
+ }
+
+ @JvmStatic
+ fun isOwnNumber(context: Context, address: Address): Boolean {
+ return if (address.isGroup) false else TextSecurePreferences.getLocalNumber(context) == address.serialize()
+ }
+
+ @JvmStatic
+ fun partition(list: List, partitionSize: Int): List> {
+ val results: MutableList> = LinkedList()
+ var index = 0
+ while (index < list.size) {
+ val subListSize = Math.min(partitionSize, list.size - index)
+ results.add(list.subList(index, index + subListSize))
+ index += partitionSize
+ }
+ return results
+ }
+
}
\ No newline at end of file