mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 09:20:19 +01:00
Enforce two line limit on group description.
Sorry.
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user