mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-16 16:41:29 +00:00
Sync contacts upon pairing a secondary device.
This commit is contained in:
parent
92580a0dd9
commit
7df3393e23
@ -10,8 +10,10 @@ import org.thoughtcrime.securesms.ApplicationContext
|
|||||||
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
|
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
|
||||||
import org.thoughtcrime.securesms.database.Address
|
import org.thoughtcrime.securesms.database.Address
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||||
|
import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob
|
||||||
import org.thoughtcrime.securesms.logging.Log
|
import org.thoughtcrime.securesms.logging.Log
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient
|
import org.thoughtcrime.securesms.recipients.Recipient
|
||||||
|
import org.thoughtcrime.securesms.sms.MessageSender
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
||||||
import org.whispersystems.libsignal.util.guava.Optional
|
import org.whispersystems.libsignal.util.guava.Optional
|
||||||
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair
|
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair
|
||||||
@ -112,20 +114,24 @@ fun signAndSendPairingAuthorisationMessage(context: Context, pairingAuthorisatio
|
|||||||
Log.d("Loki", "Failed to sign pairing authorization.")
|
Log.d("Loki", "Failed to sign pairing authorization.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
retryIfNeeded(8) {
|
DatabaseFactory.getLokiAPIDatabase(context).insertOrUpdatePairingAuthorisation(signedPairingAuthorisation)
|
||||||
|
TextSecurePreferences.setMultiDevice(context, true)
|
||||||
|
|
||||||
|
val sendPromise = retryIfNeeded(8) {
|
||||||
sendPairingAuthorisationMessage(context, pairingAuthorisation.secondaryDevicePublicKey, signedPairingAuthorisation)
|
sendPairingAuthorisationMessage(context, pairingAuthorisation.secondaryDevicePublicKey, signedPairingAuthorisation)
|
||||||
}.fail {
|
}.fail {
|
||||||
Log.d("Loki", "Failed to send pairing authorization message to ${pairingAuthorisation.secondaryDevicePublicKey}.")
|
Log.d("Loki", "Failed to send pairing authorization message to ${pairingAuthorisation.secondaryDevicePublicKey}.")
|
||||||
}
|
}
|
||||||
DatabaseFactory.getLokiAPIDatabase(context).insertOrUpdatePairingAuthorisation(signedPairingAuthorisation)
|
|
||||||
TextSecurePreferences.setMultiDevice(context, true)
|
|
||||||
// Call function after a short delay
|
|
||||||
Handler().postDelayed({
|
|
||||||
LokiStorageAPI.shared.updateUserDeviceMappings().fail {
|
|
||||||
Log.w("Loki", "Failed to update device mapping")
|
|
||||||
}
|
|
||||||
}, 100)
|
|
||||||
|
|
||||||
|
val updatePromise = LokiStorageAPI.shared.updateUserDeviceMappings().fail {
|
||||||
|
Log.d("Loki", "Failed to update device mapping")
|
||||||
|
}
|
||||||
|
|
||||||
|
// If both promises complete successfully then we should sync our contacts
|
||||||
|
all(listOf(sendPromise, updatePromise), cancelOthersOnError = false).success {
|
||||||
|
Log.d("Loki", "Successfully pairing with a secondary device! Syncing contacts.")
|
||||||
|
MessageSender.sendContactSyncMessage(context)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isOneOfOurDevices(context: Context, address: Address): Promise<Boolean, Exception> {
|
fun isOneOfOurDevices(context: Context, address: Address): Promise<Boolean, Exception> {
|
||||||
|
@ -35,6 +35,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord;
|
|||||||
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
|
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
|
||||||
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
||||||
import org.thoughtcrime.securesms.jobs.MmsSendJob;
|
import org.thoughtcrime.securesms.jobs.MmsSendJob;
|
||||||
|
import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob;
|
||||||
import org.thoughtcrime.securesms.jobs.PushGroupSendJob;
|
import org.thoughtcrime.securesms.jobs.PushGroupSendJob;
|
||||||
import org.thoughtcrime.securesms.jobs.PushMediaSendJob;
|
import org.thoughtcrime.securesms.jobs.PushMediaSendJob;
|
||||||
import org.thoughtcrime.securesms.jobs.PushTextSendJob;
|
import org.thoughtcrime.securesms.jobs.PushTextSendJob;
|
||||||
@ -77,6 +78,14 @@ public class MessageSender {
|
|||||||
|
|
||||||
private enum MessageType { TEXT, MEDIA }
|
private enum MessageType { TEXT, MEDIA }
|
||||||
|
|
||||||
|
public static void sendContactSyncMessage(Context context) {
|
||||||
|
ApplicationContext.getInstance(context).getJobManager().add(new MultiDeviceContactUpdateJob(context, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendContactSyncMessage(Context context, Address address) {
|
||||||
|
ApplicationContext.getInstance(context).getJobManager().add(new MultiDeviceContactUpdateJob(context, address));
|
||||||
|
}
|
||||||
|
|
||||||
public static void sendBackgroundMessageToAllDevices(Context context, String contactHexEncodedPublicKey) {
|
public static void sendBackgroundMessageToAllDevices(Context context, String contactHexEncodedPublicKey) {
|
||||||
// Send the background message to the original pubkey
|
// Send the background message to the original pubkey
|
||||||
sendBackgroundMessage(context, contactHexEncodedPublicKey);
|
sendBackgroundMessage(context, contactHexEncodedPublicKey);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user