From 17f401c356aff41b4b3353c4b8191f576c0d9f5a Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Thu, 21 Jan 2021 15:42:43 +1100 Subject: [PATCH] make things compile --- app/build.gradle | 21 ++++ .../securesms/MediaGalleryAdapter.java | 3 +- .../securesms/MediaPreviewActivity.java | 2 + .../securesms/MessageDetailsActivity.java | 2 + .../MessageDetailsRecipientAdapter.java | 3 +- .../components/AlbumThumbnailView.java | 1 + .../securesms/components/AvatarImageView.java | 2 + .../components/ConversationItemThumbnail.java | 1 + .../components/ConversationTypingView.java | 1 + .../securesms/components/InputPanel.java | 2 + .../securesms/components/LinkPreviewView.java | 1 + .../securesms/components/QuoteView.java | 1 + .../securesms/components/StickerView.java | 1 + .../components/ThreadPhotoRailView.java | 2 + .../securesms/components/ThumbnailView.java | 1 + .../components/ZoomingImageView.java | 2 + .../emoji/EmojiKeyboardProvider.java | 1 + .../components/emoji/MediaKeyboard.java | 1 + .../emoji/MediaKeyboardBottomTabAdapter.java | 1 + .../emoji/MediaKeyboardProvider.java | 2 + .../conversation/ConversationActivity.java | 6 +- .../conversation/ConversationAdapter.java | 4 +- .../conversation/ConversationItem.java | 1 + .../ConversationStickerSuggestionAdapter.java | 3 +- .../conversation/ConversationUpdateItem.java | 3 +- .../securesms/giph/ui/GiphyAdapter.java | 3 + .../linkpreview/LinkPreviewRepository.java | 1 + .../loki/activities/BackupRestoreActivity.kt | 2 +- .../activities/CreateClosedGroupActivity.kt | 6 +- .../activities/CreatePrivateChatActivity.kt | 6 +- .../activities/EditClosedGroupActivity.kt | 1 + .../loki/activities/SettingsActivity.kt | 4 +- .../ClosedGroupUpdateMessageSendJobV2.kt | 6 + .../loki/protocol/ClosedGroupsProtocol.kt | 108 +++++++++++------- .../mediapreview/MediaRailAdapter.java | 4 +- .../mediasend/MediaPickerFolderAdapter.java | 4 +- .../mediasend/MediaPickerItemAdapter.java | 3 +- .../securesms/mms/AttachmentManager.java | 2 + .../scribbles/StickerSelectFragment.java | 5 +- .../securesms/scribbles/UriGlideRenderer.java | 1 + .../securesms/search/SearchRepository.java | 8 +- .../stickers/StickerKeyboardPageAdapter.java | 3 +- .../stickers/StickerKeyboardPageFragment.java | 2 + .../stickers/StickerKeyboardProvider.java | 1 + .../stickers/StickerManagementAdapter.java | 3 +- .../stickers/StickerPackPreviewAdapter.java | 3 +- .../stickers/StickerPreviewPopup.java | 1 + build.gradle | 2 +- libsession/build.gradle | 3 + 49 files changed, 179 insertions(+), 71 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 20b4e3852..1ec3744ee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,9 +1,29 @@ +buildscript { + ext.kotlin_version = "1.4.0" + ext.kovenant_version = "3.3.0" + + repositories { + mavenLocal() + google() + mavenCentral() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:4.1.2' + classpath files('libs/gradle-witness.jar') + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" + classpath "com.google.gms:google-services:4.3.3" + } +} + apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'witness' apply plugin: 'kotlin-kapt' apply plugin: 'com.google.gms.google-services' +apply plugin: 'kotlinx-serialization' configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' @@ -96,6 +116,7 @@ dependencies { implementation project(":libsignal") implementation project(":libsession") // Remote: + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1" implementation "org.whispersystems:curve25519-java:$curve25519Version" implementation "com.goterl.lazycode:lazysodium-android:4.2.0@aar" implementation "net.java.dev.jna:jna:5.5.0@aar" diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaGalleryAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/MediaGalleryAdapter.java index e9cfee337..534127240 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaGalleryAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaGalleryAdapter.java @@ -25,6 +25,7 @@ import android.widget.TextView; import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter; + import org.thoughtcrime.securesms.components.ThumbnailView; import org.thoughtcrime.securesms.database.MediaDatabase.MediaRecord; import org.thoughtcrime.securesms.database.loaders.BucketedThreadMediaLoader.BucketedThreadMedia; @@ -45,7 +46,7 @@ class MediaGalleryAdapter extends StickyHeaderGridAdapter { private static final String TAG = MediaGalleryAdapter.class.getSimpleName(); private final Context context; - private final GlideRequests glideRequests; + private final GlideRequests glideRequests; private final Locale locale; private final ItemClickListener itemClickListener; private final Set selected; diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java index 27eee0fdc..23c11ee22 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -54,6 +54,8 @@ import android.widget.TextView; import android.widget.Toast; import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment; + + import org.thoughtcrime.securesms.components.MediaView; import org.session.libsession.messaging.threads.Address; import org.thoughtcrime.securesms.database.MediaDatabase.MediaRecord; diff --git a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java index 7c697d81e..cd20d11ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java @@ -36,6 +36,8 @@ import androidx.annotation.Nullable; import androidx.loader.app.LoaderManager.LoaderCallbacks; import androidx.loader.content.Loader; + + import org.thoughtcrime.securesms.MessageDetailsRecipientAdapter.RecipientDeliveryStatus; import org.session.libsession.utilities.color.MaterialColor; import org.thoughtcrime.securesms.conversation.ConversationItem; diff --git a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java index 4bec316df..76c106f6d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java @@ -8,6 +8,7 @@ import android.widget.BaseAdapter; import androidx.annotation.NonNull; + import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.loki.views.UserView; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -21,7 +22,7 @@ import java.util.List; class MessageDetailsRecipientAdapter extends BaseAdapter implements AbsListView.RecyclerListener { private final Context context; - private final GlideRequests glideRequests; + private final GlideRequests glideRequests; private final MessageRecord record; private final List members; private final boolean isPushGroup; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AlbumThumbnailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/AlbumThumbnailView.java index 0a4e61697..4dcaeb023 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/AlbumThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/AlbumThumbnailView.java @@ -12,6 +12,7 @@ import android.widget.TextView; import network.loki.messenger.R; import org.thoughtcrime.securesms.mms.GlideRequests; + import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideClickListener; import org.thoughtcrime.securesms.mms.SlidesClickedListener; 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 3f786d903..9ab33c7ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java @@ -18,6 +18,8 @@ import android.view.ViewOutlineProvider; import com.bumptech.glide.load.engine.DiskCacheStrategy; + + import org.thoughtcrime.securesms.loki.utilities.AvatarPlaceholderGenerator; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideRequests; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java index 831bc906c..379b5c77a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java @@ -13,6 +13,7 @@ import androidx.annotation.Nullable; import androidx.annotation.UiThread; import org.thoughtcrime.securesms.mms.GlideRequests; + import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideClickListener; import org.thoughtcrime.securesms.mms.SlidesClickedListener; 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 7b5038fe6..665949984 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationTypingView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationTypingView.java @@ -12,6 +12,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.session.libsession.messaging.threads.recipients.Recipient; import org.session.libsession.utilities.ThemeUtil; + import java.util.List; import network.loki.messenger.R; 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 8924be061..6c7958ed4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java @@ -24,6 +24,8 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; + + import org.thoughtcrime.securesms.components.emoji.EmojiKeyboardProvider; import org.thoughtcrime.securesms.components.emoji.EmojiToggle; import org.thoughtcrime.securesms.components.emoji.MediaKeyboard; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java b/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java index 433ddb081..64dd06120 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java @@ -13,6 +13,7 @@ import android.widget.FrameLayout; import android.widget.TextView; import org.thoughtcrime.securesms.mms.GlideRequests; + import org.thoughtcrime.securesms.mms.ImageSlide; import org.thoughtcrime.securesms.mms.SlidesClickedListener; 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 80e73ad95..97813b487 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java @@ -22,6 +22,7 @@ import com.annimon.stream.Stream; import com.bumptech.glide.load.engine.DiskCacheStrategy; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; + import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.loki.utilities.UiModeUtilities; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/StickerView.java b/app/src/main/java/org/thoughtcrime/securesms/components/StickerView.java index dd3700f49..3b8c30d31 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/StickerView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/StickerView.java @@ -8,6 +8,7 @@ import android.view.View; import android.widget.FrameLayout; import org.thoughtcrime.securesms.mms.GlideRequests; + import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideClickListener; import org.thoughtcrime.securesms.mms.SlidesClickedListener; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java index fe9e8522f..27ec12fbc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java @@ -15,6 +15,8 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import network.loki.messenger.R; + + import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter; import org.thoughtcrime.securesms.database.MediaDatabase; import org.thoughtcrime.securesms.mms.GlideRequests; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java index f7c68cab7..4ca23c773 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java @@ -6,6 +6,7 @@ import android.net.Uri; import androidx.annotation.NonNull; import androidx.annotation.UiThread; import android.util.AttributeSet; + import org.thoughtcrime.securesms.logging.Log; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java index da84135a1..9703ca3d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java @@ -7,6 +7,8 @@ import android.os.AsyncTask; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.util.AttributeSet; + + import org.thoughtcrime.securesms.logging.Log; import android.util.Pair; import android.view.View; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java index 5f88cca69..3c816b2e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; + import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter.VariationSelectorListener; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.util.ResUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java index 757423634..b9e8f45fa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java @@ -13,6 +13,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; + import org.thoughtcrime.securesms.components.InputAwareLayout.InputView; import org.thoughtcrime.securesms.components.RepeatableImageKey; import org.thoughtcrime.securesms.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardBottomTabAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardBottomTabAdapter.java index 2a1b37715..0d1b98d47 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardBottomTabAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardBottomTabAdapter.java @@ -7,6 +7,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; + import org.thoughtcrime.securesms.components.emoji.MediaKeyboardProvider.TabIconProvider; import org.thoughtcrime.securesms.mms.GlideRequests; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java index f1537cd20..9f0ce016e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java @@ -6,6 +6,8 @@ import androidx.annotation.Nullable; import androidx.viewpager.widget.PagerAdapter; import android.widget.ImageView; + + import org.thoughtcrime.securesms.mms.GlideRequests; public interface MediaKeyboardProvider { 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 0c56bbe1b..812683f21 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -83,6 +83,8 @@ import com.annimon.stream.Stream; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; + + import org.session.libsignal.libsignal.InvalidMessageException; import org.session.libsignal.libsignal.util.guava.Optional; import org.session.libsignal.service.loki.api.opengroups.PublicChat; @@ -191,6 +193,7 @@ import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.PushCharacterCalculator; import org.thoughtcrime.securesms.util.ServiceUtil; +import org.thoughtcrime.securesms.util.Util; // Cannot be modified import org.session.libsession.messaging.sending_receiving.contacts.Contact; import org.session.libsession.messaging.sending_receiving.linkpreview.LinkPreview; @@ -198,7 +201,6 @@ import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel; import org.session.libsession.messaging.sending_receiving.attachments.StickerLocator; import org.session.libsession.messaging.threads.GroupRecord; import org.session.libsession.utilities.ExpirationUtil; -import org.session.libsession.utilities.Util; import org.session.libsession.utilities.views.Stub; import org.session.libsession.utilities.ViewUtil; import org.session.libsession.utilities.concurrent.AssertedSuccessListener; @@ -268,7 +270,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private static final int SMS_DEFAULT = 11; private static final int MEDIA_SENDER = 12; - private GlideRequests glideRequests; + private GlideRequests glideRequests; protected ComposeText composeText; private AnimatingToggle buttonToggle; private ImageButton sendButton; 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 827844e94..7c531681f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java @@ -30,6 +30,7 @@ import android.widget.TextView; import com.annimon.stream.Stream; + import org.thoughtcrime.securesms.BindableConversationItem; import org.thoughtcrime.securesms.conversation.ConversationAdapter.HeaderViewHolder; import org.thoughtcrime.securesms.database.DatabaseFactory; @@ -97,7 +98,8 @@ public class ConversationAdapter private final Set batchSelected = Collections.synchronizedSet(new HashSet()); private final @Nullable ItemClickListener clickListener; - private final @NonNull GlideRequests glideRequests; + private final @NonNull + GlideRequests glideRequests; private final @NonNull Locale locale; private final @NonNull Recipient recipient; private final @NonNull MmsSmsDatabase db; 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 78fda070a..e9b3cf8dd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -53,6 +53,7 @@ import androidx.appcompat.app.AlertDialog; import com.annimon.stream.Stream; + import org.session.libsignal.libsignal.util.guava.Optional; import org.session.libsignal.service.loki.api.opengroups.PublicChat; import org.session.libsignal.service.loki.api.opengroups.PublicChatAPI; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter.java index c03314119..606dbad44 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter.java @@ -9,6 +9,7 @@ import android.widget.ImageView; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; + import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -20,7 +21,7 @@ import network.loki.messenger.R; public class ConversationStickerSuggestionAdapter extends RecyclerView.Adapter { - private final GlideRequests glideRequests; + private final GlideRequests glideRequests; private final EventListener eventListener; private final List stickers; 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 aa9c287a1..6b76c0572 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java @@ -14,6 +14,7 @@ import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import org.thoughtcrime.securesms.BindableConversationItem; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.loki.utilities.GeneralUtilitiesKt; @@ -72,7 +73,7 @@ public class ConversationUpdateItem extends LinearLayout public void bind(@NonNull MessageRecord messageRecord, @NonNull Optional previousMessageRecord, @NonNull Optional nextMessageRecord, - @NonNull GlideRequests glideRequests, + @NonNull GlideRequests glideRequests, @NonNull Locale locale, @NonNull Set batchSelected, @NonNull Recipient conversationRecipient, diff --git a/app/src/main/java/org/thoughtcrime/securesms/giph/ui/GiphyAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/giph/ui/GiphyAdapter.java index 9b7edd537..f4dc32a7e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/giph/ui/GiphyAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/giph/ui/GiphyAdapter.java @@ -7,6 +7,9 @@ import android.graphics.drawable.Drawable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; + + + import org.thoughtcrime.securesms.logging.Log; import android.view.LayoutInflater; import android.view.View; diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java index 2b9434c7d..cb5d7d875 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java @@ -12,6 +12,7 @@ import android.text.TextUtils; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.google.android.gms.common.util.IOUtils; + import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.dependencies.InjectableType; diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/BackupRestoreActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/BackupRestoreActivity.kt index ab98403a3..962af00f2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/activities/BackupRestoreActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/activities/BackupRestoreActivity.kt @@ -40,7 +40,7 @@ import org.thoughtcrime.securesms.loki.utilities.setUpActionBarSessionLogo import org.thoughtcrime.securesms.loki.utilities.show import org.thoughtcrime.securesms.notifications.NotificationChannels import org.thoughtcrime.securesms.util.BackupUtil -import org.thoughtcrime.securesms.util.TextSecurePreferences +import org.session.libsession.utilities.TextSecurePreferences class BackupRestoreActivity : BaseActionBarActivity() { 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 eabe2405c..b1c22ade1 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 @@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.loki.utilities.fadeIn import org.thoughtcrime.securesms.loki.utilities.fadeOut import org.thoughtcrime.securesms.mms.GlideApp import org.session.libsession.messaging.threads.recipients.Recipient -import org.thoughtcrime.securesms.util.TextSecurePreferences +import org.session.libsession.utilities.TextSecurePreferences import org.session.libsignal.libsignal.util.guava.Optional import org.thoughtcrime.securesms.loki.protocol.ClosedGroupsProtocolV2 import java.lang.ref.WeakReference @@ -120,7 +120,7 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), LoaderM if (selectedMembers.count() >= ClosedGroupsProtocol.groupSizeLimit) { // Minus one because we're going to include self later return Toast.makeText(this, R.string.activity_create_closed_group_too_many_group_members_error, Toast.LENGTH_LONG).show() } - val userPublicKey = TextSecurePreferences.getLocalNumber(this) + val userPublicKey = TextSecurePreferences.getLocalNumber(this)!! isLoading = true loaderContainer.fadeIn() ClosedGroupsProtocolV2.createClosedGroup(this, name.toString(), selectedMembers + setOf( userPublicKey )).successUi { groupID -> @@ -152,7 +152,7 @@ class CreateClosedGroupActivity : PassphraseRequiredActionBarActivity(), LoaderM val recipients = selectedMembers.map { Recipient.from(this, Address.fromSerialized(it), false) }.toSet() - val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(this) ?: TextSecurePreferences.getLocalNumber(this) + val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(this) ?: TextSecurePreferences.getLocalNumber(this)!! val admin = Recipient.from(this, Address.fromSerialized(masterHexEncodedPublicKey), false) CreateClosedGroupTask(WeakReference(this), null, name.toString(), recipients, setOf( admin )) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) 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 db4494f47..af8d6b970 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 @@ -23,7 +23,7 @@ import org.thoughtcrime.securesms.database.ThreadDatabase import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragment import org.thoughtcrime.securesms.loki.fragments.ScanQRCodeWrapperFragmentDelegate import org.session.libsession.messaging.threads.recipients.Recipient -import org.thoughtcrime.securesms.util.TextSecurePreferences +import org.session.libsession.utilities.TextSecurePreferences import org.session.libsignal.service.loki.utilities.PublicKeyValidation @@ -63,7 +63,7 @@ class CreatePrivateChatActivity : PassphraseRequiredActionBarActivity(), ScanQRC fun createPrivateChatIfPossible(hexEncodedPublicKey: String) { if (!PublicKeyValidation.isValid(hexEncodedPublicKey)) { return Toast.makeText(this, R.string.invalid_session_id, Toast.LENGTH_SHORT).show() } val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(this) - val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(this) + val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(this)!! val targetHexEncodedPublicKey = if (hexEncodedPublicKey == masterHexEncodedPublicKey) userHexEncodedPublicKey else hexEncodedPublicKey val recipient = Recipient.from(this, Address.fromSerialized(targetHexEncodedPublicKey), false) val intent = Intent(this, ConversationActivity::class.java) @@ -116,7 +116,7 @@ class EnterPublicKeyFragment : Fragment() { private val hexEncodedPublicKey: String get() { val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(requireContext()) - val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(requireContext()) + val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(requireContext())!! return masterHexEncodedPublicKey ?: userHexEncodedPublicKey } 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 e4595426e..81169f93d 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 @@ -13,6 +13,7 @@ import androidx.loader.app.LoaderManager import androidx.loader.content.Loader import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import kotlinx.android.synthetic.main.activity_settings.* import network.loki.messenger.R import nl.komponents.kovenant.Promise import nl.komponents.kovenant.ui.failUi 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 51f949b22..12815a017 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 @@ -64,7 +64,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { private val hexEncodedPublicKey: String get() { val masterHexEncodedPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(this) - val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(this) + val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(this)!! return masterHexEncodedPublicKey ?: userHexEncodedPublicKey } @@ -210,7 +210,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { } displayNameToBeUploaded = null if (isUpdatingProfilePicture && profilePicture != null) { - AvatarHelper.setAvatar(this, Address.fromSerialized(TextSecurePreferences.getLocalNumber(this)), profilePicture) + AvatarHelper.setAvatar(this, Address.fromSerialized(TextSecurePreferences.getLocalNumber(this)!!), profilePicture) TextSecurePreferences.setProfileAvatarId(this, SecureRandom().nextInt()) ProfileKeyUtil.setEncodedProfileKey(this, encodedProfileKey) ApplicationContext.getInstance(this).updateOpenGroupProfilePicturesIfNeeded() diff --git a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJobV2.kt b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJobV2.kt index e36e5abd5..59d0c34fd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJobV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/loki/protocol/ClosedGroupUpdateMessageSendJobV2.kt @@ -5,8 +5,14 @@ import kotlinx.serialization.Serializable import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +import org.session.libsignal.libsignal.ecc.DjbECPrivateKey +import org.session.libsignal.libsignal.ecc.DjbECPublicKey import org.session.libsignal.libsignal.ecc.ECKeyPair +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 +import org.session.libsignal.service.loki.utilities.removing05PrefixIfNeeded +import org.session.libsignal.service.loki.utilities.toHexString import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl 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 803c58764..f99e3351c 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 @@ -1,24 +1,14 @@ package org.thoughtcrime.securesms.loki.protocol import android.content.Context -import org.thoughtcrime.securesms.logging.Log +import androidx.annotation.WorkerThread import com.google.protobuf.ByteString import nl.komponents.kovenant.Promise import nl.komponents.kovenant.deferred -import org.thoughtcrime.securesms.ApplicationContext 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.session.libsession.messaging.threads.recipients.Recipient -import org.thoughtcrime.securesms.sms.IncomingGroupMessage -import org.thoughtcrime.securesms.sms.IncomingTextMessage -import org.thoughtcrime.securesms.sms.MessageSender -import org.thoughtcrime.securesms.util.GroupUtil -import org.thoughtcrime.securesms.util.Hex -import org.thoughtcrime.securesms.util.TextSecurePreferences +import org.session.libsession.utilities.GroupUtil +import org.session.libsession.utilities.TextSecurePreferences import org.session.libsignal.libsignal.ecc.Curve import org.session.libsignal.libsignal.util.guava.Optional import org.session.libsignal.service.api.messages.SignalServiceGroup @@ -32,9 +22,19 @@ import org.session.libsignal.service.loki.protocol.closedgroups.SharedSenderKeys import org.session.libsignal.service.loki.utilities.hexEncodedPrivateKey import org.session.libsignal.service.loki.utilities.hexEncodedPublicKey import org.session.libsignal.service.loki.utilities.toHexString +import org.thoughtcrime.securesms.ApplicationContext +import org.thoughtcrime.securesms.database.DatabaseFactory +import org.thoughtcrime.securesms.logging.Log +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.sms.IncomingGroupMessage +import org.thoughtcrime.securesms.sms.IncomingTextMessage +import org.thoughtcrime.securesms.sms.MessageSender +import org.thoughtcrime.securesms.util.Hex import java.io.IOException import java.util.* -import kotlin.jvm.Throws object ClosedGroupsProtocol { val isSharedSenderKeysEnabled = true @@ -50,7 +50,7 @@ object ClosedGroupsProtocol { val deferred = deferred() Thread { // Prepare - val userPublicKey = TextSecurePreferences.getLocalNumber(context) + val userPublicKey = TextSecurePreferences.getLocalNumber(context)!! // Generate a key pair for the group val groupKeyPair = Curve.generateKeyPair() val groupPublicKey = groupKeyPair.hexEncodedPublicKey // Includes the "05" prefix @@ -62,16 +62,16 @@ object ClosedGroupsProtocol { } // Create the group val groupID = doubleEncodeGroupID(groupPublicKey) - val admins = setOf( userPublicKey ) + val admins = setOf(userPublicKey) DatabaseFactory.getGroupDatabase(context).create(groupID, name, LinkedList
(members.map { Address.fromSerialized(it) }), - null, null, LinkedList
(admins.map { Address.fromSerialized(it) })) + null, null, LinkedList
(admins.map { Address.fromSerialized(it) })) DatabaseFactory.getRecipientDatabase(context).setProfileSharing(Recipient.from(context, Address.fromSerialized(groupID), false), true) // Establish sessions if needed establishSessionsWithMembersIfNeeded(context, members) // Send a closed group update message to all members using established channels val adminsAsData = admins.map { Hex.fromStringCondensed(it) } val closedGroupUpdateKind = ClosedGroupUpdateMessageSendJob.Kind.New(Hex.fromStringCondensed(groupPublicKey), name, groupKeyPair.privateKey.serialize(), - senderKeys, membersAsData, adminsAsData) + senderKeys, membersAsData, adminsAsData) for (member in members) { if (member == userPublicKey) { continue } val job = ClosedGroupUpdateMessageSendJob(member, closedGroupUpdateKind) @@ -94,7 +94,7 @@ object ClosedGroupsProtocol { @JvmStatic public fun leave(context: Context, groupPublicKey: String) { - val userPublicKey = TextSecurePreferences.getLocalNumber(context) + val userPublicKey = TextSecurePreferences.getLocalNumber(context)!! val groupDB = DatabaseFactory.getGroupDatabase(context) val groupID = doubleEncodeGroupID(groupPublicKey) val group = groupDB.getGroup(groupID).orNull() @@ -111,7 +111,7 @@ object ClosedGroupsProtocol { public fun update(context: Context, groupPublicKey: String, members: Collection, name: String): Promise { val deferred = deferred() Thread { - val userPublicKey = TextSecurePreferences.getLocalNumber(context) + val userPublicKey = TextSecurePreferences.getLocalNumber(context)!! val sskDatabase = DatabaseFactory.getSSKDatabase(context) val groupDB = DatabaseFactory.getGroupDatabase(context) val groupID = doubleEncodeGroupID(groupPublicKey) @@ -145,7 +145,7 @@ object ClosedGroupsProtocol { for (member in oldMembers) { @Suppress("NAME_SHADOWING") val closedGroupUpdateKind = ClosedGroupUpdateMessageSendJob.Kind.Info(Hex.fromStringCondensed(groupPublicKey), - name, setOf(), membersAsData, adminsAsData) + name, setOf(), membersAsData, adminsAsData) @Suppress("NAME_SHADOWING") val job = ClosedGroupUpdateMessageSendJob(member, closedGroupUpdateKind) job.setContext(context) @@ -173,7 +173,7 @@ object ClosedGroupsProtocol { for (member in newMembers) { @Suppress("NAME_SHADOWING") val closedGroupUpdateKind = ClosedGroupUpdateMessageSendJob.Kind.New(Hex.fromStringCondensed(groupPublicKey), name, - Hex.fromStringCondensed(groupPrivateKey), listOf(), membersAsData, adminsAsData) + Hex.fromStringCondensed(groupPrivateKey), listOf(), membersAsData, adminsAsData) @Suppress("NAME_SHADOWING") val job = ClosedGroupUpdateMessageSendJob(member, closedGroupUpdateKind) ApplicationContext.getInstance(context).jobManager.add(job) @@ -198,7 +198,7 @@ object ClosedGroupsProtocol { } // Send a closed group update message to the existing members with the new members' ratchets (this message is aimed at the group) val closedGroupUpdateKind = ClosedGroupUpdateMessageSendJob.Kind.Info(Hex.fromStringCondensed(groupPublicKey), name, - newSenderKeys, membersAsData, adminsAsData) + newSenderKeys, membersAsData, adminsAsData) val job = ClosedGroupUpdateMessageSendJob(groupPublicKey, closedGroupUpdateKind) ApplicationContext.getInstance(context).jobManager.add(job) // Establish sessions if needed @@ -209,7 +209,7 @@ object ClosedGroupsProtocol { for (member in newMembers) { @Suppress("NAME_SHADOWING") val closedGroupUpdateKind = ClosedGroupUpdateMessageSendJob.Kind.New(Hex.fromStringCondensed(groupPublicKey), name, - Hex.fromStringCondensed(groupPrivateKey), allSenderKeys, membersAsData, adminsAsData) + Hex.fromStringCondensed(groupPrivateKey), allSenderKeys, membersAsData, adminsAsData) @Suppress("NAME_SHADOWING") val job = ClosedGroupUpdateMessageSendJob(member, closedGroupUpdateKind) ApplicationContext.getInstance(context).jobManager.add(job) @@ -217,7 +217,7 @@ object ClosedGroupsProtocol { } else { val allSenderKeys = sskDatabase.getAllClosedGroupSenderKeys(groupPublicKey, ClosedGroupRatchetCollectionType.Current) val closedGroupUpdateKind = ClosedGroupUpdateMessageSendJob.Kind.Info(Hex.fromStringCondensed(groupPublicKey), name, - allSenderKeys, membersAsData, adminsAsData) + allSenderKeys, membersAsData, adminsAsData) val job = ClosedGroupUpdateMessageSendJob(groupPublicKey, closedGroupUpdateKind) ApplicationContext.getInstance(context).jobManager.add(job) } @@ -265,8 +265,9 @@ object ClosedGroupsProtocol { if (closedGroupUpdate.groupPublicKey.isEmpty) { return false } when (closedGroupUpdate.type) { SignalServiceProtos.ClosedGroupUpdate.Type.NEW -> { - return !closedGroupUpdate.name.isNullOrEmpty() && !(closedGroupUpdate.groupPrivateKey ?: ByteString.copyFrom(ByteArray(0))).isEmpty - && closedGroupUpdate.membersCount > 0 && closedGroupUpdate.adminsCount > 0 // senderKeys may be empty + return !closedGroupUpdate.name.isNullOrEmpty() && !(closedGroupUpdate.groupPrivateKey + ?: ByteString.copyFrom(ByteArray(0))).isEmpty + && closedGroupUpdate.membersCount > 0 && closedGroupUpdate.adminsCount > 0 // senderKeys may be empty } SignalServiceProtos.ClosedGroupUpdate.Type.INFO -> { return !closedGroupUpdate.name.isNullOrEmpty() && closedGroupUpdate.membersCount > 0 && closedGroupUpdate.adminsCount > 0 // senderKeys may be empty @@ -279,7 +280,7 @@ object ClosedGroupsProtocol { public fun handleNewClosedGroup(context: Context, closedGroupUpdate: SignalServiceProtos.ClosedGroupUpdate, senderPublicKey: String) { // Prepare - val userPublicKey = TextSecurePreferences.getLocalNumber(context) + val userPublicKey = TextSecurePreferences.getLocalNumber(context)!! val sskDatabase = DatabaseFactory.getSSKDatabase(context) // Unwrap the message val groupPublicKey = closedGroupUpdate.groupPublicKey.toByteArray().toHexString() @@ -323,7 +324,7 @@ object ClosedGroupsProtocol { groupDB.updateMembers(groupID, members.map { Address.fromSerialized(it) }) } else { groupDB.create(groupID, name, LinkedList
(members.map { Address.fromSerialized(it) }), - null, null, LinkedList
(admins.map { Address.fromSerialized(it) })) + null, null, LinkedList
(admins.map { Address.fromSerialized(it) })) } DatabaseFactory.getRecipientDatabase(context).setProfileSharing(Recipient.from(context, Address.fromSerialized(groupID), false), true) // Add the group to the user's set of public keys to poll for @@ -338,7 +339,7 @@ object ClosedGroupsProtocol { public fun handleClosedGroupUpdate(context: Context, closedGroupUpdate: SignalServiceProtos.ClosedGroupUpdate, senderPublicKey: String) { // Prepare - val userPublicKey = TextSecurePreferences.getLocalNumber(context) + val userPublicKey = TextSecurePreferences.getLocalNumber(context)!! val sskDatabase = DatabaseFactory.getSSKDatabase(context) // Unwrap the message val groupPublicKey = closedGroupUpdate.groupPublicKey.toByteArray().toHexString() @@ -413,7 +414,7 @@ object ClosedGroupsProtocol { public fun handleSenderKeyRequest(context: Context, closedGroupUpdate: SignalServiceProtos.ClosedGroupUpdate, senderPublicKey: String) { // Prepare - val userPublicKey = TextSecurePreferences.getLocalNumber(context) + val userPublicKey = TextSecurePreferences.getLocalNumber(context)!! val groupPublicKey = closedGroupUpdate.groupPublicKey.toByteArray().toHexString() val groupDB = DatabaseFactory.getGroupDatabase(context) val groupID = doubleEncodeGroupID(groupPublicKey) @@ -472,9 +473,8 @@ object ClosedGroupsProtocol { @JvmStatic fun getMessageDestinations(context: Context, groupID: String): List
{ - if (GroupUtil.isRSSFeed(groupID)) { return listOf() } if (GroupUtil.isOpenGroup(groupID)) { - return listOf( Address.fromSerialized(groupID) ) + return listOf(Address.fromSerialized(groupID)) } else { var groupPublicKey: String? = null try { @@ -483,7 +483,7 @@ object ClosedGroupsProtocol { // Do nothing } if (groupPublicKey != null && DatabaseFactory.getSSKDatabase(context).isSSKBasedClosedGroup(groupPublicKey)) { - return listOf( Address.fromSerialized(groupPublicKey) ) + return listOf(Address.fromSerialized(groupPublicKey)) } else { return DatabaseFactory.getGroupDatabase(context).getGroupMembers(groupID, false).map { it.address } } @@ -510,14 +510,14 @@ object ClosedGroupsProtocol { fun leaveLegacyGroup(context: Context, recipient: Recipient): Boolean { if (!recipient.address.isClosedGroup) { return true } val threadID = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient) - val message = GroupUtil.createGroupLeaveMessage(context, recipient).orNull() + val message = createGroupLeaveMessage(context, recipient) if (threadID < 0 || message == null) { return false } MessageSender.send(context, message, threadID, false, null) /* val masterPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(context) val publicKeyToRemove = masterPublicKey ?: TextSecurePreferences.getLocalNumber(context) */ - val userPublicKey = TextSecurePreferences.getLocalNumber(context) + val userPublicKey = TextSecurePreferences.getLocalNumber(context)!! val groupDatabase = DatabaseFactory.getGroupDatabase(context) val groupID = recipient.address.toGroupString() groupDatabase.setActive(groupID, false) @@ -547,14 +547,14 @@ object ClosedGroupsProtocol { } private fun insertIncomingInfoMessage(context: Context, senderPublicKey: String, groupID: String, type0: GroupContext.Type, type1: SignalServiceGroup.Type, - name: String, members: Collection, admins: Collection) { + name: String, members: Collection, admins: Collection) { val groupContextBuilder = GroupContext.newBuilder() - .setId(ByteString.copyFrom(GroupUtil.getDecodedId(groupID))) + .setId(ByteString.copyFrom(GroupUtil.getDecodedGroupIDAsData(groupID.toByteArray()))) .setType(type0) .setName(name) .addAllMembers(members) .addAllAdmins(admins) - val group = SignalServiceGroup(type1, GroupUtil.getDecodedId(groupID), GroupType.SIGNAL, name, members.toList(), null, admins.toList()) + val group = SignalServiceGroup(type1, GroupUtil.getDecodedGroupIDAsData(groupID.toByteArray()), 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) @@ -562,10 +562,10 @@ object ClosedGroupsProtocol { } private fun insertOutgoingInfoMessage(context: Context, groupID: String, type: GroupContext.Type, name: String, - members: Collection, admins: Collection, threadID: Long) { + members: Collection, admins: Collection, threadID: Long) { val recipient = Recipient.from(context, Address.fromSerialized(groupID), false) val groupContextBuilder = GroupContext.newBuilder() - .setId(ByteString.copyFrom(GroupUtil.getDecodedId(groupID))) + .setId(ByteString.copyFrom(GroupUtil.getDecodedGroupIDAsData(groupID.toByteArray()))) .setType(type) .setName(name) .addAllMembers(members) @@ -581,12 +581,34 @@ object ClosedGroupsProtocol { @JvmStatic @Throws(IOException::class) public fun doubleEncodeGroupID(groupPublicKey: String): String { - return GroupUtil.getEncodedId(GroupUtil.getEncodedId(Hex.fromStringCondensed(groupPublicKey), false).toByteArray(), false) + return GroupUtil.getEncodedGroupID(GroupUtil.getEncodedGroupID(Hex.fromStringCondensed(groupPublicKey)).toByteArray()) } @JvmStatic @Throws(IOException::class) public fun doubleDecodeGroupID(groupID: String): ByteArray { - return GroupUtil.getDecodedId(GroupUtil.getDecodedStringId(groupID)) + return GroupUtil.getDecodedGroupIDAsData(GroupUtil.getDecodedGroupIDAsData(groupID.toByteArray())) + } + + @WorkerThread + fun createGroupLeaveMessage(context: Context, groupRecipient: Recipient): OutgoingGroupMediaMessage? { + val encodedGroupId = groupRecipient.address.toGroupString() + val groupDatabase = DatabaseFactory.getGroupDatabase(context) + if (!groupDatabase.isActive(encodedGroupId)) { + Log.w("Loki", "Group has already been left.") + return null + } + val decodedGroupId: ByteString + try { + decodedGroupId = ByteString.copyFrom(GroupUtil.getDecodedGroupIDAsData(encodedGroupId.toByteArray())) + } catch (e: IOException) { + Log.w("Loki", "Failed to decode group ID.", e) + return null + } + val groupContext = GroupContext.newBuilder() + .setId(decodedGroupId) + .setType(GroupContext.Type.QUIT) + .build() + return OutgoingGroupMediaMessage(groupRecipient, groupContext, null, System.currentTimeMillis(), 0, null, emptyList(), emptyList()) } } \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaRailAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaRailAdapter.java index 605676dcd..7767d0d7e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaRailAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaRailAdapter.java @@ -8,6 +8,8 @@ import android.view.View; import android.view.ViewGroup; import network.loki.messenger.R; + + import org.thoughtcrime.securesms.components.ThumbnailView; import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -21,7 +23,7 @@ public class MediaRailAdapter extends RecyclerView.Adapter media; private final RailItemListener listener; private final boolean editable; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerFolderAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerFolderAdapter.java index adaf54d00..778883849 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerFolderAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerFolderAdapter.java @@ -11,6 +11,8 @@ import android.widget.TextView; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; + + import network.loki.messenger.R; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -19,7 +21,7 @@ import java.util.List; class MediaPickerFolderAdapter extends RecyclerView.Adapter { - private final GlideRequests glideRequests; + private final GlideRequests glideRequests; private final EventListener eventListener; private final List folders; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerItemAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerItemAdapter.java index 07d92fae0..99cc6bff9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerItemAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaPickerItemAdapter.java @@ -13,6 +13,7 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import network.loki.messenger.R; import org.thoughtcrime.securesms.mms.GlideRequests; + import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.StableIdGenerator; @@ -23,7 +24,7 @@ import java.util.List; public class MediaPickerItemAdapter extends RecyclerView.Adapter { - private final GlideRequests glideRequests; + private final GlideRequests glideRequests; private final EventListener eventListener; private final List media; private final List selected; 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 e1b0739b3..e9a3c2114 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -38,6 +38,8 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; + + import org.thoughtcrime.securesms.MediaPreviewActivity; import org.thoughtcrime.securesms.loki.views.MessageAudioView; import org.thoughtcrime.securesms.components.DocumentView; diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/StickerSelectFragment.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/StickerSelectFragment.java index 4a1ee2453..ae19d13b6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/StickerSelectFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/StickerSelectFragment.java @@ -33,6 +33,9 @@ import android.widget.ImageView; import com.bumptech.glide.load.engine.DiskCacheStrategy; + + + import network.loki.messenger.R; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -40,7 +43,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests; public class StickerSelectFragment extends Fragment implements LoaderManager.LoaderCallbacks { private RecyclerView recyclerView; - private GlideRequests glideRequests; + private GlideRequests glideRequests; private String assetDirectory; private StickerSelectionListener listener; diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/UriGlideRenderer.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/UriGlideRenderer.java index 598975c18..15d4d5243 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/UriGlideRenderer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/UriGlideRenderer.java @@ -15,6 +15,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.transition.Transition; + import org.thoughtcrime.securesms.imageeditor.Bounds; import org.thoughtcrime.securesms.imageeditor.Renderer; import org.thoughtcrime.securesms.imageeditor.RendererContext; 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 a8a4600c4..2c887d6bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java @@ -128,7 +128,7 @@ public class SearchRepository { private CursorList queryConversations(@NonNull String query) { List numbers = contactAccessor.getNumbersForThreadSearchFilter(context, query); - List
addresses = Stream.of(numbers).map(number -> Address.fromExternal(context, number)).toList(); + List
addresses = Stream.of(numbers).map(number -> Address.Companion.fromExternal(context, number)).toList(); Cursor conversations = threadDatabase.getFilteredConversationList(addresses); return conversations != null ? new CursorList<>(conversations, new ThreadModelBuilder(threadDatabase)) @@ -179,7 +179,7 @@ public class SearchRepository { @Override public Recipient build(@NonNull Cursor cursor) { - Address address = Address.fromExternal(context, cursor.getString(1)); + Address address = Address.Companion.fromExternal(context, cursor.getString(1)); return Recipient.from(context, address, false); } } @@ -208,8 +208,8 @@ public class SearchRepository { @Override public MessageResult build(@NonNull Cursor cursor) { - Address conversationAddress = Address.fromSerialized(cursor.getString(cursor.getColumnIndex(SearchDatabase.CONVERSATION_ADDRESS))); - Address messageAddress = Address.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(SearchDatabase.MESSAGE_ADDRESS))); + Address conversationAddress = Address.Companion.fromSerialized(cursor.getString(cursor.getColumnIndex(SearchDatabase.CONVERSATION_ADDRESS))); + Address messageAddress = Address.Companion.fromSerialized(cursor.getString(cursor.getColumnIndexOrThrow(SearchDatabase.MESSAGE_ADDRESS))); Recipient conversationRecipient = Recipient.from(context, conversationAddress, false); Recipient messageRecipient = Recipient.from(context, messageAddress, false); String body = cursor.getString(cursor.getColumnIndexOrThrow(SearchDatabase.SNIPPET)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageAdapter.java index 155e264c7..8e19a6654 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageAdapter.java @@ -11,6 +11,7 @@ import android.widget.ImageView; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; + import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -26,7 +27,7 @@ import network.loki.messenger.R; */ final class StickerKeyboardPageAdapter extends RecyclerView.Adapter { - private final GlideRequests glideRequests; + private final GlideRequests glideRequests; private final EventListener eventListener; private final List stickers; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageFragment.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageFragment.java index 4590bdd86..5193b4ba7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageFragment.java @@ -17,6 +17,8 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; + + import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java index 7d80ad5c3..717b72876 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java @@ -12,6 +12,7 @@ import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.appcompat.app.AppCompatActivity; import android.widget.ImageView; + import org.thoughtcrime.securesms.components.emoji.MediaKeyboardProvider; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.model.StickerPackRecord; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java index 77e3ee8ee..93eeaa307 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java @@ -12,6 +12,7 @@ import android.widget.TextView; import com.annimon.stream.Stream; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; + import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -32,7 +33,7 @@ final class StickerManagementAdapter extends RecyclerView.Adapter { private static final String TAG_MESSAGE_STICKERS = "MessageStickers"; private static final String TAG_BLESSED_STICKERS = "BlessedStickers"; - private final GlideRequests glideRequests; + private final GlideRequests glideRequests; private final EventListener eventListener; private final StableIdGenerator stableIdGenerator; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewAdapter.java index 1d5e67548..ea59cfe1a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewAdapter.java @@ -9,6 +9,7 @@ import android.widget.ImageView; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; + import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -19,7 +20,7 @@ import network.loki.messenger.R; public final class StickerPackPreviewAdapter extends RecyclerView.Adapter { - private final GlideRequests glideRequests; + private final GlideRequests glideRequests; private final List list; public StickerPackPreviewAdapter(@NonNull GlideRequests glideRequests) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPreviewPopup.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPreviewPopup.java index cac515af0..499a2c171 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPreviewPopup.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPreviewPopup.java @@ -7,6 +7,7 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.PopupWindow; + import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.GlideRequests; diff --git a/build.gradle b/build.gradle index 21f40ac28..27ab3189b 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath "com.android.tools.build:gradle:4.1.1" + classpath 'com.android.tools.build:gradle:4.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath "com.google.gms:google-services:4.3.4" classpath files('libs/gradle-witness.jar') diff --git a/libsession/build.gradle b/libsession/build.gradle index 2337d8ada..67160f80a 100644 --- a/libsession/build.gradle +++ b/libsession/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.library' id 'kotlin-android' + id 'kotlin-kapt' } android { @@ -47,6 +48,8 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' implementation 'com.github.bumptech.glide:glide:4.11.0' +// annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' +// kapt 'com.github.bumptech.glide:compiler:4.11.0' implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' implementation 'com.annimon:stream:1.1.8' implementation 'com.makeramen:roundedimageview:2.1.0'