mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 00:29:11 +01:00
Improve GV2 Invitation revoke experience.
This commit is contained in:
committed by
Greyson Parrelli
parent
c8ed0b19f0
commit
810ccf8e94
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.messagerequests;
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import androidx.core.util.Consumer;
|
||||
|
||||
import org.signal.storageservice.protos.groups.local.DecryptedGroup;
|
||||
@@ -67,15 +68,29 @@ final class MessageRequestRepository {
|
||||
}
|
||||
|
||||
void getMessageRequestState(@NonNull Recipient recipient, long threadId, @NonNull Consumer<MessageRequestState> state) {
|
||||
executor.execute(() -> {
|
||||
if (!RecipientUtil.isMessageRequestAccepted(context, threadId)) {
|
||||
state.accept(MessageRequestState.UNACCEPTED);
|
||||
} else if (RecipientUtil.isPreMessageRequestThread(context, threadId) && !RecipientUtil.isLegacyProfileSharingAccepted(recipient)) {
|
||||
state.accept(MessageRequestState.LEGACY);
|
||||
} else {
|
||||
state.accept(MessageRequestState.ACCEPTED);
|
||||
executor.execute(() -> state.accept(findMessageRequestState(recipient, threadId)));
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private MessageRequestState findMessageRequestState(@NonNull Recipient recipient, long threadId) {
|
||||
if (!RecipientUtil.isMessageRequestAccepted(context, threadId)) {
|
||||
if (recipient.isGroup()) {
|
||||
GroupDatabase.MemberLevel memberLevel = DatabaseFactory.getGroupDatabase(context)
|
||||
.getGroup(recipient.getId())
|
||||
.transform(g -> g.memberLevel(Recipient.self()))
|
||||
.or(GroupDatabase.MemberLevel.NOT_A_MEMBER);
|
||||
|
||||
if (memberLevel == GroupDatabase.MemberLevel.NOT_A_MEMBER) {
|
||||
return MessageRequestState.NOT_REQUIRED;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return MessageRequestState.REQUIRED;
|
||||
} else if (RecipientUtil.isPreMessageRequestThread(context, threadId) && !RecipientUtil.isLegacyProfileSharingAccepted(recipient)) {
|
||||
return MessageRequestState.LEGACY;
|
||||
} else {
|
||||
return MessageRequestState.NOT_REQUIRED;
|
||||
}
|
||||
}
|
||||
|
||||
void acceptMessageRequest(@NonNull LiveRecipient liveRecipient,
|
||||
@@ -218,6 +233,19 @@ final class MessageRequestRepository {
|
||||
}
|
||||
|
||||
enum MessageRequestState {
|
||||
ACCEPTED, UNACCEPTED, LEGACY
|
||||
/**
|
||||
* Message request permission does not need to be gained at this time.
|
||||
* <p>
|
||||
* Either:
|
||||
* - Explicit message request has been accepted, or;
|
||||
* - Did not need to be shown because they are a contact etc, or;
|
||||
* - It's a group that they are no longer in or invited to.
|
||||
*/
|
||||
NOT_REQUIRED,
|
||||
|
||||
/** Explicit message request permission is required. */
|
||||
REQUIRED,
|
||||
|
||||
LEGACY
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,10 +161,10 @@ public class MessageRequestViewModel extends ViewModel {
|
||||
|
||||
repository.getMessageRequestState(recipient, threadId, accepted -> {
|
||||
switch (accepted) {
|
||||
case ACCEPTED:
|
||||
case NOT_REQUIRED:
|
||||
displayState.postValue(DisplayState.DISPLAY_NONE);
|
||||
break;
|
||||
case UNACCEPTED:
|
||||
case REQUIRED:
|
||||
displayState.postValue(DisplayState.DISPLAY_MESSAGE_REQUEST);
|
||||
break;
|
||||
case LEGACY:
|
||||
|
||||
Reference in New Issue
Block a user