Set discoverable account attribute.

master
Alan Evans 2020-09-04 16:59:24 -03:00 committed by Cody Henthorne
parent bcd27355f9
commit 43ed9e7310
8 changed files with 45 additions and 14 deletions

View File

@ -71,18 +71,22 @@ public class RefreshAttributesJob extends BaseJob {
registrationLockV1 = TextSecurePreferences.getDeprecatedV1RegistrationLockPin(context);
}
boolean phoneNumberDiscoverable = SignalStore.phoneNumberPrivacy().getPhoneNumberListingMode().isDiscoverable();
SignalServiceProfile.Capabilities capabilities = AppCapabilities.getCapabilities(kbsValues.hasPin() && !kbsValues.hasOptedOut());
Log.i(TAG, "Calling setAccountAttributes() reglockV1? " + !TextUtils.isEmpty(registrationLockV1) + ", reglockV2? " + !TextUtils.isEmpty(registrationLockV2) + ", pin? " + kbsValues.hasPin() +
"\n Phone number discoverable : " + phoneNumberDiscoverable +
"\n Capabilities:" +
"\n Storage? " + capabilities.isStorage() +
"\n GV2? " + capabilities.isGv2() +
"\n UUID? " + capabilities.isUuid()) ;
"\n UUID? " + capabilities.isUuid());
SignalServiceAccountManager signalAccountManager = ApplicationDependencies.getSignalServiceAccountManager();
signalAccountManager.setAccountAttributes(null, registrationId, fetchesMessages,
registrationLockV1, registrationLockV2,
unidentifiedAccessKey, universalUnidentifiedAccess,
capabilities);
capabilities,
phoneNumberDiscoverable);
}
@Override

View File

@ -81,6 +81,14 @@ public final class PhoneNumberPrivacyValues extends SignalStoreValues {
*/
public enum PhoneNumberListingMode {
LISTED,
UNLISTED
UNLISTED;
public boolean isDiscoverable() {
return this == LISTED;
}
public boolean isUnlisted() {
return this == UNLISTED;
}
}
}

View File

@ -599,6 +599,7 @@ public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment
phoneNumberPrivacyValues.setPhoneNumberListingMode(phoneNumberListingMode);
Log.i(TAG, String.format("PhoneNumberListingMode changed to %s. Scheduling storage value sync", phoneNumberListingMode));
StorageSyncHelper.scheduleSyncForDataChange();
ApplicationDependencies.getJobManager().add(new RefreshAttributesJob());
initializePhoneNumberPrivacyWhoCanFindSummary();
})
.setNegativeButton(android.R.string.cancel, null)

View File

@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.jobmanager.JobManager;
import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob;
import org.thoughtcrime.securesms.jobs.RotateCertificateJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.pin.PinState;
import org.thoughtcrime.securesms.push.AccountManagerFactory;
@ -220,7 +221,8 @@ public final class CodeVerificationRequest {
registrationLockV2,
unidentifiedAccessKey,
universalUnidentifiedAccess,
AppCapabilities.getCapabilities(true));
AppCapabilities.getCapabilities(true),
SignalStore.phoneNumberPrivacy().getPhoneNumberListingMode().isDiscoverable());
UUID uuid = UuidUtil.parseOrThrow(response.getUuid());
boolean hasPin = response.isStorageCapable();

View File

