mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-30 16:37:11 +00:00
Add indicator for system contacts.
This commit is contained in:
@@ -159,7 +159,7 @@ public class DirectoryHelper {
|
||||
RegisteredState originalRegisteredState = recipient.resolve().getRegistered();
|
||||
RegisteredState newRegisteredState = null;
|
||||
|
||||
if (recipient.getUuid().isPresent()) {
|
||||
if (recipient.hasUuid() && !recipient.hasE164()) {
|
||||
boolean isRegistered = isUuidRegistered(context, recipient);
|
||||
if (isRegistered) {
|
||||
recipientDatabase.markRegistered(recipient.getId(), recipient.getUuid().get());
|
||||
|
||||
@@ -54,15 +54,15 @@ public class ConversationTitleView extends RelativeLayout {
|
||||
public void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
|
||||
this.content = ViewUtil.findById(this, R.id.content);
|
||||
this.title = ViewUtil.findById(this, R.id.title);
|
||||
this.subtitle = ViewUtil.findById(this, R.id.subtitle);
|
||||
this.verified = ViewUtil.findById(this, R.id.verified_indicator);
|
||||
this.subtitleContainer = ViewUtil.findById(this, R.id.subtitle_container);
|
||||
this.verifiedSubtitle = ViewUtil.findById(this, R.id.verified_subtitle);
|
||||
this.avatar = ViewUtil.findById(this, R.id.contact_photo_image);
|
||||
this.expirationBadgeContainer = ViewUtil.findById(this, R.id.expiration_badge_container);
|
||||
this.expirationBadgeTime = ViewUtil.findById(this, R.id.expiration_badge);
|
||||
this.content = findViewById(R.id.content);
|
||||
this.title = findViewById(R.id.title);
|
||||
this.subtitle = findViewById(R.id.subtitle);
|
||||
this.verified = findViewById(R.id.verified_indicator);
|
||||
this.subtitleContainer = findViewById(R.id.subtitle_container);
|
||||
this.verifiedSubtitle = findViewById(R.id.verified_subtitle);
|
||||
this.avatar = findViewById(R.id.contact_photo_image);
|
||||
this.expirationBadgeContainer = findViewById(R.id.expiration_badge_container);
|
||||
this.expirationBadgeTime = findViewById(R.id.expiration_badge);
|
||||
|
||||
ViewUtil.setTextViewGravityStart(this.title, getContext());
|
||||
ViewUtil.setTextViewGravityStart(this.subtitle, getContext());
|
||||
@@ -85,14 +85,22 @@ public class ConversationTitleView extends RelativeLayout {
|
||||
if (recipient == null) setComposeTitle();
|
||||
else setRecipientTitle(recipient);
|
||||
|
||||
int startDrawable = 0;
|
||||
int endDrawable = 0;
|
||||
|
||||
if (recipient != null && recipient.isBlocked()) {
|
||||
title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_block_white_18dp, 0, 0, 0);
|
||||
startDrawable = R.drawable.ic_block_white_18dp;
|
||||
} else if (recipient != null && recipient.isMuted()) {
|
||||
title.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_volume_off_white_18dp, 0, 0, 0);
|
||||
} else {
|
||||
title.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
|
||||
startDrawable = R.drawable.ic_volume_off_white_18dp;
|
||||
}
|
||||
|
||||
if (recipient != null && recipient.isSystemContact() && !recipient.isLocalNumber()) {
|
||||
endDrawable = R.drawable.ic_profile_circle_outline_16;
|
||||
}
|
||||
|
||||
title.setCompoundDrawablesRelativeWithIntrinsicBounds(startDrawable, 0, endDrawable, 0);
|
||||
|
||||
|
||||
if (recipient != null) {
|
||||
this.avatar.setAvatar(glideRequests, recipient, false);
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ import org.thoughtcrime.securesms.mms.GlideApp;
|
||||
import org.thoughtcrime.securesms.notifications.NotificationChannels;
|
||||
import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientExporter;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.recipients.ui.notifications.CustomNotificationsDialogFragment;
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
@@ -58,13 +59,17 @@ public class ManageRecipientFragment extends LoggingFragment {
|
||||
private static final String RECIPIENT_ID = "RECIPIENT_ID";
|
||||
private static final String FROM_CONVERSATION = "FROM_CONVERSATION";
|
||||
|
||||
private static final int RETURN_FROM_MEDIA = 405;
|
||||
private static final int REQUEST_CODE_RETURN_FROM_MEDIA = 405;
|
||||
private static final int REQUEST_CODE_ADD_CONTACT = 588;
|
||||
|
||||
private ManageRecipientViewModel viewModel;
|
||||
private GroupMemberListView sharedGroupList;
|
||||
private Toolbar toolbar;
|
||||
private TextView title;
|
||||
private TextView subtitle;
|
||||
private View contactRow;
|
||||
private TextView contactText;
|
||||
private ImageView contactIcon;
|
||||
private AvatarImageView avatar;
|
||||
private ThreadPhotoRailView threadPhotoRailView;
|
||||
private View mediaCard;
|
||||
@@ -114,6 +119,9 @@ public class ManageRecipientFragment extends LoggingFragment {
|
||||
|
||||
avatar = view.findViewById(R.id.recipient_avatar);
|
||||
toolbar = view.findViewById(R.id.toolbar);
|
||||
contactRow = view.findViewById(R.id.recipient_contact_row);
|
||||
contactText = view.findViewById(R.id.recipient_contact_text);
|
||||
contactIcon = view.findViewById(R.id.recipient_contact_icon);
|
||||
title = view.findViewById(R.id.name);
|
||||
subtitle = view.findViewById(R.id.username_number);
|
||||
sharedGroupList = view.findViewById(R.id.shared_group_list);
|
||||
@@ -182,6 +190,7 @@ public class ManageRecipientFragment extends LoggingFragment {
|
||||
notificationsCard.setVisibility(View.GONE);
|
||||
groupMembershipCard.setVisibility(View.GONE);
|
||||
blockUnblockCard.setVisibility(View.GONE);
|
||||
contactRow.setVisibility(View.GONE);
|
||||
} else {
|
||||
viewModel.getVisibleSharedGroups().observe(getViewLifecycleOwner(), members -> sharedGroupList.setMembers(members));
|
||||
viewModel.getSharedGroupsCountSummary().observe(getViewLifecycleOwner(), members -> groupsInCommonCount.setText(members));
|
||||
@@ -246,12 +255,28 @@ public class ManageRecipientFragment extends LoggingFragment {
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == RETURN_FROM_MEDIA) {
|
||||
if (requestCode == REQUEST_CODE_RETURN_FROM_MEDIA) {
|
||||
applyMediaCursorFactory();
|
||||
} else if (requestCode == REQUEST_CODE_ADD_CONTACT) {
|
||||
viewModel.onAddedToContacts();
|
||||
}
|
||||
}
|
||||
|
||||
private void presentRecipient(@NonNull Recipient recipient) {
|
||||
if (recipient.isSystemContact()) {
|
||||
contactText.setText(R.string.ManageRecipientActivity_this_person_is_in_your_contacts);
|
||||
contactIcon.setVisibility(View.VISIBLE);
|
||||
contactRow.setOnClickListener(v -> {
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, recipient.getContactUri()));
|
||||
});
|
||||
} else {
|
||||
contactText.setText(R.string.ManageRecipientActivity_add_to_system_contacts);
|
||||
contactIcon.setVisibility(View.GONE);
|
||||
contactRow.setOnClickListener(v -> {
|
||||
startActivityForResult(RecipientExporter.export(recipient).asAddContactIntent(), REQUEST_CODE_ADD_CONTACT);
|
||||
});
|
||||
}
|
||||
|
||||
disappearingMessagesCard.setVisibility(recipient.isRegistered() ? View.VISIBLE : View.GONE);
|
||||
addToAGroup.setVisibility(recipient.isRegistered() ? View.VISIBLE : View.GONE);
|
||||
|
||||
@@ -294,7 +319,7 @@ public class ManageRecipientFragment extends LoggingFragment {
|
||||
startActivityForResult(MediaPreviewActivity.intentFromMediaRecord(requireContext(),
|
||||
mediaRecord,
|
||||
ViewCompat.getLayoutDirection(threadPhotoRailView) == ViewCompat.LAYOUT_DIRECTION_LTR),
|
||||
RETURN_FROM_MEDIA));
|
||||
REQUEST_CODE_RETURN_FROM_MEDIA));
|
||||
}
|
||||
|
||||
private void presentMuteState(@NonNull ManageRecipientViewModel.MuteState muteState) {
|
||||
|
||||
@@ -10,10 +10,12 @@ import com.annimon.stream.Stream;
|
||||
|
||||
import org.thoughtcrime.securesms.color.MaterialColor;
|
||||
import org.thoughtcrime.securesms.color.MaterialColors;
|
||||
import org.thoughtcrime.securesms.contacts.sync.DirectoryHelper;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.IdentityDatabase;
|
||||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||
import org.thoughtcrime.securesms.logging.Log;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -21,11 +23,14 @@ import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
final class ManageRecipientRepository {
|
||||
|
||||
private static final String TAG = Log.tag(ManageRecipientRepository.class);
|
||||
|
||||
private final Context context;
|
||||
private final RecipientId recipientId;
|
||||
|
||||
@@ -95,6 +100,16 @@ final class ManageRecipientRepository {
|
||||
});
|
||||
}
|
||||
|
||||
void refreshRecipient() {
|
||||
SignalExecutors.UNBOUNDED.execute(() -> {
|
||||
try {
|
||||
DirectoryHelper.refreshDirectoryFor(context, Recipient.resolved(recipientId), false);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, "Failed to refresh user after adding to contacts.");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
@NonNull List<Recipient> getSharedGroups(@NonNull RecipientId recipientId) {
|
||||
return Stream.of(DatabaseFactory.getGroupDatabase(context)
|
||||
|
||||
@@ -257,6 +257,10 @@ public final class ManageRecipientViewModel extends ViewModel {
|
||||
withRecipient(r -> CommunicationActions.startVideoCall(activity, r));
|
||||
}
|
||||
|
||||
void onAddedToContacts() {
|
||||
manageRecipientRepository.refreshRecipient();
|
||||
}
|
||||
|
||||
static final class MediaCursor {
|
||||
private final long threadId;
|
||||
@NonNull private final CursorFactory mediaCursorFactory;
|
||||
|
||||
Reference in New Issue
Block a user