Refactor common pattern for checking Account capabilities

This commit is contained in:
Ehren Kret 2022-04-19 10:19:32 -05:00
parent 9e66f8ac11
commit 53203dbcef
1 changed files with 12 additions and 26 deletions

View File

@ -17,12 +17,14 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.function.Predicate;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.whispersystems.textsecuregcm.auth.AuthenticationCredentials; import org.whispersystems.textsecuregcm.auth.AuthenticationCredentials;
import org.whispersystems.textsecuregcm.auth.StoredRegistrationLock; import org.whispersystems.textsecuregcm.auth.StoredRegistrationLock;
import org.whispersystems.textsecuregcm.entities.AccountAttributes; import org.whispersystems.textsecuregcm.entities.AccountAttributes;
import org.whispersystems.textsecuregcm.storage.Device.DeviceCapabilities;
import org.whispersystems.textsecuregcm.util.Util; import org.whispersystems.textsecuregcm.util.Util;
public class Account { public class Account {
@ -203,43 +205,23 @@ public class Account {
} }
public boolean isGv1MigrationSupported() { public boolean isGv1MigrationSupported() {
requireNotStale(); return allEnabledDevicesHaveCapability(DeviceCapabilities::isGv1Migration);
return devices.stream()
.filter(Device::isEnabled)
.allMatch(device -> device.getCapabilities() != null && device.getCapabilities().isGv1Migration());
} }
public boolean isSenderKeySupported() { public boolean isSenderKeySupported() {
requireNotStale(); return allEnabledDevicesHaveCapability(DeviceCapabilities::isSenderKey);
return devices.stream()
.filter(Device::isEnabled)
.allMatch(device -> device.getCapabilities() != null && device.getCapabilities().isSenderKey());
} }
public boolean isAnnouncementGroupSupported() { public boolean isAnnouncementGroupSupported() {
requireNotStale(); return allEnabledDevicesHaveCapability(DeviceCapabilities::isAnnouncementGroup);
return devices.stream()
.filter(Device::isEnabled)
.allMatch(device -> device.getCapabilities() != null && device.getCapabilities().isAnnouncementGroup());
} }
public boolean isChangeNumberSupported() { public boolean isChangeNumberSupported() {
requireNotStale(); return allEnabledDevicesHaveCapability(DeviceCapabilities::isChangeNumber);
return devices.stream()
.filter(Device::isEnabled)
.allMatch(device -> device.getCapabilities() != null && device.getCapabilities().isChangeNumber());
} }
public boolean isPniSupported() { public boolean isPniSupported() {
requireNotStale(); return allEnabledDevicesHaveCapability(DeviceCapabilities::isPni);
return devices.stream()
.filter(Device::isEnabled)
.allMatch(device -> device.getCapabilities() != null && device.getCapabilities().isPni());
} }
public boolean isStoriesSupported() { public boolean isStoriesSupported() {
@ -253,11 +235,15 @@ public class Account {
} }
public boolean isGiftBadgesSupported() { public boolean isGiftBadgesSupported() {
return allEnabledDevicesHaveCapability(DeviceCapabilities::isGiftBadges);
}
private boolean allEnabledDevicesHaveCapability(Predicate<DeviceCapabilities> predicate) {
requireNotStale(); requireNotStale();
return devices.stream() return devices.stream()
.filter(Device::isEnabled) .filter(Device::isEnabled)
.allMatch(device -> device.getCapabilities() != null && device.getCapabilities().isGiftBadges()); .allMatch(device -> device.getCapabilities() != null && predicate.test(device.getCapabilities()));
} }
public boolean isEnabled() { public boolean isEnabled() {