diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 25118ffd3..032f28a77 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -33,8 +33,13 @@ import com.google.firebase.iid.FirebaseInstanceId; import org.conscrypt.Conscrypt; import org.jetbrains.annotations.NotNull; +import org.session.libsession.messaging.contacts.avatars.AvatarHelper; import org.session.libsession.utilities.SSKEnvironment; import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier; +import org.session.libsession.utilities.dynamiclanguage.DynamicLanguageContextWrapper; +import org.session.libsession.utilities.TextSecurePreferences; +import org.session.libsession.utilities.Util; + import org.session.libsignal.libsignal.state.SessionRecord; import org.signal.aesgcmprovider.AesGcmProvider; import org.thoughtcrime.securesms.sskenvironment.ProfileManager; @@ -78,7 +83,6 @@ import org.thoughtcrime.securesms.loki.utilities.UiModeUtilities; import org.thoughtcrime.securesms.notifications.DefaultMessageNotifier; 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.session.libsession.messaging.threads.recipients.Recipient; @@ -87,9 +91,6 @@ import org.thoughtcrime.securesms.service.IncomingMessageObserver; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.service.LocalBackupListener; import org.thoughtcrime.securesms.service.UpdateApkRefreshListener; -import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.thoughtcrime.securesms.util.Util; -import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper; import org.webrtc.PeerConnectionFactory; import org.webrtc.PeerConnectionFactory.InitializationOptions; import org.webrtc.voiceengine.WebRtcAudioManager; diff --git a/app/src/main/java/org/thoughtcrime/securesms/BaseActionBarActivity.java b/app/src/main/java/org/thoughtcrime/securesms/BaseActionBarActivity.java index 11317c8a7..d969dcb70 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BaseActionBarActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/BaseActionBarActivity.java @@ -10,9 +10,9 @@ import android.view.WindowManager; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; -import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageActivityHelper; -import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper; +import org.session.libsession.utilities.TextSecurePreferences; +import org.session.libsession.utilities.dynamiclanguage.DynamicLanguageActivityHelper; +import org.session.libsession.utilities.dynamiclanguage.DynamicLanguageContextWrapper; import network.loki.messenger.R; diff --git a/app/src/main/java/org/thoughtcrime/securesms/BaseActivity.java b/app/src/main/java/org/thoughtcrime/securesms/BaseActivity.java index e883245ec..d5286698c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BaseActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/BaseActivity.java @@ -11,9 +11,9 @@ import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import android.view.KeyEvent; -import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageActivityHelper; -import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper; +import org.session.libsession.utilities.TextSecurePreferences; +import org.session.libsession.utilities.dynamiclanguage.DynamicLanguageActivityHelper; +import org.session.libsession.utilities.dynamiclanguage.DynamicLanguageContextWrapper; import network.loki.messenger.R; diff --git a/app/src/main/java/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java b/app/src/main/java/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java index 54d665a3c..57b4bd1f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java @@ -26,7 +26,7 @@ import android.os.Bundle; import android.view.View; import android.widget.ProgressBar; -import org.thoughtcrime.securesms.attachments.DatabaseAttachment; +import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.MmsDatabase; diff --git a/app/src/main/java/org/thoughtcrime/securesms/ExpirationDialog.java b/app/src/main/java/org/thoughtcrime/securesms/ExpirationDialog.java index 7493e5ddc..469629ed3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ExpirationDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ExpirationDialog.java @@ -7,7 +7,7 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; -import org.thoughtcrime.securesms.util.ExpirationUtil; +import org.session.libsession.utilities.ExpirationUtil; import cn.carbswang.android.numberpickerview.library.NumberPickerView; import network.loki.messenger.R; diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java index a5f257bdc..f1c80bc9d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java @@ -64,8 +64,8 @@ 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; -import org.thoughtcrime.securesms.util.Util; -import org.thoughtcrime.securesms.util.ViewUtil; +import org.session.libsession.utilities.Util; +import org.session.libsession.utilities.ViewUtil; import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask; import java.util.Collection; @@ -198,7 +198,7 @@ public class MediaOverviewActivity extends PassphraseRequiredActionBarActivity { if (address == null) throw new AssertionError(); if (locale == null) throw new AssertionError(); - this.recipient = Recipient.from(getContext(), Address.fromSerialized(address), true); + this.recipient = Recipient.from(getContext(), Address.Companion.fromSerialized(address), true); this.locale = locale; getLoaderManager().initLoader(0, null, this); diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java index ced6a5b09..924fa3452 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -53,7 +53,7 @@ import android.widget.FrameLayout; import android.widget.TextView; import android.widget.Toast; -import org.thoughtcrime.securesms.attachments.DatabaseAttachment; +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 5b4ab2498..7c697d81e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsActivity.java @@ -37,7 +37,7 @@ import androidx.loader.app.LoaderManager.LoaderCallbacks; import androidx.loader.content.Loader; import org.thoughtcrime.securesms.MessageDetailsRecipientAdapter.RecipientDeliveryStatus; -import org.thoughtcrime.securesms.color.MaterialColor; +import org.session.libsession.utilities.color.MaterialColor; import org.thoughtcrime.securesms.conversation.ConversationItem; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.GroupReceiptDatabase; @@ -55,8 +55,8 @@ 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; -import org.thoughtcrime.securesms.util.Util; +import org.session.libsession.utilities.ExpirationUtil; +import org.session.libsession.utilities.Util; import org.session.libsignal.libsignal.util.guava.Optional; import org.session.libsignal.service.loki.api.opengroups.PublicChat; diff --git a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java index 4d5d5036c..4bec316df 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MessageDetailsRecipientAdapter.java @@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.loki.views.UserView; import org.thoughtcrime.securesms.mms.GlideRequests; import org.session.libsession.messaging.threads.recipients.Recipient; -import org.thoughtcrime.securesms.util.Conversions; +import org.session.libsession.utilities.Conversions; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java index 52d5a9102..f7e6386a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java @@ -43,7 +43,7 @@ import org.thoughtcrime.securesms.animation.AnimationCompleteListener; import org.thoughtcrime.securesms.components.AnimatingToggle; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.service.KeyCachingService; -import org.thoughtcrime.securesms.util.TextSecurePreferences; +import org.session.libsession.utilities.TextSecurePreferences; import network.loki.messenger.R; diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java index 47f625a48..2ac70f266 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java @@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.loki.activities.HomeActivity; import org.thoughtcrime.securesms.loki.activities.LandingActivity; import org.thoughtcrime.securesms.service.KeyCachingService; -import org.thoughtcrime.securesms.util.TextSecurePreferences; +import org.session.libsession.utilities.TextSecurePreferences; import java.util.Locale; diff --git a/app/src/main/java/org/thoughtcrime/securesms/ShareActivity.java b/app/src/main/java/org/thoughtcrime/securesms/ShareActivity.java index 0266b1d2f..ca51382d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ShareActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ShareActivity.java @@ -47,9 +47,9 @@ import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.providers.BlobProvider; import org.session.libsession.messaging.threads.recipients.Recipient; -import org.thoughtcrime.securesms.stickers.StickerLocator; +import org.session.libsession.messaging.sending_receiving.attachments.StickerLocator; import org.thoughtcrime.securesms.util.MediaUtil; -import org.thoughtcrime.securesms.util.ViewUtil; +import org.session.libsession.utilities.ViewUtil; import java.io.FileInputStream; import java.io.IOException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/ShortcutLauncherActivity.java b/app/src/main/java/org/thoughtcrime/securesms/ShortcutLauncherActivity.java index d8e6db673..9568993cc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ShortcutLauncherActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ShortcutLauncherActivity.java @@ -43,7 +43,7 @@ public class ShortcutLauncherActivity extends AppCompatActivity { return; } - Address address = Address.fromSerialized(serializedAddress); + Address address = Address.Companion.fromSerialized(serializedAddress); Recipient recipient = Recipient.from(this, address, true); TaskStackBuilder backStack = TaskStackBuilder.create(this) .addNextIntent(new Intent(this, HomeActivity.class)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/TypingIndicatorIntroFragment.java b/app/src/main/java/org/thoughtcrime/securesms/TypingIndicatorIntroFragment.java index 437a227b0..2bae468ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/TypingIndicatorIntroFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/TypingIndicatorIntroFragment.java @@ -10,7 +10,7 @@ import android.view.View; import android.view.ViewGroup; import org.thoughtcrime.securesms.components.TypingIndicatorView; -import org.thoughtcrime.securesms.util.TextSecurePreferences; +import org.session.libsession.utilities.TextSecurePreferences; import network.loki.messenger.R; diff --git a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java index 00fc6da3c..4d081b192 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java @@ -11,7 +11,7 @@ import android.util.Pair; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.util.MediaUtil; -import org.thoughtcrime.securesms.util.ThreadUtil; +import org.session.libsession.utilities.ThreadUtil; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.concurrent.SettableFuture; 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 2254b6566..f7c68cab7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java @@ -28,12 +28,12 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideClickListener; import org.thoughtcrime.securesms.mms.SlidesClickedListener; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; import org.session.libsignal.libsignal.util.guava.Optional; import org.session.libsession.utilities.Util; import org.session.libsession.utilities.ViewUtil; +import org.session.libsession.utilities.concurrent.ListenableFuture; +import org.session.libsession.utilities.concurrent.SettableFuture; import java.util.Collections; import java.util.Locale; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/location/SignalMapView.java b/app/src/main/java/org/thoughtcrime/securesms/components/location/SignalMapView.java index 3208093fe..176b86866 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/location/SignalMapView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/location/SignalMapView.java @@ -11,8 +11,8 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; +import org.session.libsession.utilities.concurrent.ListenableFuture; +import org.session.libsession.utilities.concurrent.SettableFuture; import org.session.libsession.utilities.ViewUtil; 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 aca9a7cef..51f949b22 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 @@ -40,11 +40,11 @@ import org.thoughtcrime.securesms.loki.utilities.push import org.thoughtcrime.securesms.mms.GlideApp import org.thoughtcrime.securesms.mms.GlideRequests import org.thoughtcrime.securesms.permissions.Permissions -import org.thoughtcrime.securesms.profiles.AvatarHelper +import org.session.libsession.messaging.contacts.avatars.AvatarHelper import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints import org.thoughtcrime.securesms.util.BitmapDecodingException import org.thoughtcrime.securesms.util.BitmapUtil -import org.thoughtcrime.securesms.util.TextSecurePreferences +import org.session.libsession.utilities.TextSecurePreferences import org.session.libsignal.service.api.crypto.ProfileCipher import org.session.libsignal.service.api.util.StreamDetails import org.session.libsignal.service.loki.api.fileserver.FileServerAPI 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 e52eefd4c..e1b0739b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -39,7 +39,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.thoughtcrime.securesms.MediaPreviewActivity; -import org.session.libsession.messaging.sending_receiving.attachments.Attachment; import org.thoughtcrime.securesms.loki.views.MessageAudioView; import org.thoughtcrime.securesms.components.DocumentView; import org.thoughtcrime.securesms.components.RemovableEditableMediaView; @@ -53,21 +52,23 @@ 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.session.libsession.messaging.threads.recipients.Recipient; import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.ExternalStorageUtil; import org.thoughtcrime.securesms.util.FileProviderUtil; import org.thoughtcrime.securesms.util.MediaUtil; -import org.thoughtcrime.securesms.util.ThemeUtil; -import org.thoughtcrime.securesms.util.Util; -import org.thoughtcrime.securesms.util.ViewUtil; -import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture.Listener; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; -import org.thoughtcrime.securesms.util.views.Stub; import org.session.libsignal.libsignal.util.guava.Optional; +import org.session.libsession.messaging.sending_receiving.attachments.Attachment; +import org.session.libsession.messaging.threads.recipients.Recipient; +import org.session.libsession.utilities.ThemeUtil; +import org.session.libsession.utilities.ViewUtil; +import org.session.libsession.utilities.views.Stub; +import org.session.libsession.utilities.Util; +import org.session.libsession.utilities.concurrent.AssertedSuccessListener; +import org.session.libsession.utilities.concurrent.ListenableFuture; +import org.session.libsession.utilities.concurrent.ListenableFuture.Listener; +import org.session.libsession.utilities.concurrent.SettableFuture; + import java.io.File; import java.io.IOException; import java.util.Iterator; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java index 42b9cb6f0..f1bd08afa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java @@ -25,7 +25,7 @@ import androidx.annotation.Nullable; import network.loki.messenger.R; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; -import org.thoughtcrime.securesms.attachments.UriAttachment; +import org.session.libsession.messaging.sending_receiving.attachments.UriAttachment; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.ResUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java b/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java index 11379f54c..a62188c29 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java @@ -20,7 +20,7 @@ import com.bumptech.glide.load.resource.gif.GifDrawable; import com.bumptech.glide.load.resource.gif.StreamGifDecoder; import com.bumptech.glide.module.AppGlideModule; -import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; +import org.session.libsession.messaging.contacts.avatars.ContactPhoto; import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.giph.model.ChunkedImageUrl; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java index c0e780393..e1fe46408 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java @@ -22,14 +22,16 @@ import android.net.Uri; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.session.libsession.messaging.sending_receiving.attachments.Attachment; -import org.thoughtcrime.securesms.attachments.UriAttachment; + import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.stickers.StickerLocator; import org.thoughtcrime.securesms.util.MediaUtil; -import org.thoughtcrime.securesms.util.Util; import org.session.libsignal.libsignal.util.guava.Optional; +import org.session.libsession.messaging.sending_receiving.attachments.Attachment; +import org.session.libsession.messaging.sending_receiving.attachments.UriAttachment; +import org.session.libsession.messaging.sending_receiving.attachments.StickerLocator; +import org.session.libsession.utilities.Util; + import java.security.SecureRandom; import network.loki.messenger.R; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/StickerSlide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/StickerSlide.java index 34819bd1a..bbb9fbf04 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/StickerSlide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/StickerSlide.java @@ -8,7 +8,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; -import org.thoughtcrime.securesms.stickers.StickerLocator; +import org.session.libsession.messaging.sending_receiving.attachments.StickerLocator; import org.thoughtcrime.securesms.util.MediaUtil; import network.loki.messenger.R; diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java b/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java index 0a2e4bab0..699987b72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java @@ -7,8 +7,8 @@ import com.annimon.stream.Stream; import com.bumptech.glide.util.ContentLengthInputStream; import org.thoughtcrime.securesms.logging.Log; -import org.thoughtcrime.securesms.util.Util; -import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; +import org.session.libsession.utilities.Util; +import org.session.libsession.utilities.concurrent.SignalExecutors; import org.session.libsignal.libsignal.util.Pair; import org.session.libsignal.libsignal.util.guava.Optional; 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 dfae6ef5e..9495328e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java @@ -43,7 +43,7 @@ import org.session.libsession.messaging.sending_receiving.notifications.MessageN 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.session.libsession.messaging.sending_receiving.contacts.Contact; import org.thoughtcrime.securesms.contactshare.ContactUtil; import org.thoughtcrime.securesms.conversation.ConversationActivity; import org.thoughtcrime.securesms.database.DatabaseFactory; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/FailedNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/FailedNotificationBuilder.java index 63f50a323..fcaf67171 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/FailedNotificationBuilder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/FailedNotificationBuilder.java @@ -6,7 +6,7 @@ import android.content.Intent; import android.graphics.BitmapFactory; import network.loki.messenger.R; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.session.libsession.messaging.threads.recipients.Recipient; import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPreference; public class FailedNotificationBuilder extends AbstractNotificationBuilder { @@ -22,7 +22,7 @@ public class FailedNotificationBuilder extends AbstractNotificationBuilder { setTicker(context.getString(R.string.MessageNotifier_error_delivering_message)); setContentIntent(PendingIntent.getActivity(context, 0, intent, 0)); setAutoCancel(true); - setAlarms(null, RecipientDatabase.VibrateState.DEFAULT); + setAlarms(null, Recipient.VibrateState.DEFAULT); setChannelId(NotificationChannels.FAILURES); } 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 a5735f742..3ae78f707 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java @@ -87,7 +87,7 @@ public class MarkReadReceiver extends BroadcastReceiver { // Loki - Take into account multi device Set linkedDevices = MultiDeviceProtocol.shared.getAllLinkedDevices(address.serialize()); for (String device : linkedDevices) { - Address deviceAsAddress = Address.fromExternal(context, device); + Address deviceAsAddress = Address.Companion.fromExternal(context, device); ApplicationContext.getInstance(context) .getJobManager() .add(new SendReadReceiptJob(deviceAsAddress, timestamps)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java index e4605df2a..020d8a4bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java @@ -6,7 +6,7 @@ import android.content.Context; import android.content.Intent; import androidx.core.app.NotificationCompat; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.session.libsession.messaging.threads.recipients.Recipient; import org.thoughtcrime.securesms.loki.activities.HomeActivity; import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPreference; import org.thoughtcrime.securesms.util.TextSecurePreferences; @@ -30,7 +30,7 @@ public class PendingMessageNotificationBuilder extends AbstractNotificationBuild setContentIntent(PendingIntent.getActivity(context, 0, intent, 0)); setAutoCancel(true); - setAlarms(null, RecipientDatabase.VibrateState.DEFAULT); + setAlarms(null, Recipient.VibrateState.DEFAULT); if (!NotificationChannels.supported()) { setPriority(TextSecurePreferences.getNotificationPriority(context)); 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 a371e9910..729f3fa85 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java @@ -25,9 +25,9 @@ import androidx.core.app.RemoteInput; 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.GeneratedContactPhoto; +import org.session.libsession.messaging.contacts.avatars.ContactColors; +import org.session.libsession.messaging.contacts.avatars.ContactPhoto; +import org.session.libsession.messaging.contacts.avatars.GeneratedContactPhoto; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.loki.utilities.AvatarPlaceholderGenerator; import org.thoughtcrime.securesms.loki.utilities.NotificationUtilities; diff --git a/app/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java b/app/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java index 135cf6c07..e1d1d192b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java @@ -15,7 +15,7 @@ import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; import network.loki.messenger.R; -import org.thoughtcrime.securesms.util.ViewUtil; +import org.session.libsession.utilities.ViewUtil; public class RationaleDialog { diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/AvatarHelper.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/AvatarHelper.java deleted file mode 100644 index e06b58ae0..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/AvatarHelper.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.thoughtcrime.securesms.profiles; - - -import android.content.Context; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.annimon.stream.Stream; - -import org.session.libsession.messaging.threads.Address; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.LinkedList; -import java.util.List; - -public class AvatarHelper { - - private static final String AVATAR_DIRECTORY = "avatars"; - - public static InputStream getInputStreamFor(@NonNull Context context, @NonNull Address address) - throws IOException - { - return new FileInputStream(getAvatarFile(context, address)); - } - - public static List getAvatarFiles(@NonNull Context context) { - File avatarDirectory = new File(context.getFilesDir(), AVATAR_DIRECTORY); - File[] results = avatarDirectory.listFiles(); - - if (results == null) return new LinkedList<>(); - else return Stream.of(results).toList(); - } - - public static void delete(@NonNull Context context, @NonNull Address address) { - getAvatarFile(context, address).delete(); - } - - public static @NonNull File getAvatarFile(@NonNull Context context, @NonNull Address address) { - File avatarDirectory = new File(context.getFilesDir(), AVATAR_DIRECTORY); - avatarDirectory.mkdirs(); - - return new File(avatarDirectory, new File(address.serialize()).getName()); - } - - public static void setAvatar(@NonNull Context context, @NonNull Address address, @Nullable byte[] data) - throws IOException - { - if (data == null) { - delete(context, address); - } else { - try (FileOutputStream out = new FileOutputStream(getAvatarFile(context, address))) { - out.write(data); - } - } - } - -} 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 658b1b89f..d535fb3f9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java @@ -16,7 +16,7 @@ import android.widget.FrameLayout; import network.loki.messenger.R; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.session.libsession.messaging.threads.recipients.Recipient; -import org.thoughtcrime.securesms.util.ViewUtil; +import org.session.libsession.utilities.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 3428eeb9d..ac3c4e7cf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java @@ -11,7 +11,7 @@ import network.loki.messenger.R; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.session.libsession.messaging.threads.recipients.Recipient; import org.session.libsession.messaging.threads.recipients.RecipientExporter; -import org.thoughtcrime.securesms.util.ViewUtil; +import org.session.libsession.utilities.ViewUtil; public class UnknownSenderView extends FrameLayout { diff --git a/app/src/main/java/org/thoughtcrime/securesms/providers/BlobProvider.java b/app/src/main/java/org/thoughtcrime/securesms/providers/BlobProvider.java index 37e130a58..f88dd009a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/providers/BlobProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/providers/BlobProvider.java @@ -14,8 +14,8 @@ import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.crypto.ModernDecryptingPartInputStream; import org.thoughtcrime.securesms.crypto.ModernEncryptingPartOutputStream; import org.thoughtcrime.securesms.logging.Log; -import org.thoughtcrime.securesms.util.Util; -import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; +import org.session.libsession.utilities.Util; +import org.session.libsession.utilities.concurrent.SignalExecutors; import java.io.ByteArrayInputStream; import java.io.File; 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 6baeaf601..56ab3ea45 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java @@ -47,7 +47,7 @@ public class QuickResponseService extends IntentService { number = URLDecoder.decode(number); } - Address address = Address.fromExternal(this, number); + Address address = Address.Companion.fromExternal(this, number); Recipient recipient = Recipient.from(this, address, false); int subscriptionId = recipient.getDefaultSubscriptionId().or(-1); long expiresIn = recipient.getExpireMessages() * 1000L; 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 c43d08768..e57ddaf03 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java @@ -227,7 +227,7 @@ public class MessageSender { MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context); MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context); OutgoingMediaMessage message = mmsDatabase.getOutgoingMessage(messageId); - SyncMessageId syncId = new SyncMessageId(Address.fromSerialized(TextSecurePreferences.getLocalNumber(context)), message.getSentTimeMillis()); + SyncMessageId syncId = new SyncMessageId(Address.Companion.fromSerialized(TextSecurePreferences.getLocalNumber(context)), message.getSentTimeMillis()); for (Attachment attachment : message.getAttachments()) { attachmentDatabase.markAttachmentUploaded(messageId, attachment); @@ -254,7 +254,7 @@ public class MessageSender { SmsDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context); MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context); SmsMessageRecord message = smsDatabase.getMessage(messageId); - SyncMessageId syncId = new SyncMessageId(Address.fromSerialized(TextSecurePreferences.getLocalNumber(context)), message.getDateSent()); + SyncMessageId syncId = new SyncMessageId(Address.Companion.fromSerialized(TextSecurePreferences.getLocalNumber(context)), message.getDateSent()); smsDatabase.markAsSent(messageId, true); smsDatabase.markUnidentified(messageId, true); 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 f273c31a8..4590bdd86 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardPageFragment.java @@ -23,7 +23,7 @@ import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.stickers.StickerKeyboardPageAdapter.StickerKeyboardPageViewHolder; -import org.thoughtcrime.securesms.util.ViewUtil; +import org.session.libsession.utilities.ViewUtil; import network.loki.messenger.R; 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 27a7bfd7c..7d80ad5c3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardProvider.java @@ -21,7 +21,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.stickers.StickerKeyboardPageFragment.EventListener; import org.thoughtcrime.securesms.stickers.StickerKeyboardRepository.PackListResult; import org.thoughtcrime.securesms.util.ResUtil; -import org.thoughtcrime.securesms.util.ThemeUtil; +import org.session.libsession.utilities.ThemeUtil; import org.thoughtcrime.securesms.util.Throttler; import java.util.ArrayList; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardRepository.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardRepository.java index d1d864822..430f98aca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerKeyboardRepository.java @@ -8,7 +8,7 @@ import org.thoughtcrime.securesms.database.StickerDatabase.StickerPackRecordRead import org.thoughtcrime.securesms.database.StickerDatabase.StickerRecordReader; import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.database.model.StickerRecord; -import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; +import org.session.libsession.utilities.concurrent.SignalExecutors; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementRepository.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementRepository.java index 9d805d6a1..185d3f106 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementRepository.java @@ -12,8 +12,8 @@ import org.thoughtcrime.securesms.database.StickerDatabase.StickerPackRecordRead import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobs.StickerPackDownloadJob; -import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; +import org.session.libsession.utilities.TextSecurePreferences; +import org.session.libsession.utilities.concurrent.SignalExecutors; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java index 67b9ac914..b7ab9dcb3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java @@ -27,7 +27,7 @@ import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.stickers.StickerManifest.Sticker; -import org.thoughtcrime.securesms.util.concurrent.SimpleTask; +import org.session.libsession.utilities.concurrent.SimpleTask; import network.loki.messenger.R; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java index 46b4e4b30..560e545b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java @@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.dependencies.InjectableType; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.util.Hex; -import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; +import org.session.libsession.utilities.concurrent.SignalExecutors; import org.session.libsignal.libsignal.InvalidMessageException; import org.session.libsignal.libsignal.util.guava.Optional; import org.session.libsignal.service.api.SignalServiceMessageReceiver; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerSearchRepository.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerSearchRepository.java index d9bde9b46..73f5a1cde 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerSearchRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerSearchRepository.java @@ -10,7 +10,7 @@ import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.StickerDatabase; import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.database.model.StickerRecord; -import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; +import org.session.libsession.utilities.concurrent.SignalExecutors; public final class StickerSearchRepository { 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 5dcfeb62d..4a1d9a1ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java @@ -27,204 +27,204 @@ import network.loki.messenger.R; import static org.session.libsignal.service.internal.push.SignalServiceProtos.GroupContext; public class GroupUtil { - - private static final String ENCODED_CLOSED_GROUP_PREFIX = "__textsecure_group__!"; - private static final String ENCODED_MMS_GROUP_PREFIX = "__signal_mms_group__!"; - private static final String ENCODED_OPEN_GROUP_PREFIX = "__loki_public_chat_group__!"; - private static final String ENCODED_RSS_FEED_GROUP_PREFIX = "__loki_rss_feed_group__!"; - private static final String TAG = GroupUtil.class.getSimpleName(); - - public static String getEncodedId(SignalServiceGroup group) { - byte[] groupId = group.getGroupId(); - if (group.getGroupType() == SignalServiceGroup.GroupType.PUBLIC_CHAT) { - return getEncodedOpenGroupId(groupId); - } else if (group.getGroupType() == SignalServiceGroup.GroupType.RSS_FEED) { - return getEncodedRSSFeedId(groupId); - } - return getEncodedId(groupId, false); - } - - public static String getEncodedId(byte[] groupId, boolean mms) { - return (mms ? ENCODED_MMS_GROUP_PREFIX : ENCODED_CLOSED_GROUP_PREFIX) + Hex.toStringCondensed(groupId); - } - - public static String getEncodedOpenGroupId(byte[] groupId) { - return ENCODED_OPEN_GROUP_PREFIX + Hex.toStringCondensed(groupId); - } - - public static String getEncodedRSSFeedId(byte[] groupId) { - return ENCODED_RSS_FEED_GROUP_PREFIX + Hex.toStringCondensed(groupId); - } - - public static byte[] getDecodedId(String groupId) throws IOException { - if (!isEncodedGroup(groupId)) { - throw new IOException("Invalid encoding"); - } - - return Hex.fromStringCondensed(groupId.split("!", 2)[1]); - } - - public static String getDecodedStringId(String groupId) throws IOException { - byte[] id = getDecodedId(groupId); - return new String(id); - } - - public static boolean isEncodedGroup(@NonNull String groupId) { - return groupId.startsWith(ENCODED_CLOSED_GROUP_PREFIX) || groupId.startsWith(ENCODED_MMS_GROUP_PREFIX) || groupId.startsWith(ENCODED_OPEN_GROUP_PREFIX) || groupId.startsWith(ENCODED_RSS_FEED_GROUP_PREFIX); - } - - public static boolean isMmsGroup(@NonNull String groupId) { - return groupId.startsWith(ENCODED_MMS_GROUP_PREFIX); - } - - public static boolean isOpenGroup(@NonNull String groupId) { - return groupId.startsWith(ENCODED_OPEN_GROUP_PREFIX); - } - - public static boolean isRSSFeed(@NonNull String groupId) { - return groupId.startsWith(ENCODED_RSS_FEED_GROUP_PREFIX); - } - - public static boolean isClosedGroup(@NonNull String groupId) { - return groupId.startsWith(ENCODED_CLOSED_GROUP_PREFIX); - } - - @WorkerThread - public static Optional createGroupLeaveMessage(@NonNull Context context, @NonNull Recipient groupRecipient) { - String encodedGroupId = groupRecipient.getAddress().toGroupString(); - GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context); - - if (!groupDatabase.isActive(encodedGroupId)) { - Log.w(TAG, "Group has already been left."); - return Optional.absent(); - } - - ByteString decodedGroupId; - try { - decodedGroupId = ByteString.copyFrom(getDecodedId(encodedGroupId)); - } catch (IOException e) { - Log.w(TAG, "Failed to decode group ID.", e); - return Optional.absent(); - } - - GroupContext groupContext = GroupContext.newBuilder() - .setId(decodedGroupId) - .setType(GroupContext.Type.QUIT) - .build(); - - return Optional.of(new OutgoingGroupMediaMessage(groupRecipient, groupContext, null, System.currentTimeMillis(), 0, null, Collections.emptyList(), Collections.emptyList())); - } - - public static @NonNull GroupDescription getDescription(@NonNull Context context, @Nullable String encodedGroup) { - if (encodedGroup == null) { - return new GroupDescription(context, null); - } - - try { - GroupContext groupContext = GroupContext.parseFrom(Base64.decode(encodedGroup)); - return new GroupDescription(context, groupContext); - } catch (IOException e) { - Log.w(TAG, e); - return new GroupDescription(context, null); - } - } - - public static class GroupDescription { - - @NonNull private final Context context; - @Nullable private final GroupContext groupContext; - private final List newMembers; - private final List removedMembers; - private boolean wasCurrentUserRemoved; - - public GroupDescription(@NonNull Context context, @Nullable GroupContext groupContext) { - this.context = context.getApplicationContext(); - this.groupContext = groupContext; - - this.newMembers = new LinkedList<>(); - this.removedMembers = new LinkedList<>(); - this.wasCurrentUserRemoved = false; - - if (groupContext != null) { - List newMembers = groupContext.getNewMembersList(); - for (String member : newMembers) { - this.newMembers.add(this.toRecipient(member)); - } - - List removedMembers = groupContext.getRemovedMembersList(); - for (String member : removedMembers) { - this.removedMembers.add(this.toRecipient(member)); - } - - // If we were the one that quit then we need to leave the group (only relevant for slave - // devices in a multi device context) - if (!removedMembers.isEmpty()) { - String masterPublicKeyOrNull = TextSecurePreferences.getMasterHexEncodedPublicKey(context); - String masterPublicKey = masterPublicKeyOrNull != null ? masterPublicKeyOrNull : TextSecurePreferences.getLocalNumber(context); - wasCurrentUserRemoved = removedMembers.contains(masterPublicKey); - } - } - } - - private Recipient toRecipient(String hexEncodedPublicKey) { - Address address = Address.Companion.fromSerialized(hexEncodedPublicKey); - return Recipient.from(context, address, false); - } - - public String toString(Recipient sender) { - if (wasCurrentUserRemoved) { - return context.getString(R.string.GroupUtil_you_were_removed_from_group); - } - - StringBuilder description = new StringBuilder(); - description.append(context.getString(R.string.MessageRecord_s_updated_group, sender.toShortString())); - - if (groupContext == null) { - return description.toString(); - } - - String title = groupContext.getName(); - - if (!newMembers.isEmpty()) { - description.append("\n"); - description.append(context.getResources().getQuantityString(R.plurals.GroupUtil_joined_the_group, - newMembers.size(), toString(newMembers))); - } - - if (!removedMembers.isEmpty()) { - description.append("\n"); - description.append(context.getResources().getQuantityString(R.plurals.GroupUtil_removed_from_the_group, - removedMembers.size(), toString(removedMembers))); - } - - if (title != null && !title.trim().isEmpty()) { - String separator = (!newMembers.isEmpty() || !removedMembers.isEmpty()) ? " " : "\n"; - description.append(separator); - description.append(context.getString(R.string.GroupUtil_group_name_is_now, title)); - } - - return description.toString(); - } - - public void addListener(RecipientModifiedListener listener) { - if (!this.newMembers.isEmpty()) { - for (Recipient member : this.newMembers) { - member.addListener(listener); - } - } - } - - private String toString(List recipients) { - String result = ""; - - for (int i=0;i createGroupLeaveMessage(@NonNull Context context, @NonNull Recipient groupRecipient) { +// String encodedGroupId = groupRecipient.getAddress().toGroupString(); +// GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context); +// +// if (!groupDatabase.isActive(encodedGroupId)) { +// Log.w(TAG, "Group has already been left."); +// return Optional.absent(); +// } +// +// ByteString decodedGroupId; +// try { +// decodedGroupId = ByteString.copyFrom(getDecodedId(encodedGroupId)); +// } catch (IOException e) { +// Log.w(TAG, "Failed to decode group ID.", e); +// return Optional.absent(); +// } +// +// GroupContext groupContext = GroupContext.newBuilder() +// .setId(decodedGroupId) +// .setType(GroupContext.Type.QUIT) +// .build(); +// +// return Optional.of(new OutgoingGroupMediaMessage(groupRecipient, groupContext, null, System.currentTimeMillis(), 0, null, Collections.emptyList(), Collections.emptyList())); +// } +// +// public static @NonNull GroupDescription getDescription(@NonNull Context context, @Nullable String encodedGroup) { +// if (encodedGroup == null) { +// return new GroupDescription(context, null); +// } +// +// try { +// GroupContext groupContext = GroupContext.parseFrom(Base64.decode(encodedGroup)); +// return new GroupDescription(context, groupContext); +// } catch (IOException e) { +// Log.w(TAG, e); +// return new GroupDescription(context, null); +// } +// } +// +// public static class GroupDescription { +// +// @NonNull private final Context context; +// @Nullable private final GroupContext groupContext; +// private final List newMembers; +// private final List removedMembers; +// private boolean wasCurrentUserRemoved; +// +// public GroupDescription(@NonNull Context context, @Nullable GroupContext groupContext) { +// this.context = context.getApplicationContext(); +// this.groupContext = groupContext; +// +// this.newMembers = new LinkedList<>(); +// this.removedMembers = new LinkedList<>(); +// this.wasCurrentUserRemoved = false; +// +// if (groupContext != null) { +// List newMembers = groupContext.getNewMembersList(); +// for (String member : newMembers) { +// this.newMembers.add(this.toRecipient(member)); +// } +// +// List removedMembers = groupContext.getRemovedMembersList(); +// for (String member : removedMembers) { +// this.removedMembers.add(this.toRecipient(member)); +// } +// +// // If we were the one that quit then we need to leave the group (only relevant for slave +// // devices in a multi device context) +// if (!removedMembers.isEmpty()) { +// String masterPublicKeyOrNull = TextSecurePreferences.getMasterHexEncodedPublicKey(context); +// String masterPublicKey = masterPublicKeyOrNull != null ? masterPublicKeyOrNull : TextSecurePreferences.getLocalNumber(context); +// wasCurrentUserRemoved = removedMembers.contains(masterPublicKey); +// } +// } +// } +// +// private Recipient toRecipient(String hexEncodedPublicKey) { +// Address address = Address.Companion.fromSerialized(hexEncodedPublicKey); +// return Recipient.from(context, address, false); +// } +// +// public String toString(Recipient sender) { +// if (wasCurrentUserRemoved) { +// return context.getString(R.string.GroupUtil_you_were_removed_from_group); +// } +// +// StringBuilder description = new StringBuilder(); +// description.append(context.getString(R.string.MessageRecord_s_updated_group, sender.toShortString())); +// +// if (groupContext == null) { +// return description.toString(); +// } +// +// String title = groupContext.getName(); +// +// if (!newMembers.isEmpty()) { +// description.append("\n"); +// description.append(context.getResources().getQuantityString(R.plurals.GroupUtil_joined_the_group, +// newMembers.size(), toString(newMembers))); +// } +// +// if (!removedMembers.isEmpty()) { +// description.append("\n"); +// description.append(context.getResources().getQuantityString(R.plurals.GroupUtil_removed_from_the_group, +// removedMembers.size(), toString(removedMembers))); +// } +// +// if (title != null && !title.trim().isEmpty()) { +// String separator = (!newMembers.isEmpty() || !removedMembers.isEmpty()) ? " " : "\n"; +// description.append(separator); +// description.append(context.getString(R.string.GroupUtil_group_name_is_now, title)); +// } +// +// return description.toString(); +// } +// +// public void addListener(RecipientModifiedListener listener) { +// if (!this.newMembers.isEmpty()) { +// for (Recipient member : this.newMembers) { +// member.addListener(listener); +// } +// } +// } +// +// private String toString(List recipients) { +// String result = ""; +// +// for (int i=0;i getMobileMediaDownloadAllowed(Context context) { - return getMediaDownloadAllowed(context, MEDIA_DOWNLOAD_MOBILE_PREF, R.array.pref_media_download_mobile_data_default); - } - - public static @NonNull Set getWifiMediaDownloadAllowed(Context context) { - return getMediaDownloadAllowed(context, MEDIA_DOWNLOAD_WIFI_PREF, R.array.pref_media_download_wifi_default); - } - - public static @NonNull Set getRoamingMediaDownloadAllowed(Context context) { - return getMediaDownloadAllowed(context, MEDIA_DOWNLOAD_ROAMING_PREF, R.array.pref_media_download_roaming_default); - } - - private static @NonNull Set getMediaDownloadAllowed(Context context, String key, @ArrayRes int defaultValuesRes) { - return getStringSetPreference(context, - key, - new HashSet<>(Arrays.asList(context.getResources().getStringArray(defaultValuesRes)))); - } - - public static long getLastFullContactSyncTime(Context context) { - return getLongPreference(context, LAST_FULL_CONTACT_SYNC_TIME, 0); - } - - public static void setLastFullContactSyncTime(Context context, long timestamp) { - setLongPreference(context, LAST_FULL_CONTACT_SYNC_TIME, timestamp); - } - - public static boolean needsFullContactSync(Context context) { - return getBooleanPreference(context, NEEDS_FULL_CONTACT_SYNC, false); - } - - public static void setNeedsFullContactSync(Context context, boolean needsSync) { - setBooleanPreference(context, NEEDS_FULL_CONTACT_SYNC, needsSync); - } - - public static void setLogEncryptedSecret(Context context, String base64Secret) { - setStringPreference(context, LOG_ENCRYPTED_SECRET, base64Secret); - } - - public static String getLogEncryptedSecret(Context context) { - return getStringPreference(context, LOG_ENCRYPTED_SECRET, null); - } - - public static void setLogUnencryptedSecret(Context context, String base64Secret) { - setStringPreference(context, LOG_UNENCRYPTED_SECRET, base64Secret); - } - - public static String getLogUnencryptedSecret(Context context) { - return getStringPreference(context, LOG_UNENCRYPTED_SECRET, null); - } - - public static int getNotificationChannelVersion(Context context) { - return getIntegerPreference(context, NOTIFICATION_CHANNEL_VERSION, 1); - } - - public static void setNotificationChannelVersion(Context context, int version) { - setIntegerPrefrence(context, NOTIFICATION_CHANNEL_VERSION, version); - } - - public static int getNotificationMessagesChannelVersion(Context context) { - return getIntegerPreference(context, NOTIFICATION_MESSAGES_CHANNEL_VERSION, 1); - } - - public static void setNotificationMessagesChannelVersion(Context context, int version) { - setIntegerPrefrence(context, NOTIFICATION_MESSAGES_CHANNEL_VERSION, version); - } - - public static boolean getNeedsMessagePull(Context context) { - return getBooleanPreference(context, NEEDS_MESSAGE_PULL, false); - } - - public static void setNeedsMessagePull(Context context, boolean needsMessagePull) { - setBooleanPreference(context, NEEDS_MESSAGE_PULL, needsMessagePull); - } - - public static boolean hasSeenStickerIntroTooltip(Context context) { - return getBooleanPreference(context, SEEN_STICKER_INTRO_TOOLTIP, false); - } - - public static void setHasSeenStickerIntroTooltip(Context context, boolean seenStickerTooltip) { - setBooleanPreference(context, SEEN_STICKER_INTRO_TOOLTIP, seenStickerTooltip); - } - - public static void setMediaKeyboardMode(Context context, MediaKeyboardMode mode) { - setStringPreference(context, MEDIA_KEYBOARD_MODE, mode.name()); - } - - public static MediaKeyboardMode getMediaKeyboardMode(Context context) { - String name = getStringPreference(context, MEDIA_KEYBOARD_MODE, MediaKeyboardMode.EMOJI.name()); - return MediaKeyboardMode.valueOf(name); - } - - public static void setBooleanPreference(Context context, String key, boolean value) { - PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(key, value).apply(); - } - - public static boolean getBooleanPreference(Context context, String key, boolean defaultValue) { - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(key, defaultValue); - } - - public static void setStringPreference(Context context, String key, String value) { - PreferenceManager.getDefaultSharedPreferences(context).edit().putString(key, value).apply(); - } - - public static String getStringPreference(Context context, String key, String defaultValue) { - return PreferenceManager.getDefaultSharedPreferences(context).getString(key, defaultValue); - } - - private static int getIntegerPreference(Context context, String key, int defaultValue) { - return PreferenceManager.getDefaultSharedPreferences(context).getInt(key, defaultValue); - } - - private static void setIntegerPrefrence(Context context, String key, int value) { - PreferenceManager.getDefaultSharedPreferences(context).edit().putInt(key, value).apply(); - } - - private static boolean setIntegerPrefrenceBlocking(Context context, String key, int value) { - return PreferenceManager.getDefaultSharedPreferences(context).edit().putInt(key, value).commit(); - } - - private static long getLongPreference(Context context, String key, long defaultValue) { - return PreferenceManager.getDefaultSharedPreferences(context).getLong(key, defaultValue); - } - - private static void setLongPreference(Context context, String key, long value) { - PreferenceManager.getDefaultSharedPreferences(context).edit().putLong(key, value).apply(); - } - - private static void removePreference(Context context, String key) { - PreferenceManager.getDefaultSharedPreferences(context).edit().remove(key).apply(); - } - - private static Set getStringSetPreference(Context context, String key, Set defaultValues) { - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - if (prefs.contains(key)) { - return prefs.getStringSet(key, Collections.emptySet()); - } else { - return defaultValues; - } - } - - // NEVER rename these -- they're persisted by name - public enum MediaKeyboardMode { - EMOJI, STICKER - } - - // region Loki - public static long getBackgroundPollTime(Context context) { - return getLongPreference(context, "background_poll_time", 0L); - } - - public static void setBackgroundPollTime(Context context, long backgroundPollTime) { - setLongPreference(context, "background_poll_time", backgroundPollTime); - } - - public static long getOpenGroupBackgroundPollTime(Context context) { - return getLongPreference(context, "public_chat_background_poll_time", 0L); - } - - public static void setOpenGroupBackgroundPollTime(Context context, long backgroundPollTime) { - setLongPreference(context, "public_chat_background_poll_time", backgroundPollTime); - } - - public static boolean isChatSetUp(Context context, String id) { - return getBooleanPreference(context, "is_chat_set_up" + "?chat=" + id, false); - } - - public static void markChatSetUp(Context context, String id) { - setBooleanPreference(context, "is_chat_set_up" + "?chat=" + id, true); - } - - public static String getMasterHexEncodedPublicKey(Context context) { - return getStringPreference(context, "master_hex_encoded_public_key", null); - } - - public static void setMasterHexEncodedPublicKey(Context context, String masterHexEncodedPublicKey) { - setStringPreference(context, "master_hex_encoded_public_key", masterHexEncodedPublicKey.toLowerCase()); - } - - public static Boolean getHasViewedSeed(Context context) { - return getBooleanPreference(context, "has_viewed_seed", false); - } - - public static void setHasViewedSeed(Context context, Boolean hasViewedSeed) { - setBooleanPreference(context, "has_viewed_seed", hasViewedSeed); - } - - public static void setNeedsDatabaseReset(Context context, boolean resetDatabase) { - PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("database_reset", resetDatabase).commit(); - } - - public static boolean getNeedsDatabaseReset(Context context) { - return getBooleanPreference(context, "database_reset", false); - } - - public static void setWasUnlinked(Context context, boolean value) { - // We do it this way so that it gets persisted in storage straight away - PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("database_reset_unpair", value).commit(); - } - - public static boolean getWasUnlinked(Context context) { - return getBooleanPreference(context, "database_reset_unpair", false); - } - - public static void setNeedsIsRevokedSlaveDeviceCheck(Context context, boolean value) { - setBooleanPreference(context, "needs_revocation", value); - } - - public static boolean getNeedsIsRevokedSlaveDeviceCheck(Context context) { - return getBooleanPreference(context, "needs_revocation", false); - } - - public static void setRestorationTime(Context context, long time) { - setLongPreference(context, "restoration_time", time); - } - - public static long getRestorationTime(Context context) { - return getLongPreference(context, "restoration_time", 0); - } - - public static boolean getHasSeenOpenGroupSuggestionSheet(Context context) { - return getBooleanPreference(context, "has_seen_open_group_suggestion_sheet", false); - } - - public static void setHasSeenOpenGroupSuggestionSheet(Context context) { - setBooleanPreference(context, "has_seen_open_group_suggestion_sheet", true); - } - - public static long getLastProfilePictureUpload(Context context) { - return getLongPreference(context, "last_profile_picture_upload", 0); - } - - public static void setLastProfilePictureUpload(Context context, long newValue) { - setLongPreference(context, "last_profile_picture_upload", newValue); - } - - public static boolean hasSeenGIFMetaDataWarning(Context context) { - return getBooleanPreference(context, "has_seen_gif_metadata_warning", false); - } - - public static void setHasSeenGIFMetaDataWarning(Context context) { - setBooleanPreference(context, "has_seen_gif_metadata_warning", true); - } - - public static void clearAll(Context context) { - PreferenceManager.getDefaultSharedPreferences(context).edit().clear().commit(); - } - - public static boolean getHasSeenMultiDeviceRemovalSheet(Context context) { - return getBooleanPreference(context, "has_seen_multi_device_removal_sheet", false); - } - - public static void setHasSeenMultiDeviceRemovalSheet(Context context) { - setBooleanPreference(context, "has_seen_multi_device_removal_sheet", true); - } - - public static boolean hasSeenLightThemeIntroSheet(Context context) { - return getBooleanPreference(context, "has_seen_light_theme_intro_sheet", false); - } - - public static void setHasSeenLightThemeIntroSheet(Context context) { - setBooleanPreference(context, "has_seen_light_theme_intro_sheet", true); - } - - public static long getLastSnodePoolRefreshDate(Context context) { - return getLongPreference(context, "last_snode_pool_refresh_date", 0); - } - - public static void setLastSnodePoolRefreshDate(Context context, Date date) { - setLongPreference(context, "last_snode_pool_refresh_date", date.getTime()); - } - - public static long getLastKeyPairMigrationNudge(Context context) { - return getLongPreference(context, "last_key_pair_migration_nudge", 0); - } - - public static void setLastKeyPairMigrationNudge(Context context, long newValue) { - setLongPreference(context, "last_key_pair_migration_nudge", newValue); - } - - public static boolean getIsMigratingKeyPair(Context context) { - return getBooleanPreference(context, "is_migrating_key_pair", false); - } - - public static void setIsMigratingKeyPair(Context context, boolean newValue) { - setBooleanPreference(context, "is_migrating_key_pair", newValue); - } - // endregion - - // region Backup related - public static List getBackupRecords(@NonNull Context context) { - final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - - final String prefsFileName; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - prefsFileName = PreferenceManager.getDefaultSharedPreferencesName(context); - } else { - prefsFileName = context.getPackageName() + "_preferences"; - } - - final LinkedList prefList = new LinkedList<>(); - addBackupEntryInt (prefList, preferences, prefsFileName, LOCAL_REGISTRATION_ID_PREF); - addBackupEntryString (prefList, preferences, prefsFileName, LOCAL_NUMBER_PREF); - addBackupEntryString (prefList, preferences, prefsFileName, PROFILE_NAME_PREF); - addBackupEntryString (prefList, preferences, prefsFileName, PROFILE_AVATAR_URL_PREF); - addBackupEntryInt (prefList, preferences, prefsFileName, PROFILE_AVATAR_ID_PREF); - addBackupEntryString (prefList, preferences, prefsFileName, PROFILE_KEY_PREF); - addBackupEntryBoolean(prefList, preferences, prefsFileName, IS_USING_FCM); - - return prefList; - } - - private static void addBackupEntryString( - List outPrefList, - SharedPreferences prefs, - String prefFileName, - String prefKey) { - String value = prefs.getString(prefKey, null); - if (value == null) { - logBackupEntry(prefKey, false); - return; - } - outPrefList.add(BackupProtos.SharedPreference.newBuilder() - .setFile(prefFileName) - .setKey(prefKey) - .setValue(value) - .build()); - logBackupEntry(prefKey, true); - } - - private static void addBackupEntryInt( - List outPrefList, - SharedPreferences prefs, - String prefFileName, - String prefKey) { - int value = prefs.getInt(prefKey, -1); - if (value == -1) { - logBackupEntry(prefKey, false); - return; - } - outPrefList.add(BackupProtos.SharedPreference.newBuilder() - .setFile(prefFileName) - .setKey(PREF_PREFIX_TYPE_INT + prefKey) // The prefix denotes the type of the preference. - .setValue(String.valueOf(value)) - .build()); - logBackupEntry(prefKey, true); - } - - private static void addBackupEntryBoolean( - List outPrefList, - SharedPreferences prefs, - String prefFileName, - String prefKey) { - if (!prefs.contains(prefKey)) { - logBackupEntry(prefKey, false); - return; - } - outPrefList.add(BackupProtos.SharedPreference.newBuilder() - .setFile(prefFileName) - .setKey(PREF_PREFIX_TYPE_BOOLEAN + prefKey) // The prefix denotes the type of the preference. - .setValue(String.valueOf(prefs.getBoolean(prefKey, false))) - .build()); - logBackupEntry(prefKey, true); - } - - private static void logBackupEntry(String prefName, boolean wasIncluded) { - StringBuilder sb = new StringBuilder(); - sb.append("Backup preference "); - sb.append(wasIncluded ? "+ " : "- "); - sb.append('\"').append(prefName).append("\" "); - if (!wasIncluded) { - sb.append("(is empty and not included)"); - } - Log.d(TAG, sb.toString()); - } - // endregion + // TODO: Remove this file +// +// private static final String TAG = TextSecurePreferences.class.getSimpleName(); +// +// public static final String IDENTITY_PREF = "pref_choose_identity"; +// public static final String CHANGE_PASSPHRASE_PREF = "pref_change_passphrase"; +// public static final String DISABLE_PASSPHRASE_PREF = "pref_disable_passphrase"; +// public static final String THEME_PREF = "pref_theme"; +// public static final String LANGUAGE_PREF = "pref_language"; +// private static final String MMSC_CUSTOM_HOST_PREF = "pref_apn_mmsc_custom_host"; +// public static final String MMSC_HOST_PREF = "pref_apn_mmsc_host"; +// private static final String MMSC_CUSTOM_PROXY_PREF = "pref_apn_mms_custom_proxy"; +// public static final String MMSC_PROXY_HOST_PREF = "pref_apn_mms_proxy"; +// private static final String MMSC_CUSTOM_PROXY_PORT_PREF = "pref_apn_mms_custom_proxy_port"; +// public static final String MMSC_PROXY_PORT_PREF = "pref_apn_mms_proxy_port"; +// private static final String MMSC_CUSTOM_USERNAME_PREF = "pref_apn_mmsc_custom_username"; +// public static final String MMSC_USERNAME_PREF = "pref_apn_mmsc_username"; +// private static final String MMSC_CUSTOM_PASSWORD_PREF = "pref_apn_mmsc_custom_password"; +// public static final String MMSC_PASSWORD_PREF = "pref_apn_mmsc_password"; +// public static final String THREAD_TRIM_LENGTH = "pref_trim_length"; +// public static final String THREAD_TRIM_NOW = "pref_trim_now"; +// public static final String ENABLE_MANUAL_MMS_PREF = "pref_enable_manual_mms"; +// +// private static final String LAST_VERSION_CODE_PREF = "last_version_code"; +// private static final String LAST_EXPERIENCE_VERSION_PREF = "last_experience_version_code"; +// private static final String EXPERIENCE_DISMISSED_PREF = "experience_dismissed"; +// public static final String RINGTONE_PREF = "pref_key_ringtone"; +// public static final String VIBRATE_PREF = "pref_key_vibrate"; +// private static final String NOTIFICATION_PREF = "pref_key_enable_notifications"; +// public static final String LED_COLOR_PREF = "pref_led_color"; +// public static final String LED_BLINK_PREF = "pref_led_blink"; +// private static final String LED_BLINK_PREF_CUSTOM = "pref_led_blink_custom"; +// public static final String ALL_MMS_PREF = "pref_all_mms"; +// public static final String ALL_SMS_PREF = "pref_all_sms"; +// public static final String PASSPHRASE_TIMEOUT_INTERVAL_PREF = "pref_timeout_interval"; +// public static final String PASSPHRASE_TIMEOUT_PREF = "pref_timeout_passphrase"; +// public static final String SCREEN_SECURITY_PREF = "pref_screen_security"; +// private static final String ENTER_SENDS_PREF = "pref_enter_sends"; +// private static final String ENTER_PRESENT_PREF = "pref_enter_key"; +// private static final String SMS_DELIVERY_REPORT_PREF = "pref_delivery_report_sms"; +// public static final String MMS_USER_AGENT = "pref_mms_user_agent"; +// private static final String MMS_CUSTOM_USER_AGENT = "pref_custom_mms_user_agent"; +// private static final String THREAD_TRIM_ENABLED = "pref_trim_threads"; +// private static final String LOCAL_NUMBER_PREF = "pref_local_number"; +// private static final String VERIFYING_STATE_PREF = "pref_verifying"; +// public static final String REGISTERED_GCM_PREF = "pref_gcm_registered"; +// private static final String GCM_PASSWORD_PREF = "pref_gcm_password"; +// private static final String SEEN_WELCOME_SCREEN_PREF = "pref_seen_welcome_screen"; +// private static final String PROMPTED_DEFAULT_SMS_PREF = "pref_prompted_default_sms"; +// private static final String PROMPTED_OPTIMIZE_DOZE_PREF = "pref_prompted_optimize_doze"; +// private static final String PROMPTED_SHARE_PREF = "pref_prompted_share"; +// private static final String SIGNALING_KEY_PREF = "pref_signaling_key"; +// private static final String DIRECTORY_FRESH_TIME_PREF = "pref_directory_refresh_time"; +// private static final String UPDATE_APK_REFRESH_TIME_PREF = "pref_update_apk_refresh_time"; +// private static final String UPDATE_APK_DOWNLOAD_ID = "pref_update_apk_download_id"; +// private static final String UPDATE_APK_DIGEST = "pref_update_apk_digest"; +// private static final String SIGNED_PREKEY_ROTATION_TIME_PREF = "pref_signed_pre_key_rotation_time"; +// +// private static final String IN_THREAD_NOTIFICATION_PREF = "pref_key_inthread_notifications"; +// private static final String SHOW_INVITE_REMINDER_PREF = "pref_show_invite_reminder"; +// public static final String MESSAGE_BODY_TEXT_SIZE_PREF = "pref_message_body_text_size"; +// +// private static final String LOCAL_REGISTRATION_ID_PREF = "pref_local_registration_id"; +// private static final String SIGNED_PREKEY_REGISTERED_PREF = "pref_signed_prekey_registered"; +// private static final String WIFI_SMS_PREF = "pref_wifi_sms"; +// +// private static final String GCM_DISABLED_PREF = "pref_gcm_disabled"; +// private static final String GCM_REGISTRATION_ID_PREF = "pref_gcm_registration_id"; +// private static final String GCM_REGISTRATION_ID_VERSION_PREF = "pref_gcm_registration_id_version"; +// private static final String GCM_REGISTRATION_ID_TIME_PREF = "pref_gcm_registration_id_last_set_time"; +// private static final String WEBSOCKET_REGISTERED_PREF = "pref_websocket_registered"; +// private static final String RATING_LATER_PREF = "pref_rating_later"; +// private static final String RATING_ENABLED_PREF = "pref_rating_enabled"; +// private static final String SIGNED_PREKEY_FAILURE_COUNT_PREF = "pref_signed_prekey_failure_count"; +// +// public static final String REPEAT_ALERTS_PREF = "pref_repeat_alerts"; +// public static final String NOTIFICATION_PRIVACY_PREF = "pref_notification_privacy"; +// public static final String NOTIFICATION_PRIORITY_PREF = "pref_notification_priority"; +// public static final String NEW_CONTACTS_NOTIFICATIONS = "pref_enable_new_contacts_notifications"; +// public static final String WEBRTC_CALLING_PREF = "pref_webrtc_calling"; +// +// public static final String MEDIA_DOWNLOAD_MOBILE_PREF = "pref_media_download_mobile"; +// public static final String MEDIA_DOWNLOAD_WIFI_PREF = "pref_media_download_wifi"; +// public static final String MEDIA_DOWNLOAD_ROAMING_PREF = "pref_media_download_roaming"; +// +// public static final String SYSTEM_EMOJI_PREF = "pref_system_emoji"; +// private static final String MULTI_DEVICE_PROVISIONED_PREF = "pref_multi_device"; +// public static final String DIRECT_CAPTURE_CAMERA_ID = "pref_direct_capture_camera_id"; +// private static final String ALWAYS_RELAY_CALLS_PREF = "pref_turn_only"; +// private static final String PROFILE_KEY_PREF = "pref_profile_key"; +// private static final String PROFILE_NAME_PREF = "pref_profile_name"; +// private static final String PROFILE_AVATAR_ID_PREF = "pref_profile_avatar_id"; +// private static final String PROFILE_AVATAR_URL_PREF = "pref_profile_avatar_url"; +// public static final String READ_RECEIPTS_PREF = "pref_read_receipts"; +// public static final String INCOGNITO_KEYBORAD_PREF = "pref_incognito_keyboard"; +// private static final String UNAUTHORIZED_RECEIVED = "pref_unauthorized_received"; +// private static final String SUCCESSFUL_DIRECTORY_PREF = "pref_successful_directory"; +// +// private static final String DATABASE_ENCRYPTED_SECRET = "pref_database_encrypted_secret"; +// private static final String DATABASE_UNENCRYPTED_SECRET = "pref_database_unencrypted_secret"; +// private static final String ATTACHMENT_ENCRYPTED_SECRET = "pref_attachment_encrypted_secret"; +// private static final String ATTACHMENT_UNENCRYPTED_SECRET = "pref_attachment_unencrypted_secret"; +// private static final String NEEDS_SQLCIPHER_MIGRATION = "pref_needs_sql_cipher_migration"; //TODO AC: Delete +// +// private static final String NEXT_PRE_KEY_ID = "pref_next_pre_key_id"; +// private static final String ACTIVE_SIGNED_PRE_KEY_ID = "pref_active_signed_pre_key_id"; +// private static final String NEXT_SIGNED_PRE_KEY_ID = "pref_next_signed_pre_key_id"; +// +// public static final String BACKUP_ENABLED = "pref_backup_enabled_v3"; +// private static final String BACKUP_PASSPHRASE = "pref_backup_passphrase"; +// private static final String ENCRYPTED_BACKUP_PASSPHRASE = "pref_encrypted_backup_passphrase"; +// private static final String BACKUP_TIME = "pref_backup_next_time"; +// public static final String BACKUP_NOW = "pref_backup_create"; +// private static final String BACKUP_SAVE_DIR = "pref_save_dir"; +// +// public static final String SCREEN_LOCK = "pref_android_screen_lock"; +// public static final String SCREEN_LOCK_TIMEOUT = "pref_android_screen_lock_timeout"; +// +// private static final String LAST_FULL_CONTACT_SYNC_TIME = "pref_last_full_contact_sync_time"; +// private static final String NEEDS_FULL_CONTACT_SYNC = "pref_needs_full_contact_sync"; +// +// private static final String LOG_ENCRYPTED_SECRET = "pref_log_encrypted_secret"; +// private static final String LOG_UNENCRYPTED_SECRET = "pref_log_unencrypted_secret"; +// +// private static final String NOTIFICATION_CHANNEL_VERSION = "pref_notification_channel_version"; +// private static final String NOTIFICATION_MESSAGES_CHANNEL_VERSION = "pref_notification_messages_channel_version"; +// +// private static final String NEEDS_MESSAGE_PULL = "pref_needs_message_pull"; +// +// private static final String UNIDENTIFIED_ACCESS_CERTIFICATE_ROTATION_TIME_PREF = "pref_unidentified_access_certificate_rotation_time"; +// private static final String UNIDENTIFIED_ACCESS_CERTIFICATE = "pref_unidentified_access_certificate"; +// public static final String UNIVERSAL_UNIDENTIFIED_ACCESS = "pref_universal_unidentified_access"; +// public static final String SHOW_UNIDENTIFIED_DELIVERY_INDICATORS = "pref_show_unidentifed_delivery_indicators"; +// private static final String UNIDENTIFIED_DELIVERY_ENABLED = "pref_unidentified_delivery_enabled"; +// +// public static final String TYPING_INDICATORS = "pref_typing_indicators"; +// +// public static final String LINK_PREVIEWS = "pref_link_previews"; +// +// private static final String GIF_GRID_LAYOUT = "pref_gif_grid_layout"; +// +// private static final String SEEN_STICKER_INTRO_TOOLTIP = "pref_seen_sticker_intro_tooltip"; +// +// private static final String MEDIA_KEYBOARD_MODE = "pref_media_keyboard_mode"; +// +// // region FCM +// private static final String IS_USING_FCM = "pref_is_using_fcm"; +// private static final String FCM_TOKEN = "pref_fcm_token"; +// private static final String LAST_FCM_TOKEN_UPLOAD_TIME = "pref_last_fcm_token_upload_time_2"; +// private static final String HAS_SEEN_PN_MODE_SHEET = "pref_has_seen_pn_mode_sheet"; +// +// public static boolean isUsingFCM(Context context) { +// return getBooleanPreference(context, IS_USING_FCM, false); +// } +// +// public static void setIsUsingFCM(Context context, boolean value) { +// setBooleanPreference(context, IS_USING_FCM, value); +// } +// +// public static String getFCMToken(Context context) { +// return getStringPreference(context, FCM_TOKEN, ""); +// } +// +// public static void setFCMToken(Context context, String value) { +// setStringPreference(context, FCM_TOKEN, value); +// } +// +// public static long getLastFCMUploadTime(Context context) { +// return getLongPreference(context, LAST_FCM_TOKEN_UPLOAD_TIME, 0); +// } +// +// public static void setLastFCMUploadTime(Context context, long value) { +// setLongPreference(context, LAST_FCM_TOKEN_UPLOAD_TIME, value); +// } +// // endregion +// +// public static boolean isScreenLockEnabled(@NonNull Context context) { +// return getBooleanPreference(context, SCREEN_LOCK, false); +// } +// +// public static void setScreenLockEnabled(@NonNull Context context, boolean value) { +// setBooleanPreference(context, SCREEN_LOCK, value); +// } +// +// public static long getScreenLockTimeout(@NonNull Context context) { +// return getLongPreference(context, SCREEN_LOCK_TIMEOUT, 0); +// } +// +// public static void setScreenLockTimeout(@NonNull Context context, long value) { +// setLongPreference(context, SCREEN_LOCK_TIMEOUT, value); +// } +// +// public static void setBackupPassphrase(@NonNull Context context, @Nullable String passphrase) { +// setStringPreference(context, BACKUP_PASSPHRASE, passphrase); +// } +// +// public static @Nullable String getBackupPassphrase(@NonNull Context context) { +// return getStringPreference(context, BACKUP_PASSPHRASE, null); +// } +// +// public static void setEncryptedBackupPassphrase(@NonNull Context context, @Nullable String encryptedPassphrase) { +// setStringPreference(context, ENCRYPTED_BACKUP_PASSPHRASE, encryptedPassphrase); +// } +// +// public static @Nullable String getEncryptedBackupPassphrase(@NonNull Context context) { +// return getStringPreference(context, ENCRYPTED_BACKUP_PASSPHRASE, null); +// } +// +// public static void setBackupEnabled(@NonNull Context context, boolean value) { +// setBooleanPreference(context, BACKUP_ENABLED, value); +// } +// +// public static boolean isBackupEnabled(@NonNull Context context) { +// return getBooleanPreference(context, BACKUP_ENABLED, false); +// } +// +// public static void setNextBackupTime(@NonNull Context context, long time) { +// setLongPreference(context, BACKUP_TIME, time); +// } +// +// public static long getNextBackupTime(@NonNull Context context) { +// return getLongPreference(context, BACKUP_TIME, -1); +// } +// +// public static void setBackupSaveDir(@NonNull Context context, String dirUri) { +// setStringPreference(context, BACKUP_SAVE_DIR, dirUri); +// } +// +// public static String getBackupSaveDir(@NonNull Context context) { +// return getStringPreference(context, BACKUP_SAVE_DIR, null); +// } +// +// public static int getNextPreKeyId(@NonNull Context context) { +// return getIntegerPreference(context, NEXT_PRE_KEY_ID, new SecureRandom().nextInt(Medium.MAX_VALUE)); +// } +// +// public static void setNextPreKeyId(@NonNull Context context, int value) { +// setIntegerPrefrence(context, NEXT_PRE_KEY_ID, value); +// } +// +// public static int getNextSignedPreKeyId(@NonNull Context context) { +// return getIntegerPreference(context, NEXT_SIGNED_PRE_KEY_ID, new SecureRandom().nextInt(Medium.MAX_VALUE)); +// } +// +// public static void setNextSignedPreKeyId(@NonNull Context context, int value) { +// setIntegerPrefrence(context, NEXT_SIGNED_PRE_KEY_ID, value); +// } +// +// public static int getActiveSignedPreKeyId(@NonNull Context context) { +// return getIntegerPreference(context, ACTIVE_SIGNED_PRE_KEY_ID, -1); +// } +// +// public static void setActiveSignedPreKeyId(@NonNull Context context, int value) { +// setIntegerPrefrence(context, ACTIVE_SIGNED_PRE_KEY_ID, value);; +// } +// +// public static void setNeedsSqlCipherMigration(@NonNull Context context, boolean value) { +// setBooleanPreference(context, NEEDS_SQLCIPHER_MIGRATION, value); +// EventBus.getDefault().post(new SqlCipherMigrationConstraintObserver.SqlCipherNeedsMigrationEvent()); +// } +// +// public static boolean getNeedsSqlCipherMigration(@NonNull Context context) { +// return getBooleanPreference(context, NEEDS_SQLCIPHER_MIGRATION, false); +// } +// +// public static void setAttachmentEncryptedSecret(@NonNull Context context, @NonNull String secret) { +// setStringPreference(context, ATTACHMENT_ENCRYPTED_SECRET, secret); +// } +// +// public static void setAttachmentUnencryptedSecret(@NonNull Context context, @Nullable String secret) { +// setStringPreference(context, ATTACHMENT_UNENCRYPTED_SECRET, secret); +// } +// +// public static @Nullable String getAttachmentEncryptedSecret(@NonNull Context context) { +// return getStringPreference(context, ATTACHMENT_ENCRYPTED_SECRET, null); +// } +// +// public static @Nullable String getAttachmentUnencryptedSecret(@NonNull Context context) { +// return getStringPreference(context, ATTACHMENT_UNENCRYPTED_SECRET, null); +// } +// +// public static void setDatabaseEncryptedSecret(@NonNull Context context, @NonNull String secret) { +// setStringPreference(context, DATABASE_ENCRYPTED_SECRET, secret); +// } +// +// public static void setDatabaseUnencryptedSecret(@NonNull Context context, @Nullable String secret) { +// setStringPreference(context, DATABASE_UNENCRYPTED_SECRET, secret); +// } +// +// public static @Nullable String getDatabaseUnencryptedSecret(@NonNull Context context) { +// return getStringPreference(context, DATABASE_UNENCRYPTED_SECRET, null); +// } +// +// public static @Nullable String getDatabaseEncryptedSecret(@NonNull Context context) { +// return getStringPreference(context, DATABASE_ENCRYPTED_SECRET, null); +// } +// +// public static void setHasSuccessfullyRetrievedDirectory(Context context, boolean value) { +// setBooleanPreference(context, SUCCESSFUL_DIRECTORY_PREF, value); +// } +// +// public static boolean hasSuccessfullyRetrievedDirectory(Context context) { +// return getBooleanPreference(context, SUCCESSFUL_DIRECTORY_PREF, false); +// } +// +// public static void setUnauthorizedReceived(Context context, boolean value) { +// setBooleanPreference(context, UNAUTHORIZED_RECEIVED, value); +// } +// +// public static boolean isUnauthorizedRecieved(Context context) { +// return getBooleanPreference(context, UNAUTHORIZED_RECEIVED, false); +// } +// +// public static boolean isIncognitoKeyboardEnabled(Context context) { +// return getBooleanPreference(context, INCOGNITO_KEYBORAD_PREF, true); +// } +// +// public static boolean isReadReceiptsEnabled(Context context) { +// return getBooleanPreference(context, READ_RECEIPTS_PREF, false); +// } +// +// public static void setReadReceiptsEnabled(Context context, boolean enabled) { +// setBooleanPreference(context, READ_RECEIPTS_PREF, enabled); +// } +// +// public static boolean isTypingIndicatorsEnabled(Context context) { +// return getBooleanPreference(context, TYPING_INDICATORS, false); +// } +// +// public static void setTypingIndicatorsEnabled(Context context, boolean enabled) { +// setBooleanPreference(context, TYPING_INDICATORS, enabled); +// } +// +// public static boolean isLinkPreviewsEnabled(Context context) { +// return getBooleanPreference(context, LINK_PREVIEWS, false); +// } +// +// public static void setLinkPreviewsEnabled(Context context, boolean enabled) { +// setBooleanPreference(context, LINK_PREVIEWS, enabled); +// } +// +// public static boolean isGifSearchInGridLayout(Context context) { +// return getBooleanPreference(context, GIF_GRID_LAYOUT, false); +// } +// +// public static void setIsGifSearchInGridLayout(Context context, boolean isGrid) { +// setBooleanPreference(context, GIF_GRID_LAYOUT, isGrid); +// } +// +// public static @Nullable String getProfileKey(Context context) { +// return getStringPreference(context, PROFILE_KEY_PREF, null); +// } +// +// public static void setProfileKey(Context context, String key) { +// setStringPreference(context, PROFILE_KEY_PREF, key); +// } +// +// public static void setProfileName(Context context, String name) { +// setStringPreference(context, PROFILE_NAME_PREF, name); +// } +// +// public static String getProfileName(Context context) { +// return getStringPreference(context, PROFILE_NAME_PREF, null); +// } +// +// public static void setProfileAvatarId(Context context, int id) { +// setIntegerPrefrence(context, PROFILE_AVATAR_ID_PREF, id); +// } +// +// public static int getProfileAvatarId(Context context) { +// return getIntegerPreference(context, PROFILE_AVATAR_ID_PREF, 0); +// } +// +// public static void setProfilePictureURL(Context context, String url) { +// setStringPreference(context, PROFILE_AVATAR_URL_PREF, url); +// } +// +// public static String getProfilePictureURL(Context context) { +// return getStringPreference(context, PROFILE_AVATAR_URL_PREF, null); +// } +// +// public static int getNotificationPriority(Context context) { +// return Integer.valueOf(getStringPreference(context, NOTIFICATION_PRIORITY_PREF, String.valueOf(NotificationCompat.PRIORITY_HIGH))); +// } +// +// public static int getMessageBodyTextSize(Context context) { +// return Integer.valueOf(getStringPreference(context, MESSAGE_BODY_TEXT_SIZE_PREF, "16")); +// } +// +// public static boolean isTurnOnly(Context context) { +// return getBooleanPreference(context, ALWAYS_RELAY_CALLS_PREF, false); +// } +// +// public static boolean isFcmDisabled(Context context) { +// return getBooleanPreference(context, GCM_DISABLED_PREF, false); +// } +// +// public static void setFcmDisabled(Context context, boolean disabled) { +// setBooleanPreference(context, GCM_DISABLED_PREF, disabled); +// } +// +// public static boolean isWebrtcCallingEnabled(Context context) { +// return getBooleanPreference(context, WEBRTC_CALLING_PREF, false); +// } +// +// public static void setWebrtcCallingEnabled(Context context, boolean enabled) { +// setBooleanPreference(context, WEBRTC_CALLING_PREF, enabled); +// } +// +// public static void setDirectCaptureCameraId(Context context, int value) { +// setIntegerPrefrence(context, DIRECT_CAPTURE_CAMERA_ID, value); +// } +// +// @SuppressWarnings("deprecation") +// public static int getDirectCaptureCameraId(Context context) { +// return getIntegerPreference(context, DIRECT_CAPTURE_CAMERA_ID, CameraInfo.CAMERA_FACING_FRONT); +// } +// +// public static void setMultiDevice(Context context, boolean value) { +// setBooleanPreference(context, MULTI_DEVICE_PROVISIONED_PREF, value); +// } +// +// public static boolean isMultiDevice(Context context) { +// return getBooleanPreference(context, MULTI_DEVICE_PROVISIONED_PREF, false); +// } +// +// public static void setSignedPreKeyFailureCount(Context context, int value) { +// setIntegerPrefrence(context, SIGNED_PREKEY_FAILURE_COUNT_PREF, value); +// } +// +// public static int getSignedPreKeyFailureCount(Context context) { +// return getIntegerPreference(context, SIGNED_PREKEY_FAILURE_COUNT_PREF, 0); +// } +// +// public static NotificationPrivacyPreference getNotificationPrivacy(Context context) { +// return new NotificationPrivacyPreference(getStringPreference(context, NOTIFICATION_PRIVACY_PREF, "all")); +// } +// +// public static boolean isNewContactsNotificationEnabled(Context context) { +// return getBooleanPreference(context, NEW_CONTACTS_NOTIFICATIONS, true); +// } +// +// public static long getRatingLaterTimestamp(Context context) { +// return getLongPreference(context, RATING_LATER_PREF, 0); +// } +// +// public static void setRatingLaterTimestamp(Context context, long timestamp) { +// setLongPreference(context, RATING_LATER_PREF, timestamp); +// } +// +// public static boolean isRatingEnabled(Context context) { +// return getBooleanPreference(context, RATING_ENABLED_PREF, true); +// } +// +// public static void setRatingEnabled(Context context, boolean enabled) { +// setBooleanPreference(context, RATING_ENABLED_PREF, enabled); +// } +// +// public static boolean isWebsocketRegistered(Context context) { +// return getBooleanPreference(context, WEBSOCKET_REGISTERED_PREF, false); +// } +// +// public static void setWebsocketRegistered(Context context, boolean registered) { +// setBooleanPreference(context, WEBSOCKET_REGISTERED_PREF, registered); +// } +// +// public static boolean isWifiSmsEnabled(Context context) { +// return getBooleanPreference(context, WIFI_SMS_PREF, false); +// } +// +// public static int getRepeatAlertsCount(Context context) { +// try { +// return Integer.parseInt(getStringPreference(context, REPEAT_ALERTS_PREF, "0")); +// } catch (NumberFormatException e) { +// Log.w(TAG, e); +// return 0; +// } +// } +// +// public static void setRepeatAlertsCount(Context context, int count) { +// setStringPreference(context, REPEAT_ALERTS_PREF, String.valueOf(count)); +// } +// +// public static boolean isSignedPreKeyRegistered(Context context) { +// return getBooleanPreference(context, SIGNED_PREKEY_REGISTERED_PREF, false); +// } +// +// public static void setSignedPreKeyRegistered(Context context, boolean value) { +// setBooleanPreference(context, SIGNED_PREKEY_REGISTERED_PREF, value); +// } +// +// public static void setFcmToken(Context context, String registrationId) { +// setStringPreference(context, GCM_REGISTRATION_ID_PREF, registrationId); +// setIntegerPrefrence(context, GCM_REGISTRATION_ID_VERSION_PREF, Util.getCanonicalVersionCode()); +// } +// +// public static String getFcmToken(Context context) { +// int storedRegistrationIdVersion = getIntegerPreference(context, GCM_REGISTRATION_ID_VERSION_PREF, 0); +// +// if (storedRegistrationIdVersion != Util.getCanonicalVersionCode()) { +// return null; +// } else { +// return getStringPreference(context, GCM_REGISTRATION_ID_PREF, null); +// } +// } +// +// public static long getFcmTokenLastSetTime(Context context) { +// return getLongPreference(context, GCM_REGISTRATION_ID_TIME_PREF, 0); +// } +// +// public static void setFcmTokenLastSetTime(Context context, long timestamp) { +// setLongPreference(context, GCM_REGISTRATION_ID_TIME_PREF, timestamp); +// } +// +// public static boolean isSmsEnabled(Context context) { +// return Util.isDefaultSmsProvider(context); +// } +// +// public static int getLocalRegistrationId(Context context) { +// return getIntegerPreference(context, LOCAL_REGISTRATION_ID_PREF, 0); +// } +// +// public static void setLocalRegistrationId(Context context, int registrationId) { +// setIntegerPrefrence(context, LOCAL_REGISTRATION_ID_PREF, registrationId); +// } +// +// public static void removeLocalRegistrationId(Context context) { +// removePreference(context, LOCAL_REGISTRATION_ID_PREF); +// } +// +// public static boolean isInThreadNotifications(Context context) { +// return getBooleanPreference(context, IN_THREAD_NOTIFICATION_PREF, true); +// } +// +// public static long getUnidentifiedAccessCertificateRotationTime(Context context) { +// return getLongPreference(context, UNIDENTIFIED_ACCESS_CERTIFICATE_ROTATION_TIME_PREF, 0L); +// } +// +// public static void setUnidentifiedAccessCertificateRotationTime(Context context, long value) { +// setLongPreference(context, UNIDENTIFIED_ACCESS_CERTIFICATE_ROTATION_TIME_PREF, value); +// } +// +// public static void setUnidentifiedAccessCertificate(Context context, byte[] value) { +// setStringPreference(context, UNIDENTIFIED_ACCESS_CERTIFICATE, Base64.encodeBytes(value)); +// } +// +// public static byte[] getUnidentifiedAccessCertificate(Context context) { +// try { +// String result = getStringPreference(context, UNIDENTIFIED_ACCESS_CERTIFICATE, null); +// if (result != null) { +// return Base64.decode(result); +// } +// } catch (IOException e) { +// Log.w(TAG, e); +// } +// +// return null; +// } +// +// public static boolean isUniversalUnidentifiedAccess(Context context) { +// return getBooleanPreference(context, UNIVERSAL_UNIDENTIFIED_ACCESS, false); +// } +// +// public static boolean isShowUnidentifiedDeliveryIndicatorsEnabled(Context context) { +// return getBooleanPreference(context, SHOW_UNIDENTIFIED_DELIVERY_INDICATORS, false); +// } +// +// public static void setIsUnidentifiedDeliveryEnabled(Context context, boolean enabled) { +// setBooleanPreference(context, UNIDENTIFIED_DELIVERY_ENABLED, enabled); +// } +// +// public static boolean isUnidentifiedDeliveryEnabled(Context context) { +// // Loki - Always enable unidentified sender +// return true; +// // return getBooleanPreference(context, UNIDENTIFIED_DELIVERY_ENABLED, true); +// } +// +// public static long getSignedPreKeyRotationTime(Context context) { +// return getLongPreference(context, SIGNED_PREKEY_ROTATION_TIME_PREF, 0L); +// } +// +// public static void setSignedPreKeyRotationTime(Context context, long value) { +// setLongPreference(context, SIGNED_PREKEY_ROTATION_TIME_PREF, value); +// } +// +// public static long getDirectoryRefreshTime(Context context) { +// return getLongPreference(context, DIRECTORY_FRESH_TIME_PREF, 0L); +// } +// +// public static void setDirectoryRefreshTime(Context context, long value) { +// setLongPreference(context, DIRECTORY_FRESH_TIME_PREF, value); +// } +// +// public static long getUpdateApkRefreshTime(Context context) { +// return getLongPreference(context, UPDATE_APK_REFRESH_TIME_PREF, 0L); +// } +// +// public static void setUpdateApkRefreshTime(Context context, long value) { +// setLongPreference(context, UPDATE_APK_REFRESH_TIME_PREF, value); +// } +// +// public static void setUpdateApkDownloadId(Context context, long value) { +// setLongPreference(context, UPDATE_APK_DOWNLOAD_ID, value); +// } +// +// public static long getUpdateApkDownloadId(Context context) { +// return getLongPreference(context, UPDATE_APK_DOWNLOAD_ID, -1); +// } +// +// public static void setUpdateApkDigest(Context context, String value) { +// setStringPreference(context, UPDATE_APK_DIGEST, value); +// } +// +// public static String getUpdateApkDigest(Context context) { +// return getStringPreference(context, UPDATE_APK_DIGEST, null); +// } +// +// public static String getLocalNumber(Context context) { +// return getStringPreference(context, LOCAL_NUMBER_PREF, null); +// } +// +// public static void setLocalNumber(Context context, String localNumber) { +// setStringPreference(context, LOCAL_NUMBER_PREF, localNumber.toLowerCase()); +// } +// +// public static void removeLocalNumber(Context context) { +// removePreference(context, LOCAL_NUMBER_PREF); +// } +// +// public static String getPushServerPassword(Context context) { +// return getStringPreference(context, GCM_PASSWORD_PREF, null); +// } +// +// public static void setPushServerPassword(Context context, String password) { +// setStringPreference(context, GCM_PASSWORD_PREF, password); +// } +// +// public static String getSignalingKey(Context context) { +// return getStringPreference(context, SIGNALING_KEY_PREF, null); +// } +// +// public static boolean isEnterImeKeyEnabled(Context context) { +// return getBooleanPreference(context, ENTER_PRESENT_PREF, false); +// } +// +// public static boolean isEnterSendsEnabled(Context context) { +// return getBooleanPreference(context, ENTER_SENDS_PREF, false); +// } +// +// public static boolean isPasswordDisabled(Context context) { +// return getBooleanPreference(context, DISABLE_PASSPHRASE_PREF, false); +// } +// +// public static void setPasswordDisabled(Context context, boolean disabled) { +// setBooleanPreference(context, DISABLE_PASSPHRASE_PREF, disabled); +// } +// +// public static boolean getUseCustomMmsc(Context context) { +// boolean legacy = TextSecurePreferences.isLegacyUseLocalApnsEnabled(context); +// return getBooleanPreference(context, MMSC_CUSTOM_HOST_PREF, legacy); +// } +// +// public static void setUseCustomMmsc(Context context, boolean value) { +// setBooleanPreference(context, MMSC_CUSTOM_HOST_PREF, value); +// } +// +// public static String getMmscUrl(Context context) { +// return getStringPreference(context, MMSC_HOST_PREF, ""); +// } +// +// public static void setMmscUrl(Context context, String mmsc) { +// setStringPreference(context, MMSC_HOST_PREF, mmsc); +// } +// +// public static boolean getUseCustomMmscProxy(Context context) { +// boolean legacy = TextSecurePreferences.isLegacyUseLocalApnsEnabled(context); +// return getBooleanPreference(context, MMSC_CUSTOM_PROXY_PREF, legacy); +// } +// +// public static void setUseCustomMmscProxy(Context context, boolean value) { +// setBooleanPreference(context, MMSC_CUSTOM_PROXY_PREF, value); +// } +// +// public static String getMmscProxy(Context context) { +// return getStringPreference(context, MMSC_PROXY_HOST_PREF, ""); +// } +// +// public static void setMmscProxy(Context context, String value) { +// setStringPreference(context, MMSC_PROXY_HOST_PREF, value); +// } +// +// public static boolean getUseCustomMmscProxyPort(Context context) { +// boolean legacy = TextSecurePreferences.isLegacyUseLocalApnsEnabled(context); +// return getBooleanPreference(context, MMSC_CUSTOM_PROXY_PORT_PREF, legacy); +// } +// +// public static void setUseCustomMmscProxyPort(Context context, boolean value) { +// setBooleanPreference(context, MMSC_CUSTOM_PROXY_PORT_PREF, value); +// } +// +// public static String getMmscProxyPort(Context context) { +// return getStringPreference(context, MMSC_PROXY_PORT_PREF, ""); +// } +// +// public static void setMmscProxyPort(Context context, String value) { +// setStringPreference(context, MMSC_PROXY_PORT_PREF, value); +// } +// +// public static boolean getUseCustomMmscUsername(Context context) { +// boolean legacy = TextSecurePreferences.isLegacyUseLocalApnsEnabled(context); +// return getBooleanPreference(context, MMSC_CUSTOM_USERNAME_PREF, legacy); +// } +// +// public static void setUseCustomMmscUsername(Context context, boolean value) { +// setBooleanPreference(context, MMSC_CUSTOM_USERNAME_PREF, value); +// } +// +// public static String getMmscUsername(Context context) { +// return getStringPreference(context, MMSC_USERNAME_PREF, ""); +// } +// +// public static void setMmscUsername(Context context, String value) { +// setStringPreference(context, MMSC_USERNAME_PREF, value); +// } +// +// public static boolean getUseCustomMmscPassword(Context context) { +// boolean legacy = TextSecurePreferences.isLegacyUseLocalApnsEnabled(context); +// return getBooleanPreference(context, MMSC_CUSTOM_PASSWORD_PREF, legacy); +// } +// +// public static void setUseCustomMmscPassword(Context context, boolean value) { +// setBooleanPreference(context, MMSC_CUSTOM_PASSWORD_PREF, value); +// } +// +// public static String getMmscPassword(Context context) { +// return getStringPreference(context, MMSC_PASSWORD_PREF, ""); +// } +// +// public static void setMmscPassword(Context context, String value) { +// setStringPreference(context, MMSC_PASSWORD_PREF, value); +// } +// +// public static String getMmsUserAgent(Context context, String defaultUserAgent) { +// boolean useCustom = getBooleanPreference(context, MMS_CUSTOM_USER_AGENT, false); +// +// if (useCustom) return getStringPreference(context, MMS_USER_AGENT, defaultUserAgent); +// else return defaultUserAgent; +// } +// +// public static String getIdentityContactUri(Context context) { +// return getStringPreference(context, IDENTITY_PREF, null); +// } +// +// public static void setIdentityContactUri(Context context, String identityUri) { +// setStringPreference(context, IDENTITY_PREF, identityUri); +// } +// +// public static void setScreenSecurityEnabled(Context context, boolean value) { +// setBooleanPreference(context, SCREEN_SECURITY_PREF, value); +// } +// +// public static boolean isScreenSecurityEnabled(Context context) { +// return getBooleanPreference(context, SCREEN_SECURITY_PREF, true); +// } +// +// public static boolean isLegacyUseLocalApnsEnabled(Context context) { +// return getBooleanPreference(context, ENABLE_MANUAL_MMS_PREF, false); +// } +// +// public static int getLastVersionCode(Context context) { +// return getIntegerPreference(context, LAST_VERSION_CODE_PREF, 0); +// } +// +// public static void setLastVersionCode(Context context, int versionCode) throws IOException { +// if (!setIntegerPrefrenceBlocking(context, LAST_VERSION_CODE_PREF, versionCode)) { +// throw new IOException("couldn't write version code to sharedpreferences"); +// } +// } +// +// public static int getLastExperienceVersionCode(Context context) { +// return getIntegerPreference(context, LAST_EXPERIENCE_VERSION_PREF, 0); +// } +// +// public static void setLastExperienceVersionCode(Context context, int versionCode) { +// setIntegerPrefrence(context, LAST_EXPERIENCE_VERSION_PREF, versionCode); +// } +// +// public static int getExperienceDismissedVersionCode(Context context) { +// return getIntegerPreference(context, EXPERIENCE_DISMISSED_PREF, 0); +// } +// +// public static void setExperienceDismissedVersionCode(Context context, int versionCode) { +// setIntegerPrefrence(context, EXPERIENCE_DISMISSED_PREF, versionCode); +// } +// +// public static String getTheme(Context context) { +// return getStringPreference(context, THEME_PREF, "light"); +// } +// +// public static boolean isVerifying(Context context) { +// return getBooleanPreference(context, VERIFYING_STATE_PREF, false); +// } +// +// public static void setVerifying(Context context, boolean verifying) { +// setBooleanPreference(context, VERIFYING_STATE_PREF, verifying); +// } +// +// public static boolean isPushRegistered(Context context) { +// return getBooleanPreference(context, REGISTERED_GCM_PREF, false); +// } +// +// public static void setPushRegistered(Context context, boolean registered) { +// Log.i(TAG, "Setting push registered: " + registered); +// setBooleanPreference(context, REGISTERED_GCM_PREF, registered); +// } +// +// public static boolean isShowInviteReminders(Context context) { +// return getBooleanPreference(context, SHOW_INVITE_REMINDER_PREF, true); +// } +// +// public static boolean isPassphraseTimeoutEnabled(Context context) { +// return getBooleanPreference(context, PASSPHRASE_TIMEOUT_PREF, false); +// } +// +// public static int getPassphraseTimeoutInterval(Context context) { +// return getIntegerPreference(context, PASSPHRASE_TIMEOUT_INTERVAL_PREF, 5 * 60); +// } +// +// public static void setPassphraseTimeoutInterval(Context context, int interval) { +// setIntegerPrefrence(context, PASSPHRASE_TIMEOUT_INTERVAL_PREF, interval); +// } +// +// public static String getLanguage(Context context) { +// return getStringPreference(context, LANGUAGE_PREF, "zz"); +// } +// +// public static void setLanguage(Context context, String language) { +// setStringPreference(context, LANGUAGE_PREF, language); +// } +// +// public static boolean isSmsDeliveryReportsEnabled(Context context) { +// return getBooleanPreference(context, SMS_DELIVERY_REPORT_PREF, false); +// } +// +// public static boolean hasSeenWelcomeScreen(Context context) { +// return getBooleanPreference(context, SEEN_WELCOME_SCREEN_PREF, false); +// } +// +// public static void setHasSeenWelcomeScreen(Context context, boolean value) { +// setBooleanPreference(context, SEEN_WELCOME_SCREEN_PREF, value); +// } +// +// public static boolean hasPromptedDefaultSmsProvider(Context context) { +// return getBooleanPreference(context, PROMPTED_DEFAULT_SMS_PREF, false); +// } +// +// public static void setPromptedDefaultSmsProvider(Context context, boolean value) { +// setBooleanPreference(context, PROMPTED_DEFAULT_SMS_PREF, value); +// } +// +// public static void setPromptedOptimizeDoze(Context context, boolean value) { +// setBooleanPreference(context, PROMPTED_OPTIMIZE_DOZE_PREF, value); +// } +// +// public static boolean hasPromptedOptimizeDoze(Context context) { +// return getBooleanPreference(context, PROMPTED_OPTIMIZE_DOZE_PREF, false); +// } +// +// public static boolean hasPromptedShare(Context context) { +// return getBooleanPreference(context, PROMPTED_SHARE_PREF, false); +// } +// +// public static void setPromptedShare(Context context, boolean value) { +// setBooleanPreference(context, PROMPTED_SHARE_PREF, value); +// } +// +// public static boolean isInterceptAllMmsEnabled(Context context) { +// return getBooleanPreference(context, ALL_MMS_PREF, true); +// } +// +// public static boolean isInterceptAllSmsEnabled(Context context) { +// return getBooleanPreference(context, ALL_SMS_PREF, true); +// } +// +// public static boolean isNotificationsEnabled(Context context) { +// return getBooleanPreference(context, NOTIFICATION_PREF, true); +// } +// +// public static @NonNull Uri getNotificationRingtone(Context context) { +// String result = getStringPreference(context, RINGTONE_PREF, Settings.System.DEFAULT_NOTIFICATION_URI.toString()); +// +// if (result != null && result.startsWith("file:")) { +// result = Settings.System.DEFAULT_NOTIFICATION_URI.toString(); +// } +// +// return Uri.parse(result); +// } +// +// public static void removeNotificationRingtone(Context context) { +// removePreference(context, RINGTONE_PREF); +// } +// +// public static void setNotificationRingtone(Context context, String ringtone) { +// setStringPreference(context, RINGTONE_PREF, ringtone); +// } +// +// public static void setNotificationVibrateEnabled(Context context, boolean enabled) { +// setBooleanPreference(context, VIBRATE_PREF, enabled); +// } +// +// public static boolean isNotificationVibrateEnabled(Context context) { +// return getBooleanPreference(context, VIBRATE_PREF, true); +// } +// +// public static String getNotificationLedColor(Context context) { +// return getStringPreference(context, LED_COLOR_PREF, "blue"); +// } +// +// public static String getNotificationLedPattern(Context context) { +// return getStringPreference(context, LED_BLINK_PREF, "500,2000"); +// } +// +// public static String getNotificationLedPatternCustom(Context context) { +// return getStringPreference(context, LED_BLINK_PREF_CUSTOM, "500,2000"); +// } +// +// public static void setNotificationLedPatternCustom(Context context, String pattern) { +// setStringPreference(context, LED_BLINK_PREF_CUSTOM, pattern); +// } +// +// public static boolean isThreadLengthTrimmingEnabled(Context context) { +// return getBooleanPreference(context, THREAD_TRIM_ENABLED, false); +// } +// +// public static int getThreadTrimLength(Context context) { +// return Integer.parseInt(getStringPreference(context, THREAD_TRIM_LENGTH, "500")); +// } +// +// public static boolean isSystemEmojiPreferred(Context context) { +// return getBooleanPreference(context, SYSTEM_EMOJI_PREF, false); +// } +// +// public static @NonNull Set getMobileMediaDownloadAllowed(Context context) { +// return getMediaDownloadAllowed(context, MEDIA_DOWNLOAD_MOBILE_PREF, R.array.pref_media_download_mobile_data_default); +// } +// +// public static @NonNull Set getWifiMediaDownloadAllowed(Context context) { +// return getMediaDownloadAllowed(context, MEDIA_DOWNLOAD_WIFI_PREF, R.array.pref_media_download_wifi_default); +// } +// +// public static @NonNull Set getRoamingMediaDownloadAllowed(Context context) { +// return getMediaDownloadAllowed(context, MEDIA_DOWNLOAD_ROAMING_PREF, R.array.pref_media_download_roaming_default); +// } +// +// private static @NonNull Set getMediaDownloadAllowed(Context context, String key, @ArrayRes int defaultValuesRes) { +// return getStringSetPreference(context, +// key, +// new HashSet<>(Arrays.asList(context.getResources().getStringArray(defaultValuesRes)))); +// } +// +// public static long getLastFullContactSyncTime(Context context) { +// return getLongPreference(context, LAST_FULL_CONTACT_SYNC_TIME, 0); +// } +// +// public static void setLastFullContactSyncTime(Context context, long timestamp) { +// setLongPreference(context, LAST_FULL_CONTACT_SYNC_TIME, timestamp); +// } +// +// public static boolean needsFullContactSync(Context context) { +// return getBooleanPreference(context, NEEDS_FULL_CONTACT_SYNC, false); +// } +// +// public static void setNeedsFullContactSync(Context context, boolean needsSync) { +// setBooleanPreference(context, NEEDS_FULL_CONTACT_SYNC, needsSync); +// } +// +// public static void setLogEncryptedSecret(Context context, String base64Secret) { +// setStringPreference(context, LOG_ENCRYPTED_SECRET, base64Secret); +// } +// +// public static String getLogEncryptedSecret(Context context) { +// return getStringPreference(context, LOG_ENCRYPTED_SECRET, null); +// } +// +// public static void setLogUnencryptedSecret(Context context, String base64Secret) { +// setStringPreference(context, LOG_UNENCRYPTED_SECRET, base64Secret); +// } +// +// public static String getLogUnencryptedSecret(Context context) { +// return getStringPreference(context, LOG_UNENCRYPTED_SECRET, null); +// } +// +// public static int getNotificationChannelVersion(Context context) { +// return getIntegerPreference(context, NOTIFICATION_CHANNEL_VERSION, 1); +// } +// +// public static void setNotificationChannelVersion(Context context, int version) { +// setIntegerPrefrence(context, NOTIFICATION_CHANNEL_VERSION, version); +// } +// +// public static int getNotificationMessagesChannelVersion(Context context) { +// return getIntegerPreference(context, NOTIFICATION_MESSAGES_CHANNEL_VERSION, 1); +// } +// +// public static void setNotificationMessagesChannelVersion(Context context, int version) { +// setIntegerPrefrence(context, NOTIFICATION_MESSAGES_CHANNEL_VERSION, version); +// } +// +// public static boolean getNeedsMessagePull(Context context) { +// return getBooleanPreference(context, NEEDS_MESSAGE_PULL, false); +// } +// +// public static void setNeedsMessagePull(Context context, boolean needsMessagePull) { +// setBooleanPreference(context, NEEDS_MESSAGE_PULL, needsMessagePull); +// } +// +// public static boolean hasSeenStickerIntroTooltip(Context context) { +// return getBooleanPreference(context, SEEN_STICKER_INTRO_TOOLTIP, false); +// } +// +// public static void setHasSeenStickerIntroTooltip(Context context, boolean seenStickerTooltip) { +// setBooleanPreference(context, SEEN_STICKER_INTRO_TOOLTIP, seenStickerTooltip); +// } +// +// public static void setMediaKeyboardMode(Context context, MediaKeyboardMode mode) { +// setStringPreference(context, MEDIA_KEYBOARD_MODE, mode.name()); +// } +// +// public static MediaKeyboardMode getMediaKeyboardMode(Context context) { +// String name = getStringPreference(context, MEDIA_KEYBOARD_MODE, MediaKeyboardMode.EMOJI.name()); +// return MediaKeyboardMode.valueOf(name); +// } +// +// public static void setBooleanPreference(Context context, String key, boolean value) { +// PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(key, value).apply(); +// } +// +// public static boolean getBooleanPreference(Context context, String key, boolean defaultValue) { +// return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(key, defaultValue); +// } +// +// public static void setStringPreference(Context context, String key, String value) { +// PreferenceManager.getDefaultSharedPreferences(context).edit().putString(key, value).apply(); +// } +// +// public static String getStringPreference(Context context, String key, String defaultValue) { +// return PreferenceManager.getDefaultSharedPreferences(context).getString(key, defaultValue); +// } +// +// private static int getIntegerPreference(Context context, String key, int defaultValue) { +// return PreferenceManager.getDefaultSharedPreferences(context).getInt(key, defaultValue); +// } +// +// private static void setIntegerPrefrence(Context context, String key, int value) { +// PreferenceManager.getDefaultSharedPreferences(context).edit().putInt(key, value).apply(); +// } +// +// private static boolean setIntegerPrefrenceBlocking(Context context, String key, int value) { +// return PreferenceManager.getDefaultSharedPreferences(context).edit().putInt(key, value).commit(); +// } +// +// private static long getLongPreference(Context context, String key, long defaultValue) { +// return PreferenceManager.getDefaultSharedPreferences(context).getLong(key, defaultValue); +// } +// +// private static void setLongPreference(Context context, String key, long value) { +// PreferenceManager.getDefaultSharedPreferences(context).edit().putLong(key, value).apply(); +// } +// +// private static void removePreference(Context context, String key) { +// PreferenceManager.getDefaultSharedPreferences(context).edit().remove(key).apply(); +// } +// +// private static Set getStringSetPreference(Context context, String key, Set defaultValues) { +// final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); +// if (prefs.contains(key)) { +// return prefs.getStringSet(key, Collections.emptySet()); +// } else { +// return defaultValues; +// } +// } +// +// // NEVER rename these -- they're persisted by name +// public enum MediaKeyboardMode { +// EMOJI, STICKER +// } +// +// // region Loki +// public static long getBackgroundPollTime(Context context) { +// return getLongPreference(context, "background_poll_time", 0L); +// } +// +// public static void setBackgroundPollTime(Context context, long backgroundPollTime) { +// setLongPreference(context, "background_poll_time", backgroundPollTime); +// } +// +// public static long getOpenGroupBackgroundPollTime(Context context) { +// return getLongPreference(context, "public_chat_background_poll_time", 0L); +// } +// +// public static void setOpenGroupBackgroundPollTime(Context context, long backgroundPollTime) { +// setLongPreference(context, "public_chat_background_poll_time", backgroundPollTime); +// } +// +// public static boolean isChatSetUp(Context context, String id) { +// return getBooleanPreference(context, "is_chat_set_up" + "?chat=" + id, false); +// } +// +// public static void markChatSetUp(Context context, String id) { +// setBooleanPreference(context, "is_chat_set_up" + "?chat=" + id, true); +// } +// +// public static String getMasterHexEncodedPublicKey(Context context) { +// return getStringPreference(context, "master_hex_encoded_public_key", null); +// } +// +// public static void setMasterHexEncodedPublicKey(Context context, String masterHexEncodedPublicKey) { +// setStringPreference(context, "master_hex_encoded_public_key", masterHexEncodedPublicKey.toLowerCase()); +// } +// +// public static Boolean getHasViewedSeed(Context context) { +// return getBooleanPreference(context, "has_viewed_seed", false); +// } +// +// public static void setHasViewedSeed(Context context, Boolean hasViewedSeed) { +// setBooleanPreference(context, "has_viewed_seed", hasViewedSeed); +// } +// +// public static void setNeedsDatabaseReset(Context context, boolean resetDatabase) { +// PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("database_reset", resetDatabase).commit(); +// } +// +// public static boolean getNeedsDatabaseReset(Context context) { +// return getBooleanPreference(context, "database_reset", false); +// } +// +// public static void setWasUnlinked(Context context, boolean value) { +// // We do it this way so that it gets persisted in storage straight away +// PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("database_reset_unpair", value).commit(); +// } +// +// public static boolean getWasUnlinked(Context context) { +// return getBooleanPreference(context, "database_reset_unpair", false); +// } +// +// public static void setNeedsIsRevokedSlaveDeviceCheck(Context context, boolean value) { +// setBooleanPreference(context, "needs_revocation", value); +// } +// +// public static boolean getNeedsIsRevokedSlaveDeviceCheck(Context context) { +// return getBooleanPreference(context, "needs_revocation", false); +// } +// +// public static void setRestorationTime(Context context, long time) { +// setLongPreference(context, "restoration_time", time); +// } +// +// public static long getRestorationTime(Context context) { +// return getLongPreference(context, "restoration_time", 0); +// } +// +// public static boolean getHasSeenOpenGroupSuggestionSheet(Context context) { +// return getBooleanPreference(context, "has_seen_open_group_suggestion_sheet", false); +// } +// +// public static void setHasSeenOpenGroupSuggestionSheet(Context context) { +// setBooleanPreference(context, "has_seen_open_group_suggestion_sheet", true); +// } +// +// public static long getLastProfilePictureUpload(Context context) { +// return getLongPreference(context, "last_profile_picture_upload", 0); +// } +// +// public static void setLastProfilePictureUpload(Context context, long newValue) { +// setLongPreference(context, "last_profile_picture_upload", newValue); +// } +// +// public static boolean hasSeenGIFMetaDataWarning(Context context) { +// return getBooleanPreference(context, "has_seen_gif_metadata_warning", false); +// } +// +// public static void setHasSeenGIFMetaDataWarning(Context context) { +// setBooleanPreference(context, "has_seen_gif_metadata_warning", true); +// } +// +// public static void clearAll(Context context) { +// PreferenceManager.getDefaultSharedPreferences(context).edit().clear().commit(); +// } +// +// public static boolean getHasSeenMultiDeviceRemovalSheet(Context context) { +// return getBooleanPreference(context, "has_seen_multi_device_removal_sheet", false); +// } +// +// public static void setHasSeenMultiDeviceRemovalSheet(Context context) { +// setBooleanPreference(context, "has_seen_multi_device_removal_sheet", true); +// } +// +// public static boolean hasSeenLightThemeIntroSheet(Context context) { +// return getBooleanPreference(context, "has_seen_light_theme_intro_sheet", false); +// } +// +// public static void setHasSeenLightThemeIntroSheet(Context context) { +// setBooleanPreference(context, "has_seen_light_theme_intro_sheet", true); +// } +// +// public static long getLastSnodePoolRefreshDate(Context context) { +// return getLongPreference(context, "last_snode_pool_refresh_date", 0); +// } +// +// public static void setLastSnodePoolRefreshDate(Context context, Date date) { +// setLongPreference(context, "last_snode_pool_refresh_date", date.getTime()); +// } +// +// public static long getLastKeyPairMigrationNudge(Context context) { +// return getLongPreference(context, "last_key_pair_migration_nudge", 0); +// } +// +// public static void setLastKeyPairMigrationNudge(Context context, long newValue) { +// setLongPreference(context, "last_key_pair_migration_nudge", newValue); +// } +// +// public static boolean getIsMigratingKeyPair(Context context) { +// return getBooleanPreference(context, "is_migrating_key_pair", false); +// } +// +// public static void setIsMigratingKeyPair(Context context, boolean newValue) { +// setBooleanPreference(context, "is_migrating_key_pair", newValue); +// } +// // endregion +// +// // region Backup related +// public static List getBackupRecords(@NonNull Context context) { +// final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); +// +// final String prefsFileName; +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { +// prefsFileName = PreferenceManager.getDefaultSharedPreferencesName(context); +// } else { +// prefsFileName = context.getPackageName() + "_preferences"; +// } +// +// final LinkedList prefList = new LinkedList<>(); +// addBackupEntryInt (prefList, preferences, prefsFileName, LOCAL_REGISTRATION_ID_PREF); +// addBackupEntryString (prefList, preferences, prefsFileName, LOCAL_NUMBER_PREF); +// addBackupEntryString (prefList, preferences, prefsFileName, PROFILE_NAME_PREF); +// addBackupEntryString (prefList, preferences, prefsFileName, PROFILE_AVATAR_URL_PREF); +// addBackupEntryInt (prefList, preferences, prefsFileName, PROFILE_AVATAR_ID_PREF); +// addBackupEntryString (prefList, preferences, prefsFileName, PROFILE_KEY_PREF); +// addBackupEntryBoolean(prefList, preferences, prefsFileName, IS_USING_FCM); +// +// return prefList; +// } +// +// private static void addBackupEntryString( +// List outPrefList, +// SharedPreferences prefs, +// String prefFileName, +// String prefKey) { +// String value = prefs.getString(prefKey, null); +// if (value == null) { +// logBackupEntry(prefKey, false); +// return; +// } +// outPrefList.add(BackupProtos.SharedPreference.newBuilder() +// .setFile(prefFileName) +// .setKey(prefKey) +// .setValue(value) +// .build()); +// logBackupEntry(prefKey, true); +// } +// +// private static void addBackupEntryInt( +// List outPrefList, +// SharedPreferences prefs, +// String prefFileName, +// String prefKey) { +// int value = prefs.getInt(prefKey, -1); +// if (value == -1) { +// logBackupEntry(prefKey, false); +// return; +// } +// outPrefList.add(BackupProtos.SharedPreference.newBuilder() +// .setFile(prefFileName) +// .setKey(PREF_PREFIX_TYPE_INT + prefKey) // The prefix denotes the type of the preference. +// .setValue(String.valueOf(value)) +// .build()); +// logBackupEntry(prefKey, true); +// } +// +// private static void addBackupEntryBoolean( +// List outPrefList, +// SharedPreferences prefs, +// String prefFileName, +// String prefKey) { +// if (!prefs.contains(prefKey)) { +// logBackupEntry(prefKey, false); +// return; +// } +// outPrefList.add(BackupProtos.SharedPreference.newBuilder() +// .setFile(prefFileName) +// .setKey(PREF_PREFIX_TYPE_BOOLEAN + prefKey) // The prefix denotes the type of the preference. +// .setValue(String.valueOf(prefs.getBoolean(prefKey, false))) +// .build()); +// logBackupEntry(prefKey, true); +// } +// +// private static void logBackupEntry(String prefName, boolean wasIncluded) { +// StringBuilder sb = new StringBuilder(); +// sb.append("Backup preference "); +// sb.append(wasIncluded ? "+ " : "- "); +// sb.append('\"').append(prefName).append("\" "); +// if (!wasIncluded) { +// sb.append("(is empty and not included)"); +// } +// Log.d(TAG, sb.toString()); +// } +// // endregion } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/VersionTracker.kt b/app/src/main/java/org/thoughtcrime/securesms/util/VersionTracker.kt index 4c0702765..222b9b7fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/VersionTracker.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/VersionTracker.kt @@ -4,6 +4,8 @@ import android.content.Context import java.io.IOException import java.lang.RuntimeException +import org.session.libsession.utilities.TextSecurePreferences + object VersionTracker { @JvmStatic diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java b/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java deleted file mode 100644 index 1bd4e8124..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.thoughtcrime.securesms.util.concurrent; - -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture.Listener; - -import java.util.concurrent.ExecutionException; - -public abstract class AssertedSuccessListener implements Listener { - @Override - public void onFailure(ExecutionException e) { - throw new AssertionError(e); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/ListenableFuture.java b/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/ListenableFuture.java deleted file mode 100644 index b943a26fb..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/ListenableFuture.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.thoughtcrime.securesms.util.concurrent; - -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; - -public interface ListenableFuture extends Future { - void addListener(Listener listener); - - public interface Listener { - public void onSuccess(T result); - public void onFailure(ExecutionException e); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SettableFuture.java b/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SettableFuture.java deleted file mode 100644 index 80fd166c4..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SettableFuture.java +++ /dev/null @@ -1,137 +0,0 @@ -package org.thoughtcrime.securesms.util.concurrent; - -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -public class SettableFuture implements ListenableFuture { - - private final List> listeners = new LinkedList<>(); - - private boolean completed; - private boolean canceled; - private volatile T result; - private volatile Throwable exception; - - public SettableFuture() { } - - public SettableFuture(T value) { - this.result = value; - this.completed = true; - } - - @Override - public synchronized boolean cancel(boolean mayInterruptIfRunning) { - if (!completed && !canceled) { - canceled = true; - return true; - } - - return false; - } - - @Override - public synchronized boolean isCancelled() { - return canceled; - } - - @Override - public synchronized boolean isDone() { - return completed; - } - - public boolean set(T result) { - synchronized (this) { - if (completed || canceled) return false; - - this.result = result; - this.completed = true; - - notifyAll(); - } - - notifyAllListeners(); - return true; - } - - public boolean setException(Throwable throwable) { - synchronized (this) { - if (completed || canceled) return false; - - this.exception = throwable; - this.completed = true; - - notifyAll(); - } - - notifyAllListeners(); - return true; - } - - public void deferTo(ListenableFuture other) { - other.addListener(new Listener() { - @Override - public void onSuccess(T result) { - SettableFuture.this.set(result); - } - - @Override - public void onFailure(ExecutionException e) { - SettableFuture.this.setException(e.getCause()); - } - }); - } - - @Override - public synchronized T get() throws InterruptedException, ExecutionException { - while (!completed) wait(); - - if (exception != null) throw new ExecutionException(exception); - else return result; - } - - @Override - public synchronized T get(long timeout, TimeUnit unit) - throws InterruptedException, ExecutionException, TimeoutException - { - long startTime = System.currentTimeMillis(); - - while (!completed && System.currentTimeMillis() - startTime > unit.toMillis(timeout)) { - wait(unit.toMillis(timeout)); - } - - if (!completed) throw new TimeoutException(); - else return get(); - } - - @Override - public void addListener(Listener listener) { - synchronized (this) { - listeners.add(listener); - - if (!completed) return; - } - - notifyListener(listener); - } - - private void notifyAllListeners() { - List> localListeners; - - synchronized (this) { - localListeners = new LinkedList<>(listeners); - } - - for (Listener listener : localListeners) { - notifyListener(listener); - } - } - - private void notifyListener(Listener listener) { - if (exception != null) listener.onFailure(new ExecutionException(exception)); - else listener.onSuccess(result); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SignalExecutors.java b/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SignalExecutors.java deleted file mode 100644 index 71686a777..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SignalExecutors.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.thoughtcrime.securesms.util.concurrent; - -import androidx.annotation.NonNull; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -public class SignalExecutors { - - public static final ExecutorService UNBOUNDED = Executors.newCachedThreadPool(new NumberedThreadFactory("signal-unbounded")); - public static final ExecutorService BOUNDED = Executors.newFixedThreadPool(Math.max(2, Math.min(Runtime.getRuntime().availableProcessors() - 1, 4)), new NumberedThreadFactory("signal-bounded")); - public static final ExecutorService SERIAL = Executors.newSingleThreadExecutor(new NumberedThreadFactory("signal-serial")); - - public static ExecutorService newCachedSingleThreadExecutor(final String name) { - ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 15, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), r -> new Thread(r, name)); - executor.allowCoreThreadTimeOut(true); - return executor; - } - - private static class NumberedThreadFactory implements ThreadFactory { - - private final String baseName; - private final AtomicInteger counter; - - NumberedThreadFactory(@NonNull String baseName) { - this.baseName = baseName; - this.counter = new AtomicInteger(); - } - - @Override - public Thread newThread(@NonNull Runnable r) { - return new Thread(r, baseName + "-" + counter.getAndIncrement()); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SimpleTask.java b/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SimpleTask.java deleted file mode 100644 index 5cd24618f..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SimpleTask.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.thoughtcrime.securesms.util.concurrent; - -import androidx.lifecycle.Lifecycle; -import android.os.AsyncTask; -import androidx.annotation.NonNull; - -import org.thoughtcrime.securesms.util.Util; - -public class SimpleTask { - - /** - * Runs a task in the background and passes the result of the computation to a task that is run - * on the main thread. Will only invoke the {@code foregroundTask} if the provided {@link Lifecycle} - * is in a valid (i.e. visible) state at that time. In this way, it is very similar to - * {@link AsyncTask}, but is safe in that you can guarantee your task won't be called when your - * view is in an invalid state. - */ - public static void run(@NonNull Lifecycle lifecycle, @NonNull BackgroundTask backgroundTask, @NonNull ForegroundTask foregroundTask) { - if (!isValid(lifecycle)) { - return; - } - - AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> { - final E result = backgroundTask.run(); - - if (isValid(lifecycle)) { - Util.runOnMain(() -> { - if (isValid(lifecycle)) { - foregroundTask.run(result); - } - }); - } - }); - } - - /** - * Runs a task in the background and passes the result of the computation to a task that is run on - * the main thread. Essentially {@link AsyncTask}, but lambda-compatible. - */ - public static void run(@NonNull BackgroundTask backgroundTask, @NonNull ForegroundTask foregroundTask) { - AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> { - final E result = backgroundTask.run(); - Util.runOnMain(() -> foregroundTask.run(result)); - }); - } - - private static boolean isValid(@NonNull Lifecycle lifecycle) { - return lifecycle.getCurrentState().isAtLeast(Lifecycle.State.CREATED); - } - - public interface BackgroundTask { - E run(); - } - - public interface ForegroundTask { - void run(E result); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageActivityHelper.java b/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageActivityHelper.java deleted file mode 100644 index 8665377d4..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageActivityHelper.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.thoughtcrime.securesms.util.dynamiclanguage; - -import android.app.Activity; - -import androidx.annotation.MainThread; -import androidx.core.os.ConfigurationCompat; - -import org.thoughtcrime.securesms.logging.Log; - -import java.util.Locale; - -public final class DynamicLanguageActivityHelper { - - private static final String TAG = Log.tag(DynamicLanguageActivityHelper.class); - - private static String reentryProtection; - - /** - * If the activity isn't in the specified language, it will restart the activity. - */ - @MainThread - public static void recreateIfNotInCorrectLanguage(Activity activity, String language) { - Locale currentActivityLocale = ConfigurationCompat.getLocales(activity.getResources().getConfiguration()).get(0); - Locale selectedLocale = LocaleParser.findBestMatchingLocaleForLanguage(language); - - if (currentActivityLocale.equals(selectedLocale)) { - reentryProtection = ""; - return; - } - - String reentryKey = activity.getClass().getName() + ":" + selectedLocale; - if (!reentryKey.equals(reentryProtection)) { - reentryProtection = reentryKey; - Log.d(TAG, String.format("Activity Locale %s, Selected locale %s, restarting", currentActivityLocale, selectedLocale)); - activity.recreate(); - } else { - Log.d(TAG, String.format("Skipping recreate as looks like looping, Activity Locale %s, Selected locale %s", currentActivityLocale, selectedLocale)); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper.java b/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper.java deleted file mode 100644 index d4e227fb2..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.thoughtcrime.securesms.util.dynamiclanguage; - -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; - -import java.util.Locale; - -/** - * Updates a context with an alternative language. - */ -public final class DynamicLanguageContextWrapper { - - public static Context updateContext(Context context, String language) { - final Locale newLocale = LocaleParser.findBestMatchingLocaleForLanguage(language); - - Locale.setDefault(newLocale); - - final Resources resources = context.getResources(); - final Configuration config = resources.getConfiguration(); - final Configuration newConfig = copyWithNewLocale(config, newLocale); - - resources.updateConfiguration(newConfig, resources.getDisplayMetrics()); - - return context; - } - - private static Configuration copyWithNewLocale(Configuration config, Locale locale) { - final Configuration copy = new Configuration(config); - copy.setLocale(locale); - return copy; - } - -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/LanguageString.java b/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/LanguageString.java deleted file mode 100644 index 0c74c2ed6..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/LanguageString.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.thoughtcrime.securesms.util.dynamiclanguage; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.util.Locale; - -public final class LanguageString { - - private LanguageString() { - } - - /** - * @param languageString String in format language_REGION, e.g. en_US - * @return Locale, or null if cannot parse - */ - @Nullable - public static Locale parseLocale(@Nullable String languageString) { - if (languageString == null || languageString.isEmpty()) { - return null; - } - - final Locale locale = createLocale(languageString); - - if (!isValid(locale)) { - return null; - } else { - return locale; - } - } - - private static Locale createLocale(@NonNull String languageString) { - final String language[] = languageString.split("_"); - if (language.length == 2) { - return new Locale(language[0], language[1]); - } else { - return new Locale(language[0]); - } - } - - private static boolean isValid(@NonNull Locale locale) { - try { - return locale.getISO3Language() != null && locale.getISO3Country() != null; - } catch (Exception ex) { - return false; - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/LocaleParseHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/LocaleParseHelper.kt new file mode 100644 index 000000000..7e0b963ae --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/LocaleParseHelper.kt @@ -0,0 +1,26 @@ +package org.thoughtcrime.securesms.util.dynamiclanguage + +import android.content.res.Resources +import androidx.core.os.ConfigurationCompat +import network.loki.messenger.BuildConfig +import org.session.libsession.utilities.dynamiclanguage.LocaleParserHelperProtocol +import java.util.* + +class LocaleParseHelper: LocaleParserHelperProtocol { + + override fun appSupportsTheExactLocale(locale: Locale?): Boolean { + return if (locale == null) { + false + } else Arrays.asList(*BuildConfig.LANGUAGES).contains(locale.toString()) + } + + override fun findBestSystemLocale(): Locale { + val config = Resources.getSystem().configuration + + val firstMatch = ConfigurationCompat.getLocales(config) + .getFirstMatch(BuildConfig.LANGUAGES) + + return firstMatch ?: Locale.ENGLISH + + } +} \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/LocaleParser.java b/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/LocaleParser.java deleted file mode 100644 index 80b011894..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/LocaleParser.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.thoughtcrime.securesms.util.dynamiclanguage; - -import android.content.res.Configuration; -import android.content.res.Resources; -import androidx.annotation.Nullable; -import androidx.core.os.ConfigurationCompat; - -import network.loki.messenger.BuildConfig; - -import java.util.Arrays; -import java.util.Locale; - -final class LocaleParser { - - private LocaleParser() { - } - - /** - * Given a language, gets the best choice from the apps list of supported languages and the - * Systems set of languages. - */ - static Locale findBestMatchingLocaleForLanguage(@Nullable String language) { - final Locale locale = LanguageString.parseLocale(language); - if (appSupportsTheExactLocale(locale)) { - return locale; - } else { - return findBestSystemLocale(); - } - } - - private static boolean appSupportsTheExactLocale(@Nullable Locale locale) { - if (locale == null) { - return false; - } - return Arrays.asList(BuildConfig.LANGUAGES).contains(locale.toString()); - } - - /** - * Get the first preferred language the app supports. - */ - private static Locale findBestSystemLocale() { - final Configuration config = Resources.getSystem().getConfiguration(); - - final Locale firstMatch = ConfigurationCompat.getLocales(config) - .getFirstMatch(BuildConfig.LANGUAGES); - - if (firstMatch != null) { - return firstMatch; - } - - return Locale.ENGLISH; - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java b/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java index dff96b4fa..5579b5085 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java @@ -52,7 +52,7 @@ import org.thoughtcrime.securesms.attachments.AttachmentServer; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.VideoSlide; -import org.thoughtcrime.securesms.util.ViewUtil; +import org.session.libsession.utilities.ViewUtil; import org.thoughtcrime.securesms.video.exo.AttachmentDataSourceFactory; import java.io.IOException; 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 488df4a35..500c0b62f 100644 --- a/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt +++ b/libsession/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt @@ -1,11 +1,9 @@ package org.session.libsession.utilities import android.content.Context -import android.content.SharedPreferences import android.hardware.Camera import android.net.Uri -import android.os.Build -import android.preference.PreferenceManager.* +import android.preference.PreferenceManager.getDefaultSharedPreferences import android.provider.Settings import androidx.annotation.ArrayRes import androidx.core.app.NotificationCompat @@ -167,18 +165,23 @@ object TextSecurePreferences { private const val LAST_FCM_TOKEN_UPLOAD_TIME = "pref_last_fcm_token_upload_time_2" private const val HAS_SEEN_PN_MODE_SHEET = "pref_has_seen_pn_mode_sheet" + + @JvmStatic fun isUsingFCM(context: Context): Boolean { return getBooleanPreference(context, IS_USING_FCM, false) } + @JvmStatic fun setIsUsingFCM(context: Context, value: Boolean) { setBooleanPreference(context, IS_USING_FCM, value) } + @JvmStatic fun getFCMToken(context: Context): String? { return getStringPreference(context, FCM_TOKEN, "") } + @JvmStatic fun setFCMToken(context: Context, value: String) { setStringPreference(context, FCM_TOKEN, value) } @@ -192,6 +195,7 @@ object TextSecurePreferences { } // endregion + @JvmStatic fun isScreenLockEnabled(context: Context): Boolean { return getBooleanPreference(context, SCREEN_LOCK, false) } @@ -349,6 +353,7 @@ object TextSecurePreferences { return getBooleanPreference(context, TYPING_INDICATORS, false) } + @JvmStatic fun setTypingIndicatorsEnabled(context: Context, enabled: Boolean) { setBooleanPreference(context, TYPING_INDICATORS, enabled) } @@ -380,6 +385,7 @@ object TextSecurePreferences { setStringPreference(context, PROFILE_KEY_PREF, key) } + @JvmStatic fun setProfileName(context: Context, name: String?) { setStringPreference(context, PROFILE_NAME_PREF, name) } @@ -389,6 +395,7 @@ object TextSecurePreferences { return getStringPreference(context, PROFILE_NAME_PREF, null) } + @JvmStatic fun setProfileAvatarId(context: Context, id: Int) { setIntegerPrefrence(context, PROFILE_AVATAR_ID_PREF, id) } @@ -402,6 +409,7 @@ object TextSecurePreferences { setStringPreference(context, PROFILE_AVATAR_URL_PREF, url) } + @JvmStatic fun getProfilePictureURL(context: Context): String? { return getStringPreference(context, PROFILE_AVATAR_URL_PREF, null) } @@ -765,6 +773,7 @@ object TextSecurePreferences { setBooleanPreference(context, SCREEN_SECURITY_PREF, value) } + @JvmStatic fun isScreenSecurityEnabled(context: Context): Boolean { return getBooleanPreference(context, SCREEN_SECURITY_PREF, true) } @@ -851,6 +860,7 @@ object TextSecurePreferences { return getBooleanPreference(context, SMS_DELIVERY_REPORT_PREF, false) } + @JvmStatic fun hasSeenWelcomeScreen(context: Context): Boolean { return getBooleanPreference(context, SEEN_WELCOME_SCREEN_PREF, true) } @@ -1026,10 +1036,12 @@ object TextSecurePreferences { setIntegerPrefrence(context, NOTIFICATION_MESSAGES_CHANNEL_VERSION, version) } + @JvmStatic fun getNeedsMessagePull(context: Context): Boolean { return getBooleanPreference(context, NEEDS_MESSAGE_PULL, false) } + @JvmStatic fun setNeedsMessagePull(context: Context, needsMessagePull: Boolean) { setBooleanPreference(context, NEEDS_MESSAGE_PULL, needsMessagePull) } @@ -1183,10 +1195,12 @@ object TextSecurePreferences { setBooleanPreference(context, "has_seen_open_group_suggestion_sheet", true) } + @JvmStatic fun getLastProfilePictureUpload(context: Context): Long { return getLongPreference(context, "last_profile_picture_upload", 0) } + @JvmStatic fun setLastProfilePictureUpload(context: Context, newValue: Long) { setLongPreference(context, "last_profile_picture_upload", newValue) } @@ -1199,6 +1213,7 @@ object TextSecurePreferences { setBooleanPreference(context, "has_seen_gif_metadata_warning", true) } + @JvmStatic fun clearAll(context: Context) { getDefaultSharedPreferences(context).edit().clear().commit() } @@ -1219,6 +1234,31 @@ object TextSecurePreferences { setBooleanPreference(context, "has_seen_light_theme_intro_sheet", true) } + fun getLastSnodePoolRefreshDate(context: Context?): Long { + return getLongPreference(context!!, "last_snode_pool_refresh_date", 0) + } + + fun setLastSnodePoolRefreshDate(context: Context?, date: Date) { + setLongPreference(context!!, "last_snode_pool_refresh_date", date.time) + } + + fun getLastKeyPairMigrationNudge(context: Context?): Long { + return getLongPreference(context!!, "last_key_pair_migration_nudge", 0) + } + + fun setLastKeyPairMigrationNudge(context: Context?, newValue: Long) { + setLongPreference(context!!, "last_key_pair_migration_nudge", newValue) + } + + fun getIsMigratingKeyPair(context: Context?): Boolean { + return getBooleanPreference(context!!, "is_migrating_key_pair", false) + } + + @JvmStatic + fun setIsMigratingKeyPair(context: Context?, newValue: Boolean) { + setBooleanPreference(context!!, "is_migrating_key_pair", newValue) + } + // endregion /* TODO // region Backup related diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ThreadUtil.java b/libsession/src/main/java/org/session/libsession/utilities/ThreadUtil.java similarity index 93% rename from app/src/main/java/org/thoughtcrime/securesms/util/ThreadUtil.java rename to libsession/src/main/java/org/session/libsession/utilities/ThreadUtil.java index df29c2730..cdc5c6286 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ThreadUtil.java +++ b/libsession/src/main/java/org/session/libsession/utilities/ThreadUtil.java @@ -1,4 +1,4 @@ -package org.thoughtcrime.securesms.util; +package org.session.libsession.utilities; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService;