Enforce two line limit on group description.

Sorry.
This commit is contained in:
Cody Henthorne
2021-05-19 11:57:53 -04:00
committed by GitHub
parent 5d5d61d8ed
commit f890ae8ddc
11 changed files with 75 additions and 57 deletions

View File

@@ -24,6 +24,7 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.color.MaterialColor;
import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.components.emoji.EmojiTextView;
import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
import org.thoughtcrime.securesms.conversation.ConversationIntents;
@@ -46,7 +47,7 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF
private AvatarImageView avatar;
private TextView groupName;
private TextView groupDetails;
private TextView groupDescription;
private EmojiTextView groupDescription;
private TextView groupJoinExplain;
private Button groupJoinButton;
private Button groupCancelButton;
@@ -158,10 +159,11 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF
private void updateGroupDescription(@NonNull String name, @NonNull String description) {
groupDescription.setVisibility(View.VISIBLE);
groupDescription.setMovementMethod(LinkMovementMethod.getInstance());
groupDescription.setText(GroupDescriptionUtil.style(requireContext(),
description,
true,
() -> GroupDescriptionDialog.show(getChildFragmentManager(), name, description, true)));
GroupDescriptionUtil.setText(requireContext(),
groupDescription,
description,
true,
() -> GroupDescriptionDialog.show(getChildFragmentManager(), name, description, true));
}
private static ExtendedGroupJoinStatus getGroupJoinStatus() {

View File

@@ -458,15 +458,17 @@ public class ManageGroupFragment extends LoggingFragment {
if (TextUtils.isEmpty(description.getDescription())) {
if (FeatureFlags.groupsV2Description() && description.canEditDescription()) {
groupDescription.setOverflowText(null);
groupDescription.setText(R.string.ManageGroupActivity_add_group_description);
groupDescription.setOnClickListener(v -> startActivity(EditProfileActivity.getIntentForGroupProfile(requireActivity(), getGroupId())));
}
} else {
groupDescription.setOnClickListener(null);
groupDescription.setText(GroupDescriptionUtil.style(requireContext(),
description.getDescription(),
description.shouldLinkifyWebLinks(),
() -> GroupDescriptionDialog.show(getChildFragmentManager(), getGroupId(), null, description.shouldLinkifyWebLinks())));
GroupDescriptionUtil.setText(requireContext(),
groupDescription,
description.getDescription(),
description.shouldLinkifyWebLinks(),
() -> GroupDescriptionDialog.show(getChildFragmentManager(), getGroupId(), null, description.shouldLinkifyWebLinks()));
}
}

View File

@@ -16,6 +16,7 @@ import androidx.fragment.app.FragmentManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.emoji.EmojiTextView;
import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.groups.LiveGroup;
import org.thoughtcrime.securesms.groups.ParcelableGroupId;
@@ -34,7 +35,7 @@ public final class GroupDescriptionDialog extends DialogFragment {
private static final String ARGUMENT_LINKIFY = "linkify";
private static final String DIALOG_TAG = "GroupDescriptionDialog";
private TextView descriptionText;
private EmojiTextView descriptionText;
public static void show(@NonNull FragmentManager fragmentManager, @NonNull String title, @Nullable String description, boolean linkify) {
show(fragmentManager, null, title, description, linkify);
@@ -76,9 +77,9 @@ public final class GroupDescriptionDialog extends DialogFragment {
.create();
if (argumentDescription != null) {
descriptionText.setText(GroupDescriptionUtil.style(requireContext(), argumentDescription, linkify, null));
GroupDescriptionUtil.setText(requireContext(), descriptionText, argumentDescription, linkify, null);
} else if (liveGroup != null) {
liveGroup.getDescription().observe(this, d -> descriptionText.setText(GroupDescriptionUtil.style(requireContext(), d, linkify, null)));
liveGroup.getDescription().observe(this, d -> GroupDescriptionUtil.setText(requireContext(), descriptionText, d, linkify, null));
}
if (TextUtils.isEmpty(argumentTitle) && liveGroup != null) {

View File

@@ -7,6 +7,7 @@ import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.text.util.Linkify;
@@ -18,6 +19,7 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.emoji.EmojiTextView;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
public final class GroupDescriptionUtil {
@@ -25,14 +27,14 @@ public final class GroupDescriptionUtil {
public static final int MAX_DESCRIPTION_LENGTH = 80;
/**
* Style a group description.
* Set a group description.
*
* @param description full description
* @param linkify flag indicating if web urls should be linkified
* @param moreClick Callback for when truncating and need to show more via another means. Required to enable truncating.
* @return styled group description
* @param description full description
* @param emojiTextView Text view to update with description
* @param linkify flag indicating if web urls should be linkified
* @param moreClick Callback for when truncating and need to show more via another means. Required to enable truncating.
*/
public static @NonNull Spannable style(@NonNull Context context, @NonNull String description, boolean linkify, @Nullable Runnable moreClick) {
public static void setText(@NonNull Context context, @NonNull EmojiTextView emojiTextView, @NonNull String description, boolean linkify, @Nullable Runnable moreClick) {
SpannableString descriptionSpannable = new SpannableString(description);
if (linkify) {
@@ -46,7 +48,7 @@ public final class GroupDescriptionUtil {
}
}
if (moreClick != null && descriptionSpannable.length() > MAX_DESCRIPTION_LENGTH) {
if (moreClick != null) {
ClickableSpan style = new ClickableSpan() {
@Override
public void onClick(@NonNull View widget) {
@@ -59,11 +61,14 @@ public final class GroupDescriptionUtil {
}
};
SpannableStringBuilder builder = new SpannableStringBuilder(descriptionSpannable.subSequence(0, MAX_DESCRIPTION_LENGTH)).append(context.getString(R.string.ManageGroupActivity_more));
builder.setSpan(style, MAX_DESCRIPTION_LENGTH + 1, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return builder;
emojiTextView.setEllipsize(TextUtils.TruncateAt.END);
emojiTextView.setMaxLines(2);
SpannableString overflowText = new SpannableString(context.getString(R.string.ManageGroupActivity_more));
overflowText.setSpan(style, 0, overflowText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
emojiTextView.setOverflowText(overflowText);
}
return descriptionSpannable;
emojiTextView.setText(descriptionSpannable);
}
}