Fix up more DI

This commit is contained in:
SessionHero01 2024-10-07 17:14:18 +11:00
parent 2523975462
commit 71009c373b
No known key found for this signature in database
15 changed files with 81 additions and 52 deletions

View File

@ -111,6 +111,7 @@ import java.util.concurrent.Executors;
import javax.inject.Inject;
import dagger.Lazy;
import dagger.hilt.EntryPoints;
import dagger.hilt.android.HiltAndroidApp;
import kotlin.Deprecated;
@ -133,7 +134,6 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
private static final String TAG = ApplicationContext.class.getSimpleName();
public MessageNotifier messageNotifier = null;
public Poller poller = null;
public Broadcaster broadcaster = null;
private WindowDebouncer conversationListDebouncer;
@ -164,7 +164,9 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
@Inject TypingStatusRepository typingStatusRepository;
@Inject TypingStatusSender typingStatusSender;
@Inject ReadReceiptManager readReceiptManager;
@Inject Lazy<MessageNotifier> messageNotifierLazy;
@Inject LokiAPIDatabase apiDB;
@Inject EmojiSearchDatabase emojiSearchDb;
private volatile boolean isAppVisible;
@ -180,14 +182,21 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
return (ApplicationContext) context.getApplicationContext();
}
@Deprecated(message = "Use proper DI to inject this component")
public TextSecurePreferences getPrefs() {
return EntryPoints.get(getApplicationContext(), AppComponent.class).getPrefs();
}
@Deprecated(message = "Use proper DI to inject this component")
public DatabaseComponent getDatabaseComponent() {
return EntryPoints.get(getApplicationContext(), DatabaseComponent.class);
}
@Deprecated(message = "Use proper DI to inject this component")
public MessageNotifier getMessageNotifier() {
return messageNotifierLazy.get();
}
public Handler getConversationListNotificationHandler() {
if (this.conversationListHandlerThread == null) {
conversationListHandlerThread = new HandlerThread("ConversationListHandler");
@ -248,13 +257,11 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
NotificationChannels.create(this);
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
AppContext.INSTANCE.configureKovenant();
messageNotifier = new OptimizedMessageNotifier(new DefaultMessageNotifier());
broadcaster = new Broadcaster(this);
LokiAPIDatabase apiDB = getDatabaseComponent().lokiAPIDatabase();
boolean useTestNet = textSecurePreferences.getEnvironment() == Environment.TEST_NET;
SnodeModule.Companion.configure(apiDB, broadcaster, useTestNet);
initializePeriodicTasks();
SSKEnvironment.Companion.configure(typingStatusRepository, readReceiptManager, profileManager, messageNotifier, expiringMessageManager);
SSKEnvironment.Companion.configure(typingStatusRepository, readReceiptManager, profileManager, getMessageNotifier(), expiringMessageManager);
initializeWebRtc();
initializeBlobProvider();
resubmitProfilePictureIfNeeded();
@ -319,7 +326,7 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
isAppVisible = false;
Log.i(TAG, "App is no longer visible.");
KeyCachingService.onAppBackgrounded(this);
messageNotifier.setVisibleThread(-1);
getMessageNotifier().setVisibleThread(-1);
if (poller != null) {
poller.stopIfNeeded();
}
@ -452,7 +459,6 @@ public class ApplicationContext extends Application implements DefaultLifecycleO
private void loadEmojiSearchIndexIfNeeded() {
Executors.newSingleThreadExecutor().execute(() -> {
EmojiSearchDatabase emojiSearchDb = getDatabaseComponent().emojiSearchDatabase();
if (emojiSearchDb.query("face", 1).isEmpty()) {
try (InputStream inputStream = getAssets().open("emoji/emoji_search_index.json")) {
List<EmojiSearchData> searchIndex = Arrays.asList(JsonUtil.fromJson(inputStream, EmojiSearchData[].class));

View File

@ -49,7 +49,7 @@ public class DatabaseUpgradeActivity extends BaseActivity {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ApplicationContext.getInstance(context).messageNotifier.updateNotification(context);
ApplicationContext.getInstance(context).getMessageNotifier().updateNotification(context);
return null;
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

View File

@ -14,9 +14,9 @@ import network.loki.messenger.libsession_util.util.GroupDisplayInfo
import network.loki.messenger.libsession_util.util.GroupInfo
import network.loki.messenger.libsession_util.util.UserPic
import org.session.libsession.avatars.AvatarHelper
import org.session.libsession.database.MessageDataProvider
import org.session.libsession.database.StorageProtocol
import org.session.libsession.messaging.BlindedIdMapping
import org.session.libsession.messaging.MessagingModuleConfiguration
import org.session.libsession.messaging.calls.CallMessageType
import org.session.libsession.messaging.contacts.Contact
import org.session.libsession.messaging.jobs.AttachmentUploadJob
@ -49,11 +49,12 @@ import org.session.libsession.messaging.sending_receiving.attachments.Attachment
import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment
import org.session.libsession.messaging.sending_receiving.data_extraction.DataExtractionNotificationInfoMessage
import org.session.libsession.messaging.sending_receiving.link_preview.LinkPreview
import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier
import org.session.libsession.messaging.sending_receiving.quotes.QuoteModel
import org.session.libsession.messaging.utilities.SodiumUtilities
import org.session.libsession.messaging.utilities.UpdateMessageData
import org.session.libsession.snode.OnionRequestAPI
import org.session.libsession.snode.SnodeAPI
import org.session.libsession.snode.SnodeClock
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.Address.Companion.fromSerialized
import org.session.libsession.utilities.GroupRecord
@ -113,6 +114,12 @@ open class Storage @Inject constructor(
private val lokiThreadDatabase: LokiThreadDatabase,
private val sessionContactDatabase: SessionContactDatabase,
private val expirationConfigurationDatabase: ExpirationConfigurationDatabase,
private val profileManager: SSKEnvironment.ProfileManagerProtocol,
private val notificationManager: MessageNotifier,
private val messageDataProvider: MessageDataProvider,
private val messageExpirationManager: SSKEnvironment.MessageExpirationManagerProtocol,
private val clock: SnodeClock,
private val preferences: TextSecurePreferences,
) : Database(context, helper), StorageProtocol, ThreadDatabase.ConversationThreadUpdateListener {
init {
@ -133,7 +140,7 @@ open class Storage @Inject constructor(
val legacyGroup = configs.userGroups.getOrConstructLegacyGroupInfo(accountId)
configs.userGroups.set(legacyGroup)
val newVolatileParams = configs.convoInfoVolatile.getOrConstructLegacyGroup(accountId).copy(
lastRead = SnodeAPI.nowWithOffset,
lastRead = clock.currentTimeMills(),
)
configs.convoInfoVolatile.set(newVolatileParams)
}
@ -210,7 +217,7 @@ open class Storage @Inject constructor(
}
override fun getUserPublicKey(): String? {
return TextSecurePreferences.getLocalNumber(context)
return preferences.getLocalNumber()
}
override fun getUserX25519KeyPair(): ECKeyPair {
@ -291,18 +298,16 @@ open class Storage @Inject constructor(
}
override fun deleteMessagesByHash(threadId: Long, hashes: List<String>) {
val messageDataProvider = MessagingModuleConfiguration.shared.messageDataProvider
val info = lokiMessageDatabase.getSendersForHashes(threadId, hashes.toSet())
// TODO: no idea if we need to server delete this
for ((serverHash, sender, messageIdToDelete, isSms) in info) {
messageDataProvider.updateMessageAsDeleted(messageIdToDelete, isSms)
if (!messageDataProvider.isOutgoingMessage(messageIdToDelete)) {
SSKEnvironment.shared.notificationManager.updateNotification(context)
notificationManager.updateNotification(context)
}
}
}
override fun deleteMessagesByUser(threadId: Long, userSessionId: String) {
val messageDataProvider = MessagingModuleConfiguration.shared.messageDataProvider
val userMessages = mmsSmsDatabase.getUserMessages(threadId, userSessionId)
val (mmsMessages, smsMessages) = userMessages.partition { it.isMms }
if (mmsMessages.isNotEmpty()) {
@ -684,7 +689,7 @@ open class Storage @Inject constructor(
// message timestamp and as such we cannot use that to identify the local message.
override fun markAsSentToCommunity(threadId: Long, messageID: Long) {
val database = mmsSmsDatabase
val message = database.getLastSentMessageRecordFromSender(threadId, TextSecurePreferences.getLocalNumber(context))
val message = database.getLastSentMessageRecordFromSender(threadId, preferences.getLocalNumber())
// Ensure we can find the local message..
if (message == null) {
@ -749,7 +754,7 @@ open class Storage @Inject constructor(
// modifies the message timestamp and as such we cannot use that to identify the local message.
override fun markUnidentifiedInCommunity(threadId: Long, messageId: Long) {
val database = mmsSmsDatabase
val message = database.getLastSentMessageRecordFromSender(threadId, TextSecurePreferences.getLocalNumber(context))
val message = database.getLastSentMessageRecordFromSender(threadId, preferences.getLocalNumber())
// Check to ensure the message exists
if (message == null) {
@ -1023,7 +1028,7 @@ open class Storage @Inject constructor(
}
override fun insertGroupInfoChange(message: GroupUpdated, closedGroup: AccountId): Long? {
val sentTimestamp = message.sentTimestamp ?: SnodeAPI.nowWithOffset
val sentTimestamp = message.sentTimestamp ?: clock.currentTimeMills()
val senderPublicKey = message.sender
val groupName = configFactory.withGroupConfigs(closedGroup) { it.groupInfo.getName() }
@ -1033,7 +1038,7 @@ open class Storage @Inject constructor(
}
override fun insertGroupInfoLeaving(closedGroup: AccountId): Long? {
val sentTimestamp = SnodeAPI.nowWithOffset
val sentTimestamp = clock.currentTimeMills()
val senderPublicKey = getUserPublicKey() ?: return null
val updateData = UpdateMessageData.buildGroupLeaveUpdate(UpdateMessageData.Kind.GroupLeaving)
@ -1211,7 +1216,7 @@ open class Storage @Inject constructor(
sessionContactDatabase.setContact(contact)
val address = fromSerialized(contact.accountID)
if (!getRecipientApproved(address)) return
val recipientHash = SSKEnvironment.shared.profileManager.contactUpdatedInternal(contact)
val recipientHash = profileManager.contactUpdatedInternal(contact)
val recipient = Recipient.from(context, address, false)
setRecipientHash(recipient, recipientHash)
}
@ -1234,7 +1239,6 @@ open class Storage @Inject constructor(
val id = AccountId(contact.id)
id.prefix?.isBlinded() == false || mappingDb.getBlindedIdMapping(contact.id).none { it.accountId != null }
}
val profileManager = SSKEnvironment.shared.profileManager
moreContacts.forEach { contact ->
val address = fromSerialized(contact.id)
val recipient = Recipient.from(context, address, false)
@ -1510,8 +1514,7 @@ open class Storage @Inject constructor(
)
database.insertSecureDecryptedMessageInbox(mediaMessage, threadId, runThreadUpdate = true)
SSKEnvironment.shared.messageExpirationManager.maybeStartExpiration(sentTimestamp, senderPublicKey, expiryMode)
messageExpirationManager.maybeStartExpiration(sentTimestamp, senderPublicKey, expiryMode)
}
/**
@ -1543,7 +1546,6 @@ open class Storage @Inject constructor(
val threadId = getOrCreateThreadIdFor(sender.address)
val profile = response.profile
if (profile != null) {
val profileManager = SSKEnvironment.shared.profileManager
val name = profile.displayName!!
if (name.isNotEmpty()) {
profileManager.setName(context, sender, name)
@ -1629,7 +1631,7 @@ open class Storage @Inject constructor(
val mmsDb = mmsDatabase
val message = IncomingMediaMessage(
fromSerialized(userPublicKey),
SnodeAPI.nowWithOffset,
clock.currentTimeMills(),
-1,
0,
0,
@ -1684,7 +1686,7 @@ open class Storage @Inject constructor(
val expireStartedAt = if (expiryMode is ExpiryMode.AfterSend) sentTimestamp else 0
val callMessage = IncomingTextMessage.fromCallInfo(callMessageType, address, Optional.absent(), sentTimestamp, expiresInMillis, expireStartedAt)
database.insertCallMessage(callMessage)
SSKEnvironment.shared.messageExpirationManager.maybeStartExpiration(sentTimestamp, senderPublicKey, expiryMode)
messageExpirationManager.maybeStartExpiration(sentTimestamp, senderPublicKey, expiryMode)
}
override fun conversationHasOutgoing(userPublicKey: String): Boolean {

View File

@ -768,7 +768,7 @@ public class ThreadDatabase extends Database {
if (mmsSmsDatabase.getConversationCount(threadId) <= 0 && !force) return false;
List<MarkedMessageInfo> messages = setRead(threadId, lastSeenTime);
MarkReadReceiver.process(context, messages);
ApplicationContext.getInstance(context).messageNotifier.updateNotification(context, threadId);
ApplicationContext.getInstance(context).getMessageNotifier().updateNotification(context, threadId);
return setLastSeen(threadId, lastSeenTime);
}

View File

@ -9,17 +9,16 @@ import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import org.session.libsession.database.StorageProtocol
import org.session.libsession.messaging.groups.GroupManagerV2
import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier
import org.session.libsession.utilities.AppTextSecurePreferences
import org.session.libsession.utilities.ConfigFactoryProtocol
import org.session.libsession.utilities.SSKEnvironment
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsession.utilities.Toaster
import org.session.libsignal.database.LokiAPIDatabaseProtocol
import org.thoughtcrime.securesms.database.LokiAPIDatabase
import org.thoughtcrime.securesms.database.Storage
import org.thoughtcrime.securesms.groups.GroupManagerV2Impl
import org.thoughtcrime.securesms.notifications.DefaultMessageNotifier
import org.thoughtcrime.securesms.notifications.OptimizedMessageNotifier
import org.thoughtcrime.securesms.repository.ConversationRepository
import org.thoughtcrime.securesms.repository.DefaultConversationRepository
import org.thoughtcrime.securesms.sskenvironment.ProfileManager
@ -27,7 +26,18 @@ import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
abstract class AppModule {
class AppModule {
@Provides
@Singleton
fun provideMessageNotifier(): MessageNotifier {
return OptimizedMessageNotifier(DefaultMessageNotifier())
}
}
@Module
@InstallIn(SingletonComponent::class)
abstract class AppBindings {
@Binds
abstract fun bindTextSecurePreferences(preferences: AppTextSecurePreferences): TextSecurePreferences

View File

@ -35,6 +35,7 @@ import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import org.session.libsession.messaging.groups.GroupManagerV2
import org.session.libsession.messaging.jobs.JobQueue
import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier
import org.session.libsession.snode.SnodeClock
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.ProfilePictureModifiedEvent
@ -103,6 +104,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
@Inject lateinit var lokiThreadDatabase: LokiThreadDatabase
@Inject lateinit var sessionJobDatabase: SessionJobDatabase
@Inject lateinit var clock: SnodeClock
@Inject lateinit var messageNotifier: MessageNotifier
private val globalSearchViewModel by viewModels<GlobalSearchViewModel>()
private val homeViewModel by viewModels<HomeViewModel>()
@ -354,7 +356,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
override fun onResume() {
super.onResume()
ApplicationContext.getInstance(this).messageNotifier.setHomeScreenVisible(true)
messageNotifier.setHomeScreenVisible(true)
if (textSecurePreferences.getLocalNumber() == null) { return; } // This can be the case after a secondary device is auto-cleared
IdentityKeyUtil.checkUpdate(this)
binding.profileButton.recycle() // clear cached image before update tje profilePictureView

View File

@ -68,7 +68,7 @@ public class AndroidAutoHeardReceiver extends BroadcastReceiver {
messageIdsCollection.addAll(messageIds);
}
ApplicationContext.getInstance(context).messageNotifier.updateNotification(context);
ApplicationContext.getInstance(context).getMessageNotifier().updateNotification(context);
MarkReadReceiver.process(context, messageIdsCollection);
return null;

View File

@ -109,7 +109,7 @@ public class AndroidAutoReplyReceiver extends BroadcastReceiver {
List<MarkedMessageInfo> messageIds = DatabaseComponent.get(context).threadDatabase().setRead(replyThreadId, true);
ApplicationContext.getInstance(context).messageNotifier.updateNotification(context);
ApplicationContext.getInstance(context).getMessageNotifier().updateNotification(context);
MarkReadReceiver.process(context, messageIds);
return null;

View File

@ -17,7 +17,7 @@ public class DeleteNotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
if (DELETE_NOTIFICATION_ACTION.equals(intent.getAction())) {
ApplicationContext.getInstance(context).messageNotifier.clearReminder(context);
ApplicationContext.getInstance(context).getMessageNotifier().clearReminder(context);
final long[] ids = intent.getLongArrayExtra(EXTRA_IDS);
final boolean[] mms = intent.getBooleanArrayExtra(EXTRA_MMS);

View File

@ -31,11 +31,11 @@ import org.session.libsession.messaging.messages.signal.OutgoingMediaMessage;
import org.session.libsession.messaging.messages.signal.OutgoingTextMessage;
import org.session.libsession.messaging.messages.visible.VisibleMessage;
import org.session.libsession.messaging.sending_receiving.MessageSender;
import org.session.libsession.snode.SnodeAPI;
import org.session.libsession.messaging.sending_receiving.notifications.MessageNotifier;
import org.session.libsession.snode.SnodeClock;
import org.session.libsession.utilities.Address;
import org.session.libsession.utilities.recipients.Recipient;
import org.session.libsignal.utilities.Log;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.database.MarkedMessageInfo;
import org.thoughtcrime.securesms.database.MmsDatabase;
import org.thoughtcrime.securesms.database.SmsDatabase;
@ -70,6 +70,10 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
SmsDatabase smsDatabase;
@Inject
Storage storage;
@Inject
MessageNotifier messageNotifier;
@Inject
SnodeClock clock;
@SuppressLint("StaticFieldLeak")
@Override
@ -94,7 +98,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
Recipient recipient = Recipient.from(context, address, false);
long threadId = threadDatabase.getOrCreateThreadIdFor(recipient);
VisibleMessage message = new VisibleMessage();
message.setSentTimestamp(SnodeAPI.getNowWithOffset());
message.setSentTimestamp(clock.currentTimeMills());
message.setText(responseText.toString());
ExpirationConfiguration config = storage.getExpirationConfiguration(threadId);
ExpiryMode expiryMode = config == null ? null : config.getExpiryMode();
@ -124,7 +128,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
List<MarkedMessageInfo> messageIds = threadDatabase.setRead(threadId, true);
ApplicationContext.getInstance(context).messageNotifier.updateNotification(context);
messageNotifier.updateNotification(context);
MarkReadReceiver.process(context, messageIds);
return null;

View File

@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.service
import android.content.Context
import dagger.Lazy
import dagger.hilt.android.qualifiers.ApplicationContext
import network.loki.messenger.libsession_util.util.ExpiryMode
import network.loki.messenger.libsession_util.util.ExpiryMode.AfterSend
@ -13,7 +14,7 @@ import org.session.libsession.utilities.Address.Companion.fromSerialized
import org.session.libsession.utilities.GroupUtil
import org.session.libsession.utilities.GroupUtil.doubleEncodeGroupID
import org.session.libsession.utilities.SSKEnvironment.MessageExpirationManagerProtocol
import org.session.libsession.utilities.TextSecurePreferences.Companion.getLocalNumber
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsignal.messages.SignalServiceGroup
import org.session.libsignal.utilities.Hex
@ -41,7 +42,8 @@ class ExpiringMessageManager @Inject constructor(
private val mmsDatabase: MmsDatabase,
private val mmsSmsDatabase: MmsSmsDatabase,
private val clock: SnodeClock,
private val storage: Storage,
private val storage: Lazy<Storage>,
private val preferences: TextSecurePreferences,
) : MessageExpirationManagerProtocol {
private val expiringMessageReferences = TreeSet<ExpiringMessageReference>()
private val executor: Executor = Executors.newSingleThreadExecutor()
@ -97,7 +99,7 @@ class ExpiringMessageManager @Inject constructor(
}
recipient = Recipient.from(context, groupAddress, false)
}
val threadId = storage.getThreadId(recipient) ?: return
val threadId = storage.get().getThreadId(recipient) ?: return
val mediaMessage = IncomingMediaMessage(
address, sentTimestamp!!, -1,
expiresInMillis, expireStartedAt, true,
@ -137,7 +139,7 @@ class ExpiringMessageManager @Inject constructor(
val address = fromSerialized(serializedAddress)
val recipient = Recipient.from(context, address, false)
message.threadID = storage.getOrCreateThreadIdFor(address)
message.threadID = storage.get().getOrCreateThreadIdFor(address)
val timerUpdateMessage = OutgoingExpirationUpdateMessage(
recipient,
sentTimestamp!!,
@ -161,7 +163,7 @@ class ExpiringMessageManager @Inject constructor(
override fun insertExpirationTimerMessage(message: ExpirationTimerUpdate) {
val expiryMode: ExpiryMode = message.expiryMode
val userPublicKey = getLocalNumber(context)
val userPublicKey = preferences.getLocalNumber()
val senderPublicKey = message.sender
val sentTimestamp = message.sentTimestamp ?: 0
val expireStartedAt = if ((expiryMode is AfterSend || message.isSenderSelf) && !message.isGroup) sentTimestamp else 0

View File

@ -127,7 +127,7 @@ public class KeyCachingService extends Service {
@Override
protected Void doInBackground(Void... params) {
if (!DatabaseUpgradeActivity.isUpdate(KeyCachingService.this)) {
ApplicationContext.getInstance(KeyCachingService.this).messageNotifier.updateNotification(KeyCachingService.this);
ApplicationContext.getInstance(KeyCachingService.this).getMessageNotifier().updateNotification(KeyCachingService.this);
}
return null;
}
@ -193,7 +193,7 @@ public class KeyCachingService extends Service {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ApplicationContext.getInstance(KeyCachingService.this).messageNotifier.updateNotification(KeyCachingService.this);
ApplicationContext.getInstance(KeyCachingService.this).getMessageNotifier().updateNotification(KeyCachingService.this);
return null;
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

View File

@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.sskenvironment
import android.content.Context
import dagger.Lazy
import network.loki.messenger.libsession_util.util.UserPic
import org.session.libsession.database.StorageProtocol
import org.session.libsession.messaging.contacts.Contact
@ -21,7 +22,7 @@ import javax.inject.Singleton
@Singleton
class ProfileManager @Inject constructor(
private val configFactory: ConfigFactoryProtocol,
private val storage: StorageProtocol,
private val storage: Lazy<StorageProtocol>,
private val contactDatabase: SessionContactDatabase,
private val recipientDatabase: RecipientDatabase,
private val jobDatabase: SessionJobDatabase,
@ -33,7 +34,7 @@ class ProfileManager @Inject constructor(
val accountID = recipient.address.serialize()
var contact = contactDatabase.getContactWithAccountID(accountID)
if (contact == null) contact = Contact(accountID)
contact.threadID = storage.getThreadId(recipient.address)
contact.threadID = storage.get().getThreadId(recipient.address)
if (contact.nickname != nickname) {
contact.nickname = nickname
contactDatabase.setContact(contact)
@ -47,7 +48,7 @@ class ProfileManager @Inject constructor(
val accountID = recipient.address.serialize()
var contact = contactDatabase.getContactWithAccountID(accountID)
if (contact == null) contact = Contact(accountID)
contact.threadID = storage.getThreadId(recipient.address)
contact.threadID = storage.get().getThreadId(recipient.address)
if (contact.name != name) {
contact.name = name
contactDatabase.setContact(contact)
@ -69,7 +70,7 @@ class ProfileManager @Inject constructor(
(it.value as? RetrieveProfileAvatarJob)?.recipientAddress == recipient.address
}
val resolved = recipient.resolve()
storage.setProfilePicture(
storage.get().setProfilePicture(
recipient = resolved,
newProfileKey = profileKey,
newProfilePicture = profilePictureURL
@ -77,7 +78,7 @@ class ProfileManager @Inject constructor(
val accountID = recipient.address.serialize()
var contact = contactDatabase.getContactWithAccountID(accountID)
if (contact == null) contact = Contact(accountID)
contact.threadID = storage.getThreadId(recipient.address)
contact.threadID = storage.get().getThreadId(recipient.address)
if (!contact.profilePictureEncryptionKey.contentEquals(profileKey) || contact.profilePictureURL != profilePictureURL) {
contact.profilePictureEncryptionKey = profileKey
contact.profilePictureURL = profilePictureURL

View File

@ -28,6 +28,7 @@ class MessagingModuleConfiguration(
companion object {
@JvmStatic
@Deprecated("Use properly DI components instead")
val shared: MessagingModuleConfiguration
get() = context.getSystemService(MESSAGING_MODULE_SERVICE) as MessagingModuleConfiguration

View File

@ -8,6 +8,7 @@ class SnodeModule(
) {
companion object {
@Deprecated("Use properly DI components instead")
lateinit var shared: SnodeModule
val isInitialized: Boolean get() = Companion::shared.isInitialized