|
|
|
@ -138,6 +138,7 @@ import org.whispersystems.signalservice.loki.api.DeviceLink;
|
|
|
|
|
import org.whispersystems.signalservice.loki.api.DeviceLinkingSession;
|
|
|
|
|
import org.whispersystems.signalservice.loki.api.LokiAPI;
|
|
|
|
|
import org.whispersystems.signalservice.loki.api.LokiDeviceLinkUtilities;
|
|
|
|
|
import org.whispersystems.signalservice.loki.api.LokiFileServerAPI;
|
|
|
|
|
import org.whispersystems.signalservice.loki.crypto.LokiServiceCipher;
|
|
|
|
|
import org.whispersystems.signalservice.loki.messaging.LokiMessageFriendRequestStatus;
|
|
|
|
|
import org.whispersystems.signalservice.loki.messaging.LokiServiceMessage;
|
|
|
|
@ -704,6 +705,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
|
|
|
|
|
long threadID = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient);
|
|
|
|
|
LokiThreadFriendRequestStatus status = DatabaseFactory.getLokiThreadDatabase(context).getFriendRequestStatus(threadID);
|
|
|
|
|
if (status == LokiThreadFriendRequestStatus.NONE || status == LokiThreadFriendRequestStatus.REQUEST_EXPIRED) {
|
|
|
|
|
// TODO: We should ensure that our mapping has been uploaded to the server before sending out this message
|
|
|
|
|
MessageSender.sendBackgroundFriendRequest(context, hexEncodedPublicKey, "Please accept to enable messages to be synced across devices");
|
|
|
|
|
Log.d("Loki", "Sent friend request to " + hexEncodedPublicKey);
|
|
|
|
|
} else if (status == LokiThreadFriendRequestStatus.REQUEST_RECEIVED) {
|
|
|
|
@ -1206,6 +1208,17 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
|
|
|
|
|
TextSecurePreferences.setMultiDevice(context, true);
|
|
|
|
|
// Send a background message to the master device
|
|
|
|
|
MessageSender.sendBackgroundMessage(context, deviceLink.getMasterHexEncodedPublicKey());
|
|
|
|
|
/*
|
|
|
|
|
Update device link on the file server.
|
|
|
|
|
We put this here because after receiving the authorisation message, we will also receive all sync messages.
|
|
|
|
|
If these sync messages are contact syncs then we need to send them friend requests so that we can establish multi-device communication.
|
|
|
|
|
If our device mapping is not stored on the server before the other party receives our message, they will think that they got a friend request from a non-multi-device user.
|
|
|
|
|
*/
|
|
|
|
|
try {
|
|
|
|
|
PromiseUtil.timeout(LokiFileServerAPI.shared.addDeviceLink(deviceLink), 8000).get();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
Log.w("Loki", "Failed to upload device links to the file server! " + e);
|
|
|
|
|
}
|
|
|
|
|
// Update display name if needed
|
|
|
|
|
if (content.senderDisplayName.isPresent() && content.senderDisplayName.get().length() > 0) {
|
|
|
|
|
TextSecurePreferences.setProfileName(context, content.senderDisplayName.get());
|
|
|
|
@ -1218,7 +1231,6 @@ public class PushDecryptJob extends BaseJob implements InjectableType {
|
|
|
|
|
if (content.getSyncMessage().isPresent() && content.getSyncMessage().get().getContacts().isPresent()) {
|
|
|
|
|
handleContactSyncMessage(content.getSyncMessage().get().getContacts().get());
|
|
|
|
|
}
|
|
|
|
|
// The device link is propagated to the file server in LandingActivity.onDeviceLinkAuthorized because we can handle the error there
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void setDisplayName(String hexEncodedPublicKey, String profileName) {
|
|
|
|
|