1 package org
.asamk
.signal
.manager
.storage
.recipients
;
3 import org
.whispersystems
.signalservice
.internal
.util
.Util
;
5 import java
.util
.Collections
;
6 import java
.util
.Objects
;
11 private final long lastUpdateTimestamp
;
13 private final String givenName
;
15 private final String familyName
;
17 private final String about
;
19 private final String aboutEmoji
;
21 private final String avatarUrlPath
;
23 private final UnidentifiedAccessMode unidentifiedAccessMode
;
25 private final Set
<Capability
> capabilities
;
28 final long lastUpdateTimestamp
,
29 final String givenName
,
30 final String familyName
,
32 final String aboutEmoji
,
33 final String avatarUrlPath
,
34 final UnidentifiedAccessMode unidentifiedAccessMode
,
35 final Set
<Capability
> capabilities
37 this.lastUpdateTimestamp
= lastUpdateTimestamp
;
38 this.givenName
= givenName
;
39 this.familyName
= familyName
;
41 this.aboutEmoji
= aboutEmoji
;
42 this.avatarUrlPath
= avatarUrlPath
;
43 this.unidentifiedAccessMode
= unidentifiedAccessMode
;
44 this.capabilities
= capabilities
;
47 private Profile(final Builder builder
) {
48 lastUpdateTimestamp
= builder
.lastUpdateTimestamp
;
49 givenName
= builder
.givenName
;
50 familyName
= builder
.familyName
;
51 about
= builder
.about
;
52 aboutEmoji
= builder
.aboutEmoji
;
53 avatarUrlPath
= builder
.avatarUrlPath
;
54 unidentifiedAccessMode
= builder
.unidentifiedAccessMode
;
55 capabilities
= builder
.capabilities
;
58 public static Builder
newBuilder() {
62 public static Builder
newBuilder(final Profile copy
) {
63 Builder builder
= new Builder();
64 builder
.lastUpdateTimestamp
= copy
.getLastUpdateTimestamp();
65 builder
.givenName
= copy
.getGivenName();
66 builder
.familyName
= copy
.getFamilyName();
67 builder
.about
= copy
.getAbout();
68 builder
.aboutEmoji
= copy
.getAboutEmoji();
69 builder
.avatarUrlPath
= copy
.getAvatarUrlPath();
70 builder
.unidentifiedAccessMode
= copy
.getUnidentifiedAccessMode();
71 builder
.capabilities
= copy
.getCapabilities();
75 public long getLastUpdateTimestamp() {
76 return lastUpdateTimestamp
;
79 public String
getGivenName() {
83 public String
getFamilyName() {
87 public String
getInternalServiceName() {
88 if (familyName
== null) {
89 return givenName
== null ?
"" : givenName
;
91 return String
.join("\0", givenName
== null ?
"" : givenName
, familyName
);
94 public String
getDisplayName() {
95 final var noGivenName
= Util
.isEmpty(givenName
);
96 final var noFamilyName
= Util
.isEmpty(familyName
);
98 if (noGivenName
&& noFamilyName
) {
100 } else if (noGivenName
) {
102 } else if (noFamilyName
) {
106 return givenName
+ " " + familyName
;
109 public String
getAbout() {
113 public String
getAboutEmoji() {
117 public String
getAvatarUrlPath() {
118 return avatarUrlPath
;
121 public UnidentifiedAccessMode
getUnidentifiedAccessMode() {
122 return unidentifiedAccessMode
;
125 public Set
<Capability
> getCapabilities() {
129 public enum UnidentifiedAccessMode
{
135 static UnidentifiedAccessMode
valueOfOrUnknown(String value
) {
137 return valueOf(value
);
138 } catch (IllegalArgumentException ignored
) {
144 public enum Capability
{
150 static Capability
valueOfOrNull(String value
) {
152 return valueOf(value
);
153 } catch (IllegalArgumentException ignored
) {
160 public boolean equals(final Object o
) {
161 if (this == o
) return true;
162 if (o
== null || getClass() != o
.getClass()) return false;
163 final Profile profile
= (Profile
) o
;
164 return lastUpdateTimestamp
== profile
.lastUpdateTimestamp
165 && Objects
.equals(givenName
, profile
.givenName
)
166 && Objects
.equals(familyName
, profile
.familyName
)
167 && Objects
.equals(about
, profile
.about
)
168 && Objects
.equals(aboutEmoji
, profile
.aboutEmoji
)
169 && Objects
.equals(avatarUrlPath
, profile
.avatarUrlPath
)
170 && unidentifiedAccessMode
== profile
.unidentifiedAccessMode
171 && Objects
.equals(capabilities
, profile
.capabilities
);
175 public int hashCode() {
176 return Objects
.hash(lastUpdateTimestamp
,
182 unidentifiedAccessMode
,
186 public static final class Builder
{
188 private String givenName
;
189 private String familyName
;
190 private String about
;
191 private String aboutEmoji
;
192 private String avatarUrlPath
;
193 private UnidentifiedAccessMode unidentifiedAccessMode
= UnidentifiedAccessMode
.UNKNOWN
;
194 private Set
<Capability
> capabilities
= Collections
.emptySet();
195 private long lastUpdateTimestamp
= 0;
200 public Builder
withGivenName(final String val
) {
205 public Builder
withFamilyName(final String val
) {
210 public Builder
withAbout(final String val
) {
215 public Builder
withAboutEmoji(final String val
) {
220 public Builder
withAvatarUrlPath(final String val
) {
225 public Builder
withUnidentifiedAccessMode(final UnidentifiedAccessMode val
) {
226 unidentifiedAccessMode
= val
;
230 public Builder
withCapabilities(final Set
<Capability
> val
) {
235 public Profile
build() {
236 return new Profile(this);
239 public Builder
withLastUpdateTimestamp(final long val
) {
240 lastUpdateTimestamp
= val
;