Convert `Device.Capabilities` to a record
This commit is contained in:
parent
d868e3075c
commit
d51c6fd2f8
|
@ -117,7 +117,7 @@ public class TestUser {
|
||||||
}
|
}
|
||||||
|
|
||||||
public AccountAttributes accountAttributes() {
|
public AccountAttributes accountAttributes() {
|
||||||
return new AccountAttributes(true, registrationId, "", "", true, new Device.DeviceCapabilities())
|
return new AccountAttributes(true, registrationId, "", "", true, new Device.DeviceCapabilities(false, false, false, false))
|
||||||
.withUnidentifiedAccessKey(unidentifiedAccessKey)
|
.withUnidentifiedAccessKey(unidentifiedAccessKey)
|
||||||
.withRecoveryPassword(registrationPassword);
|
.withRecoveryPassword(registrationPassword);
|
||||||
}
|
}
|
||||||
|
|
|
@ -344,7 +344,7 @@ public class DeviceController {
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean isCapabilityDowngrade(Account account, DeviceCapabilities capabilities) {
|
static boolean isCapabilityDowngrade(Account account, DeviceCapabilities capabilities) {
|
||||||
return account.isPniSupported() && !capabilities.isPni();
|
return account.isPniSupported() && !capabilities.pni();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pair<Account, Device> createDevice(final String password,
|
private Pair<Account, Device> createDevice(final String password,
|
||||||
|
|
|
@ -247,21 +247,21 @@ public class Account {
|
||||||
public boolean isStorageSupported() {
|
public boolean isStorageSupported() {
|
||||||
requireNotStale();
|
requireNotStale();
|
||||||
|
|
||||||
return devices.stream().anyMatch(device -> device.getCapabilities() != null && device.getCapabilities().isStorage());
|
return devices.stream().anyMatch(device -> device.getCapabilities() != null && device.getCapabilities().storage());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isTransferSupported() {
|
public boolean isTransferSupported() {
|
||||||
requireNotStale();
|
requireNotStale();
|
||||||
|
|
||||||
return getMasterDevice().map(Device::getCapabilities).map(Device.DeviceCapabilities::isTransfer).orElse(false);
|
return getMasterDevice().map(Device::getCapabilities).map(Device.DeviceCapabilities::transfer).orElse(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPniSupported() {
|
public boolean isPniSupported() {
|
||||||
return allEnabledDevicesHaveCapability(DeviceCapabilities::isPni);
|
return allEnabledDevicesHaveCapability(DeviceCapabilities::pni);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPaymentActivationSupported() {
|
public boolean isPaymentActivationSupported() {
|
||||||
return allEnabledDevicesHaveCapability(DeviceCapabilities::isPaymentActivation);
|
return allEnabledDevicesHaveCapability(DeviceCapabilities::paymentActivation);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean allEnabledDevicesHaveCapability(final Predicate<DeviceCapabilities> predicate) {
|
private boolean allEnabledDevicesHaveCapability(final Predicate<DeviceCapabilities> predicate) {
|
||||||
|
|
|
@ -274,43 +274,6 @@ public class Device {
|
||||||
return this.userAgent;
|
return this.userAgent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class DeviceCapabilities {
|
public record DeviceCapabilities(boolean storage, boolean transfer, boolean pni, boolean paymentActivation) {
|
||||||
@JsonProperty
|
|
||||||
private boolean storage;
|
|
||||||
|
|
||||||
@JsonProperty
|
|
||||||
private boolean transfer;
|
|
||||||
|
|
||||||
@JsonProperty
|
|
||||||
private boolean pni;
|
|
||||||
|
|
||||||
@JsonProperty
|
|
||||||
private boolean paymentActivation;
|
|
||||||
|
|
||||||
public DeviceCapabilities() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public DeviceCapabilities(boolean storage, boolean transfer, final boolean pni, final boolean paymentActivation) {
|
|
||||||
this.storage = storage;
|
|
||||||
this.transfer = transfer;
|
|
||||||
this.pni = pni;
|
|
||||||
this.paymentActivation = paymentActivation;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isStorage() {
|
|
||||||
return storage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isTransfer() {
|
|
||||||
return transfer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isPni() {
|
|
||||||
return pni;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isPaymentActivation() {
|
|
||||||
return paymentActivation;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -437,10 +437,10 @@ class RegistrationControllerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
final AccountAttributes fetchesMessagesAccountAttributes =
|
final AccountAttributes fetchesMessagesAccountAttributes =
|
||||||
new AccountAttributes(true, 1, "test", null, true, new Device.DeviceCapabilities());
|
new AccountAttributes(true, 1, "test", null, true, new Device.DeviceCapabilities(false, false, false, false));
|
||||||
|
|
||||||
final AccountAttributes pushAccountAttributes =
|
final AccountAttributes pushAccountAttributes =
|
||||||
new AccountAttributes(false, 1, "test", null, true, new Device.DeviceCapabilities());
|
new AccountAttributes(false, 1, "test", null, true, new Device.DeviceCapabilities(false, false, false, false));
|
||||||
|
|
||||||
return Stream.of(
|
return Stream.of(
|
||||||
// "Fetches messages" is true, but an APNs token is provided
|
// "Fetches messages" is true, but an APNs token is provided
|
||||||
|
@ -529,7 +529,7 @@ class RegistrationControllerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
final AccountAttributes accountAttributes =
|
final AccountAttributes accountAttributes =
|
||||||
new AccountAttributes(true, 1, "test", null, true, new Device.DeviceCapabilities());
|
new AccountAttributes(true, 1, "test", null, true, new Device.DeviceCapabilities(false, false, false, false));
|
||||||
|
|
||||||
return Stream.of(
|
return Stream.of(
|
||||||
// Signed PNI EC pre-key is missing
|
// Signed PNI EC pre-key is missing
|
||||||
|
@ -720,7 +720,7 @@ class RegistrationControllerTest {
|
||||||
|
|
||||||
RegistrationRequest reg = new RegistrationRequest("session-id",
|
RegistrationRequest reg = new RegistrationRequest("session-id",
|
||||||
new byte[0],
|
new byte[0],
|
||||||
new AccountAttributes(true, 1, "test", null, true, new Device.DeviceCapabilities()),
|
new AccountAttributes(true, 1, "test", null, true, new Device.DeviceCapabilities(false, false, false, false)),
|
||||||
true,
|
true,
|
||||||
requireAtomic,
|
requireAtomic,
|
||||||
Optional.empty(),
|
Optional.empty(),
|
||||||
|
@ -758,10 +758,10 @@ class RegistrationControllerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
final AccountAttributes fetchesMessagesAccountAttributes =
|
final AccountAttributes fetchesMessagesAccountAttributes =
|
||||||
new AccountAttributes(true, 1, "test", null, true, new Device.DeviceCapabilities());
|
new AccountAttributes(true, 1, "test", null, true, new Device.DeviceCapabilities(false, false, false, false));
|
||||||
|
|
||||||
final AccountAttributes pushAccountAttributes =
|
final AccountAttributes pushAccountAttributes =
|
||||||
new AccountAttributes(false, 1, "test", null, true, new Device.DeviceCapabilities());
|
new AccountAttributes(false, 1, "test", null, true, new Device.DeviceCapabilities(false, false, false, false));
|
||||||
|
|
||||||
final String apnsToken = "apns-token";
|
final String apnsToken = "apns-token";
|
||||||
final String apnsVoipToken = "apns-voip-token";
|
final String apnsVoipToken = "apns-voip-token";
|
||||||
|
|
|
@ -222,8 +222,8 @@ class AccountTest {
|
||||||
when(transferCapableLinkedDevice.isMaster()).thenReturn(false);
|
when(transferCapableLinkedDevice.isMaster()).thenReturn(false);
|
||||||
when(transferCapableLinkedDevice.getCapabilities()).thenReturn(transferCapabilities);
|
when(transferCapableLinkedDevice.getCapabilities()).thenReturn(transferCapabilities);
|
||||||
|
|
||||||
when(transferCapabilities.isTransfer()).thenReturn(true);
|
when(transferCapabilities.transfer()).thenReturn(true);
|
||||||
when(nonTransferCapabilities.isTransfer()).thenReturn(false);
|
when(nonTransferCapabilities.transfer()).thenReturn(false);
|
||||||
|
|
||||||
{
|
{
|
||||||
final Account transferableMasterAccount =
|
final Account transferableMasterAccount =
|
||||||
|
|
|
@ -153,7 +153,7 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||||
final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair();
|
final ECKeyPair pniIdentityKeyPair = Curve.generateKeyPair();
|
||||||
final ECSignedPreKey rotatedSignedPreKey = KeysHelper.signedECPreKey(1L, pniIdentityKeyPair);
|
final ECSignedPreKey rotatedSignedPreKey = KeysHelper.signedECPreKey(1L, pniIdentityKeyPair);
|
||||||
|
|
||||||
final AccountAttributes accountAttributes = new AccountAttributes(true, rotatedPniRegistrationId + 1, "test", null, true, new Device.DeviceCapabilities());
|
final AccountAttributes accountAttributes = new AccountAttributes(true, rotatedPniRegistrationId + 1, "test", null, true, new Device.DeviceCapabilities(false, false, false, false));
|
||||||
final Account account = accountsManager.create(originalNumber, "password", null, accountAttributes, new ArrayList<>());
|
final Account account = accountsManager.create(originalNumber, "password", null, accountAttributes, new ArrayList<>());
|
||||||
account.getMasterDevice().orElseThrow().setSignedPreKey(KeysHelper.signedECPreKey(1, pniIdentityKeyPair));
|
account.getMasterDevice().orElseThrow().setSignedPreKey(KeysHelper.signedECPreKey(1, pniIdentityKeyPair));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue