|
|
|
@ -30,26 +30,25 @@ import androidx.multidex.MultiDexApplication;
|
|
|
|
|
import org.conscrypt.Conscrypt;
|
|
|
|
|
import org.session.libsession.avatars.AvatarHelper;
|
|
|
|
|
import org.session.libsession.messaging.MessagingModuleConfiguration;
|
|
|
|
|
import org.session.libsession.messaging.mentions.MentionsManager;
|
|
|
|
|
import org.session.libsession.messaging.contacts.Contact;
|
|
|
|
|
import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier;
|
|
|
|
|
import org.session.libsession.messaging.sending_receiving.pollers.ClosedGroupPollerV2;
|
|
|
|
|
import org.session.libsession.messaging.sending_receiving.pollers.Poller;
|
|
|
|
|
import org.session.libsession.snode.SnodeModule;
|
|
|
|
|
import org.session.libsession.utilities.Address;
|
|
|
|
|
import org.session.libsession.utilities.IdentityKeyUtil;
|
|
|
|
|
import org.session.libsession.utilities.ProfileKeyUtil;
|
|
|
|
|
import org.session.libsession.utilities.ProfilePictureUtilities;
|
|
|
|
|
import org.session.libsession.utilities.SSKEnvironment;
|
|
|
|
|
import org.session.libsession.utilities.TextSecurePreferences;
|
|
|
|
|
import org.session.libsession.utilities.Util;
|
|
|
|
|
import org.session.libsession.utilities.dynamiclanguage.DynamicLanguageContextWrapper;
|
|
|
|
|
import org.session.libsession.utilities.dynamiclanguage.LocaleParser;
|
|
|
|
|
import org.session.libsignal.database.LokiAPIDatabaseProtocol;
|
|
|
|
|
import org.session.libsession.utilities.recipients.Recipient;
|
|
|
|
|
import org.session.libsignal.utilities.Log;
|
|
|
|
|
import org.session.libsignal.utilities.ThreadUtils;
|
|
|
|
|
import org.signal.aesgcmprovider.AesGcmProvider;
|
|
|
|
|
import org.thoughtcrime.securesms.components.TypingStatusSender;
|
|
|
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
|
|
|
|
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
|
|
|
|
import org.thoughtcrime.securesms.dependencies.InjectableType;
|
|
|
|
|
import org.thoughtcrime.securesms.dependencies.SignalCommunicationModule;
|
|
|
|
|
import org.thoughtcrime.securesms.jobmanager.DependencyInjector;
|
|
|
|
@ -65,8 +64,10 @@ import org.thoughtcrime.securesms.loki.api.BackgroundPollWorker;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.api.LokiPushNotificationManager;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.api.OpenGroupManager;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.database.LokiAPIDatabase;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.database.LokiThreadDatabase;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.database.LokiUserDatabase;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.database.SessionContactDatabase;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.utilities.Broadcaster;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.utilities.ContactUtilities;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.utilities.FcmUtils;
|
|
|
|
|
import org.thoughtcrime.securesms.loki.utilities.UiModeUtilities;
|
|
|
|
|
import org.thoughtcrime.securesms.notifications.DefaultMessageNotifier;
|
|
|
|
@ -84,14 +85,12 @@ import org.webrtc.PeerConnectionFactory;
|
|
|
|
|
import org.webrtc.PeerConnectionFactory.InitializationOptions;
|
|
|
|
|
import org.webrtc.voiceengine.WebRtcAudioManager;
|
|
|
|
|
import org.webrtc.voiceengine.WebRtcAudioUtils;
|
|
|
|
|
|
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
import java.security.Security;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
|
|
import dagger.ObjectGraph;
|
|
|
|
|
import kotlin.Unit;
|
|
|
|
|
import kotlinx.coroutines.Job;
|
|
|
|
@ -152,8 +151,6 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
|
|
|
|
|
initializeDependencyInjection();
|
|
|
|
|
NotificationChannels.create(this);
|
|
|
|
|
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
|
|
|
|
|
// Loki
|
|
|
|
|
// ========
|
|
|
|
|
AppContext.INSTANCE.configureKovenant();
|
|
|
|
|
messageNotifier = new OptimizedMessageNotifier(new DefaultMessageNotifier());
|
|
|
|
|
broadcaster = new Broadcaster(this);
|
|
|
|
@ -161,16 +158,14 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
|
|
|
|
|
LokiAPIDatabase apiDB = DatabaseFactory.getLokiAPIDatabase(this);
|
|
|
|
|
String userPublicKey = TextSecurePreferences.getLocalNumber(this);
|
|
|
|
|
MessagingModuleConfiguration.Companion.configure(this,
|
|
|
|
|
DatabaseFactory.getStorage(this),
|
|
|
|
|
DatabaseFactory.getAttachmentProvider(this));
|
|
|
|
|
DatabaseFactory.getStorage(this),
|
|
|
|
|
DatabaseFactory.getAttachmentProvider(this));
|
|
|
|
|
SnodeModule.Companion.configure(apiDB, broadcaster);
|
|
|
|
|
resubmitProfilePictureIfNeeded();
|
|
|
|
|
if (userPublicKey != null) {
|
|
|
|
|
registerForFCMIfNeeded(false);
|
|
|
|
|
}
|
|
|
|
|
// Set application UI mode (day/night theme) to the user selected one.
|
|
|
|
|
UiModeUtilities.setupUiModeToUserSelected(this);
|
|
|
|
|
// ========
|
|
|
|
|
initializeExpiringMessageManager();
|
|
|
|
|
initializeTypingStatusRepository();
|
|
|
|
|
initializeTypingStatusSender();
|
|
|
|
@ -188,12 +183,33 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
|
|
|
|
|
isAppVisible = true;
|
|
|
|
|
Log.i(TAG, "App is now visible.");
|
|
|
|
|
KeyCachingService.onAppForegrounded(this);
|
|
|
|
|
// Loki
|
|
|
|
|
|
|
|
|
|
boolean hasPerformedContactMigration = TextSecurePreferences.INSTANCE.hasPerformedContactMigration(this);
|
|
|
|
|
if (!hasPerformedContactMigration) {
|
|
|
|
|
TextSecurePreferences.INSTANCE.setPerformedContactMigration(this);
|
|
|
|
|
Set<Recipient> allContacts = ContactUtilities.getAllContacts(this);
|
|
|
|
|
SessionContactDatabase contactDB = DatabaseFactory.getSessionContactDatabase(this);
|
|
|
|
|
LokiUserDatabase userDB = DatabaseFactory.getLokiUserDatabase(this);
|
|
|
|
|
for (Recipient recipient : allContacts) {
|
|
|
|
|
if (recipient.isGroupRecipient()) { continue; }
|
|
|
|
|
String sessionID = recipient.getAddress().serialize();
|
|
|
|
|
Contact contact = contactDB.getContactWithSessionID(sessionID);
|
|
|
|
|
if (contact == null) {
|
|
|
|
|
contact = new Contact(sessionID);
|
|
|
|
|
String name = userDB.getDisplayName(sessionID);
|
|
|
|
|
contact.setName(name);
|
|
|
|
|
contact.setProfilePictureURL(recipient.getProfileAvatar());
|
|
|
|
|
contact.setProfilePictureEncryptionKey(recipient.getProfileKey());
|
|
|
|
|
contact.setTrusted(true);
|
|
|
|
|
}
|
|
|
|
|
contactDB.setContact(contact);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (poller != null) {
|
|
|
|
|
poller.setCaughtUp(false);
|
|
|
|
|
}
|
|
|
|
|
startPollingIfNeeded();
|
|
|
|
|
|
|
|
|
|
OpenGroupManager.INSTANCE.setAllCaughtUp(false);
|
|
|
|
|
OpenGroupManager.INSTANCE.startPolling();
|
|
|
|
|
}
|
|
|
|
@ -204,7 +220,6 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
|
|
|
|
|
Log.i(TAG, "App is no longer visible.");
|
|
|
|
|
KeyCachingService.onAppBackgrounded(this);
|
|
|
|
|
messageNotifier.setVisibleThread(-1);
|
|
|
|
|
// Loki
|
|
|
|
|
if (poller != null) {
|
|
|
|
|
poller.stopIfNeeded();
|
|
|
|
|
}
|
|
|
|
|