diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt index 56b5e9a08..4444d7806 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt @@ -2068,20 +2068,19 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : } fun setUsername(id: RecipientId, username: String?) { - if (username != null) { - val existingUsername = getByUsername(username) - if (existingUsername.isPresent && id != existingUsername.get()) { - Log.i(TAG, "Username was previously thought to be owned by " + existingUsername.get() + ". Clearing their username.") - setUsername(existingUsername.get(), null) + writableDatabase.withinTransaction { + if (username != null) { + val existingUsername = getByUsername(username) + if (existingUsername.isPresent && id != existingUsername.get()) { + Log.i(TAG, "Username was previously thought to be owned by " + existingUsername.get() + ". Clearing their username.") + setUsername(existingUsername.get(), null) + } } - } - val contentValues = ContentValues(1).apply { - put(USERNAME, username) - } - if (update(id, contentValues)) { - ApplicationDependencies.getDatabaseObserver().notifyRecipientChanged(id) - StorageSyncHelper.scheduleSyncForDataChange() + if (update(id, contentValuesOf(USERNAME to username))) { + ApplicationDependencies.getDatabaseObserver().notifyRecipientChanged(id) + StorageSyncHelper.scheduleSyncForDataChange() + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java index 4bd5c8789..13025db2d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java @@ -141,6 +141,9 @@ public class RefreshOwnProfileJob extends BaseJob { profileAndCredential.getExpiringProfileKeyCredential() .ifPresent(expiringProfileKeyCredential -> setExpiringProfileKeyCredential(self, ProfileKeyUtil.getSelfProfileKey(), expiringProfileKeyCredential)); + String username = ApplicationDependencies.getSignalServiceAccountManager().getWhoAmI().getUsername(); + SignalDatabase.recipients().setUsername(Recipient.self().getId(), username); + StoryOnboardingDownloadJob.Companion.enqueueIfNeeded(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditRepository.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditRepository.java index 4bee12c4f..2a8080436 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditRepository.java @@ -8,6 +8,7 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; +import org.thoughtcrime.securesms.jobs.MultiDeviceProfileContentUpdateJob; import org.thoughtcrime.securesms.recipients.Recipient; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.push.exceptions.UsernameIsNotReservedException; @@ -66,6 +67,7 @@ class UsernameEditRepository { try { accountManager.confirmUsername(reserveUsernameResponse); SignalDatabase.recipients().setUsername(Recipient.self().getId(), reserveUsernameResponse.getUsername()); + ApplicationDependencies.getJobManager().add(new MultiDeviceProfileContentUpdateJob()); Log.i(TAG, "[confirmUsername] Successfully reserved username."); return UsernameSetResult.SUCCESS; } catch (UsernameTakenException e) { diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/WhoAmIResponse.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/WhoAmIResponse.java index 3a78e8047..af9180b88 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/WhoAmIResponse.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/WhoAmIResponse.java @@ -12,6 +12,9 @@ public class WhoAmIResponse { @JsonProperty public String number; + @JsonProperty + public String username; + public String getAci() { return uuid; } @@ -23,4 +26,8 @@ public class WhoAmIResponse { public String getNumber() { return number; } + + public String getUsername() { + return username; + } }