package org.thoughtcrime.securesms.recipients; import android.content.Context; import android.net.Uri; import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.thoughtcrime.securesms.color.MaterialColor; import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus; import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.RecipientDatabase.InsightsBannerTier; import org.thoughtcrime.securesms.database.RecipientDatabase.MentionSetting; import org.thoughtcrime.securesms.database.RecipientDatabase.RecipientSettings; import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState; import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode; import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.util.guava.Optional; import java.util.LinkedList; import java.util.List; import java.util.UUID; public class RecipientDetails { final UUID uuid; final String username; final String e164; final String email; final GroupId groupId; final String name; final String customLabel; final Uri systemContactPhoto; final Uri contactUri; final Optional groupAvatarId; final MaterialColor color; final Uri messageRingtone; final Uri callRingtone; final long mutedUntil; final VibrateState messageVibrateState; final VibrateState callVibrateState; final boolean blocked; final int expireMessages; final List participants; final ProfileName profileName; final Optional defaultSubscriptionId; final RegisteredState registered; final byte[] profileKey; final byte[] profileKeyCredential; final String profileAvatar; final boolean hasProfileImage; final boolean profileSharing; final long lastProfileFetch; final boolean systemContact; final boolean isLocalNumber; final String notificationChannel; final UnidentifiedAccessMode unidentifiedAccessMode; final boolean forceSmsSelection; final Recipient.Capability uuidCapability; final Recipient.Capability groupsV2Capability; final InsightsBannerTier insightsBannerTier; final byte[] storageId; final MentionSetting mentionSetting; public RecipientDetails(@Nullable String name, @NonNull Optional groupAvatarId, boolean systemContact, boolean isLocalNumber, @NonNull RecipientSettings settings, @Nullable List participants) { this.groupAvatarId = groupAvatarId; this.systemContactPhoto = Util.uri(settings.getSystemContactPhotoUri()); this.customLabel = settings.getSystemPhoneLabel(); this.contactUri = Util.uri(settings.getSystemContactUri()); this.uuid = settings.getUuid(); this.username = settings.getUsername(); this.e164 = settings.getE164(); this.email = settings.getEmail(); this.groupId = settings.getGroupId(); this.color = settings.getColor(); this.messageRingtone = settings.getMessageRingtone(); this.callRingtone = settings.getCallRingtone(); this.mutedUntil = settings.getMuteUntil(); this.messageVibrateState = settings.getMessageVibrateState(); this.callVibrateState = settings.getCallVibrateState(); this.blocked = settings.isBlocked(); this.expireMessages = settings.getExpireMessages(); this.participants = participants == null ? new LinkedList<>() : participants; this.profileName = settings.getProfileName(); this.defaultSubscriptionId = settings.getDefaultSubscriptionId(); this.registered = settings.getRegistered(); this.profileKey = settings.getProfileKey(); this.profileKeyCredential = settings.getProfileKeyCredential(); this.profileAvatar = settings.getProfileAvatar(); this.hasProfileImage = settings.hasProfileImage(); this.profileSharing = settings.isProfileSharing(); this.lastProfileFetch = settings.getLastProfileFetch(); this.systemContact = systemContact; this.isLocalNumber = isLocalNumber; this.notificationChannel = settings.getNotificationChannel(); this.unidentifiedAccessMode = settings.getUnidentifiedAccessMode(); this.forceSmsSelection = settings.isForceSmsSelection(); this.uuidCapability = settings.getUuidCapability(); this.groupsV2Capability = settings.getGroupsV2Capability(); this.insightsBannerTier = settings.getInsightsBannerTier(); this.storageId = settings.getStorageId(); this.mentionSetting = settings.getMentionSetting(); if (name == null) this.name = settings.getSystemDisplayName(); else this.name = name; } /** * Only used for {@link Recipient#UNKNOWN}. */ RecipientDetails() { this.groupAvatarId = null; this.systemContactPhoto = null; this.customLabel = null; this.contactUri = null; this.uuid = null; this.username = null; this.e164 = null; this.email = null; this.groupId = null; this.color = null; this.messageRingtone = null; this.callRingtone = null; this.mutedUntil = 0; this.messageVibrateState = VibrateState.DEFAULT; this.callVibrateState = VibrateState.DEFAULT; this.blocked = false; this.expireMessages = 0; this.participants = new LinkedList<>(); this.profileName = ProfileName.EMPTY; this.insightsBannerTier = InsightsBannerTier.TIER_TWO; this.defaultSubscriptionId = Optional.absent(); this.registered = RegisteredState.UNKNOWN; this.profileKey = null; this.profileKeyCredential = null; this.profileAvatar = null; this.hasProfileImage = false; this.profileSharing = false; this.lastProfileFetch = 0; this.systemContact = true; this.isLocalNumber = false; this.notificationChannel = null; this.unidentifiedAccessMode = UnidentifiedAccessMode.UNKNOWN; this.forceSmsSelection = false; this.name = null; this.uuidCapability = Recipient.Capability.UNKNOWN; this.groupsV2Capability = Recipient.Capability.UNKNOWN; this.storageId = null; this.mentionSetting = MentionSetting.ALWAYS_NOTIFY; } public static @NonNull RecipientDetails forIndividual(@NonNull Context context, @NonNull RecipientSettings settings) { boolean systemContact = !TextUtils.isEmpty(settings.getSystemDisplayName()); boolean isLocalNumber = (settings.getE164() != null && settings.getE164().equals(TextSecurePreferences.getLocalNumber(context))) || (settings.getUuid() != null && settings.getUuid().equals(TextSecurePreferences.getLocalUuid(context))); return new RecipientDetails(null, Optional.absent(), systemContact, isLocalNumber, settings, null); } }