@ -399,7 +399,7 @@ public final class StorageSyncHelper {
.setReadReceiptsEnabled(TextSecurePreferences.isReadReceiptsEnabled(context))
.setSealedSenderIndicatorsEnabled(TextSecurePreferences.isShowUnidentifiedDeliveryIndicatorsEnabled(context))
.setLinkPreviewsEnabled(SignalStore.settings().isLinkPreviewsEnabled())
.setUnlistedPhoneNumber(SignalStore.phoneNumberPrivacy().getPhoneNumberListingMode() == PhoneNumberPrivacyValues.PhoneNumberListingMode.UNLISTED)
.setUnlistedPhoneNumber(SignalStore.phoneNumberPrivacy().getPhoneNumberListingMode().isUnlisted())
.setPhoneNumberSharingMode(localToRemotePhoneNumberSharingMode(SignalStore.phoneNumberPrivacy().getPhoneNumberSharingMode()))
.build();

View File

@ -244,7 +244,8 @@ public class SignalServiceAccountManager {
public VerifyAccountResponse verifyAccountWithCode(String verificationCode, String signalingKey, int signalProtocolRegistrationId, boolean fetchesMessages,
String pin, String registrationLock,
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities)
SignalServiceProfile.Capabilities capabilities,
boolean discoverableByPhoneNumber)
throws IOException
{
return this.pushServiceSocket.verifyAccountCode(verificationCode, signalingKey,
@ -253,7 +254,8 @@ public class SignalServiceAccountManager {
pin, registrationLock,
unidentifiedAccessKey,
unrestrictedUnidentifiedAccess,
capabilities);
capabilities,
discoverableByPhoneNumber);
}
/**
@ -272,13 +274,15 @@ public class SignalServiceAccountManager {
public void setAccountAttributes(String signalingKey, int signalProtocolRegistrationId, boolean fetchesMessages,
String pin, String registrationLock,
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities)
SignalServiceProfile.Capabilities capabilities,
boolean discoverableByPhoneNumber)
throws IOException
{
this.pushServiceSocket.setAccountAttributes(signalingKey, signalProtocolRegistrationId, fetchesMessages,
pin, registrationLock,
unidentifiedAccessKey, unrestrictedUnidentifiedAccess,
capabilities);
capabilities,
discoverableByPhoneNumber);
}
/**

View File

@ -39,6 +39,9 @@ public class AccountAttributes {
@JsonProperty
private boolean unrestrictedUnidentifiedAccess;
@JsonProperty
private boolean discoverableByPhoneNumber;
@JsonProperty
private SignalServiceProfile.Capabilities capabilities;
@ -49,7 +52,8 @@ public class AccountAttributes {
String registrationLock,
byte[] unidentifiedAccessKey,
boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities)
SignalServiceProfile.Capabilities capabilities,
boolean discoverableByPhoneNumber)
{
this.signalingKey = signalingKey;
this.registrationId = registrationId;
@ -61,6 +65,7 @@ public class AccountAttributes {
this.unidentifiedAccessKey = unidentifiedAccessKey;
this.unrestrictedUnidentifiedAccess = unrestrictedUnidentifiedAccess;
this.capabilities = capabilities;
this.discoverableByPhoneNumber = discoverableByPhoneNumber;
}
public AccountAttributes() {}
@ -101,6 +106,10 @@ public class AccountAttributes {
return unrestrictedUnidentifiedAccess;
}
public boolean isDiscoverableByPhoneNumber() {
return discoverableByPhoneNumber;
}
public SignalServiceProfile.Capabilities getCapabilities() {
return capabilities;
}

View File

@ -292,10 +292,11 @@ public class PushServiceSocket {
public VerifyAccountResponse verifyAccountCode(String verificationCode, String signalingKey, int registrationId, boolean fetchesMessages,
String pin, String registrationLock,
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities)
SignalServiceProfile.Capabilities capabilities,
boolean discoverableByPhoneNumber)
throws IOException
{
AccountAttributes signalingKeyEntity = new AccountAttributes(signalingKey, registrationId, fetchesMessages, pin, registrationLock, unidentifiedAccessKey, unrestrictedUnidentifiedAccess, capabilities);
AccountAttributes signalingKeyEntity = new AccountAttributes(signalingKey, registrationId, fetchesMessages, pin, registrationLock, unidentifiedAccessKey, unrestrictedUnidentifiedAccess, capabilities, discoverableByPhoneNumber);
String requestBody = JsonUtil.toJson(signalingKeyEntity);
String responseBody = makeServiceRequest(String.format(VERIFY_ACCOUNT_CODE_PATH, verificationCode), "PUT", requestBody);
@ -305,7 +306,8 @@ public class PushServiceSocket {
public void setAccountAttributes(String signalingKey, int registrationId, boolean fetchesMessages,
String pin, String registrationLock,
byte[] unidentifiedAccessKey, boolean unrestrictedUnidentifiedAccess,
SignalServiceProfile.Capabilities capabilities)
SignalServiceProfile.Capabilities capabilities,
boolean discoverableByPhoneNumber)
throws IOException
{
if (registrationLock != null && pin != null) {
@ -313,7 +315,8 @@ public class PushServiceSocket {
}
AccountAttributes accountAttributes = new AccountAttributes(signalingKey, registrationId, fetchesMessages, pin, registrationLock,
unidentifiedAccessKey, unrestrictedUnidentifiedAccess, capabilities);
unidentifiedAccessKey, unrestrictedUnidentifiedAccess, capabilities,
discoverableByPhoneNumber);
makeServiceRequest(SET_ACCOUNT_ATTRIBUTES, "PUT", JsonUtil.toJson(accountAttributes));
}