mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-26 03:40:56 +01:00
Add support for Group V2 description field.
This commit is contained in:
committed by
Greyson Parrelli
parent
b3aec58e69
commit
8c9df8d3be
@@ -5,6 +5,7 @@ import android.content.res.ColorStateList;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.drawable.LayerDrawable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
@@ -87,6 +88,7 @@ public class ConversationBannerView extends ConstraintLayout {
|
||||
|
||||
public void setDescription(@Nullable CharSequence description) {
|
||||
contactDescription.setText(description);
|
||||
contactDescription.setVisibility(TextUtils.isEmpty(description) ? GONE : VISIBLE);
|
||||
}
|
||||
|
||||
public void showBackgroundBubble(boolean enabled) {
|
||||
@@ -109,6 +111,10 @@ public class ConversationBannerView extends ConstraintLayout {
|
||||
contactDescription.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
public void setLinkifyDescription(boolean enable) {
|
||||
contactDescription.setMovementMethod(enable ? LinkMovementMethod.getInstance() : null);
|
||||
}
|
||||
|
||||
private static final class FallbackPhotoProvider extends Recipient.FallbackPhotoProvider {
|
||||
@Override
|
||||
public @NonNull FallbackContactPhoto getPhotoForRecipientWithoutName() {
|
||||
|
||||
@@ -107,7 +107,9 @@ import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionRecycler;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange;
|
||||
import org.thoughtcrime.securesms.groups.ui.invitesandrequests.invite.GroupLinkInviteFriendsBottomSheetDialogFragment;
|
||||
import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupDescriptionDialog;
|
||||
import org.thoughtcrime.securesms.groups.ui.migration.GroupsV1MigrationInfoBottomSheetDialogFragment;
|
||||
import org.thoughtcrime.securesms.groups.v2.GroupDescriptionUtil;
|
||||
import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob;
|
||||
import org.thoughtcrime.securesms.jobs.MultiDeviceViewOnceOpenJob;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
@@ -492,7 +494,7 @@ public class ConversationFragment extends LoggingFragment {
|
||||
});
|
||||
}
|
||||
|
||||
private static void presentMessageRequestProfileView(@NonNull Context context, @NonNull MessageRequestViewModel.RecipientInfo recipientInfo, @Nullable ConversationBannerView conversationBanner) {
|
||||
private void presentMessageRequestProfileView(@NonNull Context context, @NonNull MessageRequestViewModel.RecipientInfo recipientInfo, @Nullable ConversationBannerView conversationBanner) {
|
||||
if (conversationBanner == null) {
|
||||
return;
|
||||
}
|
||||
@@ -536,7 +538,20 @@ public class ConversationFragment extends LoggingFragment {
|
||||
}
|
||||
|
||||
if (groups.isEmpty() || isSelf) {
|
||||
conversationBanner.hideDescription();
|
||||
if (TextUtils.isEmpty(recipientInfo.getGroupDescription())) {
|
||||
conversationBanner.setLinkifyDescription(false);
|
||||
conversationBanner.hideDescription();
|
||||
} else {
|
||||
conversationBanner.setLinkifyDescription(true);
|
||||
boolean linkifyWebLinks = recipientInfo.getMessageRequestState() == MessageRequestState.NONE;
|
||||
conversationBanner.setDescription(GroupDescriptionUtil.style(context,
|
||||
recipientInfo.getGroupDescription(),
|
||||
linkifyWebLinks,
|
||||
() -> GroupDescriptionDialog.show(getChildFragmentManager(),
|
||||
recipient.getDisplayName(context),
|
||||
recipientInfo.getGroupDescription(),
|
||||
linkifyWebLinks)));
|
||||
}
|
||||
} else {
|
||||
final String description;
|
||||
|
||||
@@ -1630,6 +1645,13 @@ public class ConversationFragment extends LoggingFragment {
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewGroupDescriptionChange(@Nullable GroupId groupId, @NonNull String description, boolean isMessageRequestAccepted) {
|
||||
if (groupId != null) {
|
||||
GroupDescriptionDialog.show(getChildFragmentManager(), groupId, description, isMessageRequestAccepted);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void refreshList() {
|
||||
|
||||
@@ -67,6 +67,7 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||
private Recipient conversationRecipient;
|
||||
private Optional<MessageRecord> nextMessageRecord;
|
||||
private MessageRecord messageRecord;
|
||||
private boolean isMessageRequestAccepted;
|
||||
private LiveData<SpannableString> displayBody;
|
||||
private EventListener eventListener;
|
||||
|
||||
@@ -112,7 +113,7 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||
{
|
||||
this.batchSelected = batchSelected;
|
||||
|
||||
bind(lifecycleOwner, conversationMessage, previousMessageRecord, nextMessageRecord, conversationRecipient, hasWallpaper);
|
||||
bind(lifecycleOwner, conversationMessage, previousMessageRecord, nextMessageRecord, conversationRecipient, hasWallpaper, isMessageRequestAccepted);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -130,12 +131,14 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||
@NonNull Optional<MessageRecord> previousMessageRecord,
|
||||
@NonNull Optional<MessageRecord> nextMessageRecord,
|
||||
@NonNull Recipient conversationRecipient,
|
||||
boolean hasWallpaper)
|
||||
boolean hasWallpaper,
|
||||
boolean isMessageRequestAccepted)
|
||||
{
|
||||
this.conversationMessage = conversationMessage;
|
||||
this.messageRecord = conversationMessage.getMessageRecord();
|
||||
this.nextMessageRecord = nextMessageRecord;
|
||||
this.conversationRecipient = conversationRecipient;
|
||||
this.conversationMessage = conversationMessage;
|
||||
this.messageRecord = conversationMessage.getMessageRecord();
|
||||
this.nextMessageRecord = nextMessageRecord;
|
||||
this.conversationRecipient = conversationRecipient;
|
||||
this.isMessageRequestAccepted = isMessageRequestAccepted;
|
||||
|
||||
senderObserver.observe(lifecycleOwner, messageRecord.getIndividualRecipient());
|
||||
|
||||
@@ -164,7 +167,7 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||
|
||||
observeDisplayBody(lifecycleOwner, spannableMessage);
|
||||
|
||||
present(conversationMessage, nextMessageRecord, conversationRecipient);
|
||||
present(conversationMessage, nextMessageRecord, conversationRecipient, isMessageRequestAccepted);
|
||||
|
||||
presentBackground(shouldCollapse(messageRecord, previousMessageRecord),
|
||||
shouldCollapse(messageRecord, nextMessageRecord),
|
||||
@@ -265,7 +268,8 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||
|
||||
private void present(@NonNull ConversationMessage conversationMessage,
|
||||
@NonNull Optional<MessageRecord> nextMessageRecord,
|
||||
@NonNull Recipient conversationRecipient)
|
||||
@NonNull Recipient conversationRecipient,
|
||||
boolean isMessageRequestAccepted)
|
||||
{
|
||||
if (batchSelected.contains(conversationMessage)) setSelected(true);
|
||||
else setSelected(false);
|
||||
@@ -350,6 +354,14 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||
eventListener.onInMemoryMessageClicked(inMemoryMessageRecord);
|
||||
}
|
||||
});
|
||||
} else if (conversationMessage.getMessageRecord().isGroupV2DescriptionUpdate()) {
|
||||
actionButton.setVisibility(VISIBLE);
|
||||
actionButton.setText(R.string.ConversationUpdateItem_view);
|
||||
actionButton.setOnClickListener(v -> {
|
||||
if (eventListener != null) {
|
||||
eventListener.onViewGroupDescriptionChange(conversationRecipient.getGroupId().orNull(), conversationMessage.getMessageRecord().getGroupV2DescriptionUpdate(), isMessageRequestAccepted);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
actionButton.setVisibility(GONE);
|
||||
actionButton.setOnClickListener(null);
|
||||
@@ -439,7 +451,7 @@ public final class ConversationUpdateItem extends FrameLayout
|
||||
public void onChanged(Recipient recipient) {
|
||||
if (recipient.getId() == conversationRecipient.getId() && (conversationRecipient == null || !conversationRecipient.hasSameContent(recipient))) {
|
||||
conversationRecipient = recipient;
|
||||
present(conversationMessage, nextMessageRecord, conversationRecipient);
|
||||
present(conversationMessage, nextMessageRecord, conversationRecipient, isMessageRequestAccepted);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user