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