From 6fa2c308b586957ba502ce0552d6cf50b4e8de58 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Thu, 21 Jan 2021 17:04:56 +1100 Subject: [PATCH] WIP fix crashes --- .../securesms/ApplicationContext.java | 7 +++++ .../securesms/LinkPreviewsIntroFragment.java | 2 -- .../securesms/database/DatabaseFactory.java | 29 +++++++++++-------- .../threads/recipients/RecipientProvider.java | 7 +++-- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 4c6df73e24..af6b39db39 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -33,6 +33,7 @@ import com.google.firebase.iid.FirebaseInstanceId; import org.conscrypt.Conscrypt; import org.jetbrains.annotations.NotNull; +import org.session.libsession.messaging.MessagingConfiguration; import org.session.libsession.messaging.contacts.avatars.AvatarHelper; import org.session.libsession.utilities.SSKEnvironment; import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier; @@ -43,6 +44,7 @@ import org.session.libsession.utilities.Util; import org.session.libsession.utilities.dynamiclanguage.LocaleParser; import org.session.libsignal.libsignal.state.SessionRecord; import org.signal.aesgcmprovider.AesGcmProvider; +import org.thoughtcrime.securesms.loki.api.SessionProtocolImpl; import org.thoughtcrime.securesms.sskenvironment.ProfileManager; import org.thoughtcrime.securesms.sskenvironment.ReadReceiptManager; import org.thoughtcrime.securesms.sskenvironment.TypingStatusRepository; @@ -198,6 +200,11 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc String userPublicKey = TextSecurePreferences.getLocalNumber(this); SessionResetImplementation sessionResetImpl = new SessionResetImplementation(this); SharedSenderKeysImplementation.Companion.configureIfNeeded(sskDatabase, this); + MessagingConfiguration.Companion.configure(this, + DatabaseFactory.getStorage(this), + sskDatabase, + DatabaseFactory.getAttachmentProvider(this), + new SessionProtocolImpl(this)); if (userPublicKey != null) { SwarmAPI.Companion.configureIfNeeded(apiDB); SnodeAPI.Companion.configureIfNeeded(userPublicKey, apiDB, broadcaster); diff --git a/app/src/main/java/org/thoughtcrime/securesms/LinkPreviewsIntroFragment.java b/app/src/main/java/org/thoughtcrime/securesms/LinkPreviewsIntroFragment.java index 6cbf0b90c0..fe319dbe38 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/LinkPreviewsIntroFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/LinkPreviewsIntroFragment.java @@ -9,8 +9,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import org.thoughtcrime.securesms.util.TextSecurePreferences; - import network.loki.messenger.R; public class LinkPreviewsIntroFragment extends Fragment { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java index 7289cc3d5d..a572edbe0b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseFactory.java @@ -22,6 +22,7 @@ import androidx.annotation.NonNull; import net.sqlcipher.database.SQLiteDatabase; +import org.thoughtcrime.securesms.attachments.DatabaseAttachmentProvider; import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.crypto.DatabaseSecret; @@ -61,14 +62,16 @@ public class DatabaseFactory { // Loki private final LokiAPIDatabase lokiAPIDatabase; -// private final LokiPreKeyRecordDatabase lokiContactPreKeyDatabase; -// private final LokiPreKeyBundleDatabase lokiPreKeyBundleDatabase; private final LokiMessageDatabase lokiMessageDatabase; private final LokiThreadDatabase lokiThreadDatabase; private final LokiUserDatabase lokiUserDatabase; private final LokiBackupFilesDatabase lokiBackupFilesDatabase; private final SharedSenderKeysDatabase sskDatabase; + // Refactor + private final Storage storage; + private final DatabaseAttachmentProvider attachmentProvider; + public static DatabaseFactory getInstance(Context context) { synchronized (lock) { if (instance == null) @@ -155,14 +158,6 @@ public class DatabaseFactory { return getInstance(context).lokiAPIDatabase; } -// public static LokiPreKeyRecordDatabase getLokiPreKeyRecordDatabase(Context context) { -// return getInstance(context).lokiContactPreKeyDatabase; -// } - -// public static LokiPreKeyBundleDatabase getLokiPreKeyBundleDatabase(Context context) { -// return getInstance(context).lokiPreKeyBundleDatabase; -// } - public static LokiMessageDatabase getLokiMessageDatabase(Context context) { return getInstance(context).lokiMessageDatabase; } @@ -184,6 +179,16 @@ public class DatabaseFactory { } // endregion + // region Refactor + public static Storage getStorage(Context context) { + return getInstance(context).storage; + } + + public static DatabaseAttachmentProvider getAttachmentProvider(Context context) { + return getInstance(context).attachmentProvider; + } + // endregion + public static void upgradeRestored(Context context, SQLiteDatabase database){ getInstance(context).databaseHelper.onUpgrade(database, database.getVersion(), -1); getInstance(context).databaseHelper.markCurrent(database); @@ -214,13 +219,13 @@ public class DatabaseFactory { this.jobDatabase = new JobDatabase(context, databaseHelper); this.stickerDatabase = new StickerDatabase(context, databaseHelper, attachmentSecret); this.lokiAPIDatabase = new LokiAPIDatabase(context, databaseHelper); -// this.lokiContactPreKeyDatabase = new LokiPreKeyRecordDatabase(context, databaseHelper); -// this.lokiPreKeyBundleDatabase = new LokiPreKeyBundleDatabase(context, databaseHelper); this.lokiMessageDatabase = new LokiMessageDatabase(context, databaseHelper); this.lokiThreadDatabase = new LokiThreadDatabase(context, databaseHelper); this.lokiUserDatabase = new LokiUserDatabase(context, databaseHelper); this.lokiBackupFilesDatabase = new LokiBackupFilesDatabase(context, databaseHelper); this.sskDatabase = new SharedSenderKeysDatabase(context, databaseHelper); + this.storage = new Storage(context, databaseHelper); + this.attachmentProvider = new DatabaseAttachmentProvider(context, databaseHelper); } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/RecipientProvider.java b/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/RecipientProvider.java index 778003fa8f..e42363acd1 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/RecipientProvider.java +++ b/libsession/src/main/java/org/session/libsession/messaging/threads/recipients/RecipientProvider.java @@ -115,7 +115,7 @@ class RecipientProvider { private @NonNull RecipientDetails getIndividualRecipientDetails(Context context, @NonNull Address address, Optional settings) { if (!settings.isPresent()) { - settings = Optional.of(MessagingConfiguration.shared.getStorage().getRecipientSettings(address)); + settings = Optional.fromNullable(MessagingConfiguration.shared.getStorage().getRecipientSettings(address)); } if (!settings.isPresent() && STATIC_DETAILS.containsKey(address.serialize())) { @@ -130,11 +130,12 @@ class RecipientProvider { private @NonNull RecipientDetails getGroupRecipientDetails(Context context, Address groupId, Optional groupRecord, Optional settings, boolean asynchronous) { if (!groupRecord.isPresent()) { - groupRecord = Optional.of(MessagingConfiguration.shared.getStorage().getGroup(groupId.toGroupString())); + groupRecord = Optional.fromNullable(MessagingConfiguration.shared.getStorage().getGroup(groupId.toGroupString())); } if (!settings.isPresent()) { - settings = Optional.of(MessagingConfiguration.shared.getStorage().getRecipientSettings(groupId)); + + settings = Optional.fromNullable(MessagingConfiguration.shared.getStorage().getRecipientSettings(groupId)); } if (groupRecord.isPresent()) {