kopia lustrzana https://github.com/ryukoposting/Signal-Android
New copy for GV2 direct add message request.
rodzic
fb00652396
commit
e22384b6b4
|
@ -3039,7 +3039,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
|||
messageRequestBottomView.setBlockOnClickListener(v -> onMessageRequestBlockClicked(viewModel));
|
||||
messageRequestBottomView.setUnblockOnClickListener(v -> onMessageRequestUnblockClicked(viewModel));
|
||||
|
||||
viewModel.getRecipient().observe(this, this::presentMessageRequestBottomViewTo);
|
||||
viewModel.getMessageData().observe(this, this::presentMessageRequestBottomViewTo);
|
||||
viewModel.getMessageRequestDisplayState().observe(this, this::presentMessageRequestDisplayState);
|
||||
viewModel.getFailures().observe(this, this::showGroupChangeErrorToast);
|
||||
viewModel.getMessageRequestStatus().observe(this, status -> {
|
||||
|
@ -3452,10 +3452,10 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
|||
}
|
||||
}
|
||||
|
||||
private void presentMessageRequestBottomViewTo(@Nullable Recipient recipient) {
|
||||
if (recipient == null) return;
|
||||
private void presentMessageRequestBottomViewTo(@Nullable MessageRequestViewModel.MessageData messageData) {
|
||||
if (messageData == null) return;
|
||||
|
||||
messageRequestBottomView.setRecipient(recipient);
|
||||
messageRequestBottomView.setMessageData(messageData);
|
||||
}
|
||||
|
||||
private static class KeyboardImageDetails {
|
||||
|
|
|
@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.database.RecipientDatabase;
|
|||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.groups.GroupChangeException;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.groups.GroupManager;
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupChangeErrorCallback;
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason;
|
||||
|
@ -229,6 +230,10 @@ final class MessageRequestRepository {
|
|||
});
|
||||
}
|
||||
|
||||
boolean isPendingMember(@NonNull GroupId.V2 groupId) {
|
||||
return DatabaseFactory.getGroupDatabase(context).isPendingMember(groupId, Recipient.self());
|
||||
}
|
||||
|
||||
enum MessageRequestState {
|
||||
/**
|
||||
* Message request permission does not need to be gained at this time.
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Context;
|
|||
import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.Transformations;
|
||||
|
@ -19,6 +20,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
|
|||
import org.thoughtcrime.securesms.util.SingleLiveEvent;
|
||||
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataTriple;
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
@ -28,6 +30,7 @@ public class MessageRequestViewModel extends ViewModel {
|
|||
private final SingleLiveEvent<Status> status = new SingleLiveEvent<>();
|
||||
private final SingleLiveEvent<GroupChangeFailureReason> failures = new SingleLiveEvent<>();
|
||||
private final MutableLiveData<Recipient> recipient = new MutableLiveData<>();
|
||||
private final LiveData<MessageData> messageData;
|
||||
private final MutableLiveData<List<String>> groups = new MutableLiveData<>(Collections.emptyList());
|
||||
private final MutableLiveData<GroupMemberCount> memberCount = new MutableLiveData<>(GroupMemberCount.ZERO);
|
||||
private final MutableLiveData<DisplayState> displayState = new MutableLiveData<>();
|
||||
|
@ -46,7 +49,8 @@ public class MessageRequestViewModel extends ViewModel {
|
|||
};
|
||||
|
||||
private MessageRequestViewModel(MessageRequestRepository repository) {
|
||||
this.repository = repository;
|
||||
this.repository = repository;
|
||||
this.messageData = LiveDataUtil.mapAsync(recipient, this::createMessageDataForRecipient);
|
||||
}
|
||||
|
||||
public void setConversationInfo(@NonNull RecipientId recipientId, long threadId) {
|
||||
|
@ -77,6 +81,10 @@ public class MessageRequestViewModel extends ViewModel {
|
|||
return recipient;
|
||||
}
|
||||
|
||||
public LiveData<MessageData> getMessageData() {
|
||||
return messageData;
|
||||
}
|
||||
|
||||
public LiveData<RecipientInfo> getRecipientInfo() {
|
||||
return recipientInfo;
|
||||
}
|
||||
|
@ -152,6 +160,29 @@ public class MessageRequestViewModel extends ViewModel {
|
|||
repository.getMemberCount(liveRecipient.getId(), memberCount::postValue);
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private @NonNull MessageData createMessageDataForRecipient(@NonNull Recipient recipient) {
|
||||
if (recipient.isBlocked()) {
|
||||
if (recipient.isGroup()) {
|
||||
return new MessageData(recipient, MessageClass.BLOCKED_GROUP);
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.BLOCKED_INDIVIDUAL);
|
||||
}
|
||||
} else if (recipient.isGroup()) {
|
||||
if (recipient.isPushV2Group()) {
|
||||
if (repository.isPendingMember(recipient.requireGroupId().requireV2())) {
|
||||
return new MessageData(recipient, MessageClass.GROUP_V2_INVITE);
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.GROUP_V2_ADD);
|
||||
}
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.GROUP_V1);
|
||||
}
|
||||
} else {
|
||||
return new MessageData(recipient, MessageClass.INDIVIDUAL);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private void loadMessageRequestAccepted(@NonNull Recipient recipient) {
|
||||
if (recipient.isBlocked()) {
|
||||
|
@ -218,6 +249,33 @@ public class MessageRequestViewModel extends ViewModel {
|
|||
DISPLAY_MESSAGE_REQUEST, DISPLAY_LEGACY, DISPLAY_NONE
|
||||
}
|
||||
|
||||
public enum MessageClass {
|
||||
BLOCKED_INDIVIDUAL,
|
||||
BLOCKED_GROUP,
|
||||
GROUP_V1,
|
||||
GROUP_V2_INVITE,
|
||||
GROUP_V2_ADD,
|
||||
INDIVIDUAL
|
||||
}
|
||||
|
||||
public static final class MessageData {
|
||||
private final Recipient recipient;
|
||||
private final MessageClass messageClass;
|
||||
|
||||
public MessageData(@NonNull Recipient recipient, @NonNull MessageClass messageClass) {
|
||||
this.recipient = recipient;
|
||||
this.messageClass = messageClass;
|
||||
}
|
||||
|
||||
public @NonNull Recipient getRecipient() {
|
||||
return recipient;
|
||||
}
|
||||
|
||||
public @NonNull MessageClass getMessageClass() {
|
||||
return messageClass;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Factory implements ViewModelProvider.Factory {
|
||||
|
||||
private final Context context;
|
||||
|
|
|
@ -60,23 +60,33 @@ public class MessageRequestsBottomView extends ConstraintLayout {
|
|||
busyIndicator = findViewById(R.id.message_request_busy_indicator);
|
||||
}
|
||||
|
||||
public void setRecipient(@NonNull Recipient recipient) {
|
||||
if (recipient.isBlocked()) {
|
||||
if (recipient.isGroup()) {
|
||||
public void setMessageData(@NonNull MessageRequestViewModel.MessageData messageData) {
|
||||
Recipient recipient = messageData.getRecipient();
|
||||
|
||||
switch (messageData.getMessageClass()) {
|
||||
case BLOCKED_INDIVIDUAL:
|
||||
question.setText(HtmlCompat.fromHtml(getContext().getString(R.string.MessageRequestBottomView_do_you_want_to_let_s_message_you_wont_receive_any_messages_until_you_unblock_them,
|
||||
HtmlUtil.bold(recipient.getShortDisplayName(getContext()))), 0));
|
||||
setActiveInactiveGroups(blockedButtons, normalButtons);
|
||||
break;
|
||||
case BLOCKED_GROUP:
|
||||
question.setText(R.string.MessageRequestBottomView_unblock_this_group_and_share_your_name_and_photo_with_its_members);
|
||||
} else {
|
||||
String name = recipient.getShortDisplayName(getContext());
|
||||
question.setText(HtmlCompat.fromHtml(getContext().getString(R.string.MessageRequestBottomView_do_you_want_to_let_s_message_you_wont_receive_any_messages_until_you_unblock_them, HtmlUtil.bold(name)), 0));
|
||||
}
|
||||
setActiveInactiveGroups(blockedButtons, normalButtons);
|
||||
} else {
|
||||
if (recipient.isGroup()) {
|
||||
setActiveInactiveGroups(blockedButtons, normalButtons);
|
||||
break;
|
||||
case GROUP_V1:
|
||||
case GROUP_V2_INVITE:
|
||||
question.setText(R.string.MessageRequestBottomView_do_you_want_to_join_this_group_they_wont_know_youve_seen_their_messages_until_you_accept);
|
||||
} else {
|
||||
String name = recipient.getShortDisplayName(getContext());
|
||||
question.setText(HtmlCompat.fromHtml(getContext().getString(R.string.MessageRequestBottomView_do_you_want_to_let_s_message_you_they_wont_know_youve_seen_their_messages_until_you_accept, HtmlUtil.bold(name)), 0));
|
||||
}
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons);
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons);
|
||||
break;
|
||||
case GROUP_V2_ADD:
|
||||
question.setText(R.string.MessageRequestBottomView_join_this_group_they_wont_know_youve_seen_their_messages_until_you_accept);
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons);
|
||||
break;
|
||||
case INDIVIDUAL:
|
||||
question.setText(HtmlCompat.fromHtml(getContext().getString(R.string.MessageRequestBottomView_do_you_want_to_let_s_message_you_they_wont_know_youve_seen_their_messages_until_you_accept,
|
||||
HtmlUtil.bold(recipient.getShortDisplayName(getContext()))), 0));
|
||||
setActiveInactiveGroups(normalButtons, blockedButtons);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1057,6 +1057,7 @@
|
|||
<string name="MessageRequestBottomView_do_you_want_to_let_s_message_you_they_wont_know_youve_seen_their_messages_until_you_accept">Let %1$s message you and share your name and photo with them? They won\'t know you\'ve seen their message until you accept.</string>
|
||||
<string name="MessageRequestBottomView_do_you_want_to_let_s_message_you_wont_receive_any_messages_until_you_unblock_them">Let %1$s message you and share your name and photo with them? You won\'t receive any messages until you unblock them.</string>
|
||||
<string name="MessageRequestBottomView_do_you_want_to_join_this_group_they_wont_know_youve_seen_their_messages_until_you_accept">Join this group and share your name and photo with its members? They won\'t know you\'ve seen their messages until you accept.</string>
|
||||
<string name="MessageRequestBottomView_join_this_group_they_wont_know_youve_seen_their_messages_until_you_accept">Join this group? They won’t know you’ve seen their messages until you accept.</string>
|
||||
<string name="MessageRequestBottomView_unblock_this_group_and_share_your_name_and_photo_with_its_members">Unblock this group and share your name and photo with its members? You won\'t receive any messages until you unblock them.</string>
|
||||
<string name="MessageRequestProfileView_member_of_one_group">Member of %1$s</string>
|
||||
<string name="MessageRequestProfileView_member_of_two_groups">Member of %1$s and %2$s</string>
|
||||
|
|
Ładowanie…
Reference in New Issue