Add long click copy for urls in group descriptions.
This commit is contained in:
parent
f890ae8ddc
commit
f490d1f6d2
5 changed files with 18 additions and 16 deletions
|
@ -1,11 +1,7 @@
|
|||
package org.thoughtcrime.securesms.conversation;
|
||||
|
||||
import android.content.Context;
|
||||
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;
|
||||
|
@ -13,8 +9,6 @@ import android.widget.TextView;
|
|||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.widget.ImageViewCompat;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
|
@ -25,6 +19,7 @@ import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
|
|||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.LongClickMovementMethod;
|
||||
|
||||
public class ConversationBannerView extends ConstraintLayout {
|
||||
|
||||
|
@ -117,7 +112,7 @@ public class ConversationBannerView extends ConstraintLayout {
|
|||
}
|
||||
|
||||
public void setLinkifyDescription(boolean enable) {
|
||||
contactDescription.setMovementMethod(enable ? LinkMovementMethod.getInstance() : null);
|
||||
contactDescription.setMovementMethod(enable ? LongClickMovementMethod.getInstance(getContext()) : null);
|
||||
}
|
||||
|
||||
private static final class FallbackPhotoProvider extends Recipient.FallbackPhotoProvider {
|
||||
|
|
|
@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.groups.ui.invitesandrequests.joining;
|
|||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -35,6 +34,7 @@ import org.thoughtcrime.securesms.groups.v2.GroupInviteLinkUrl;
|
|||
import org.thoughtcrime.securesms.jobs.RetrieveProfileJob;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.BottomSheetUtil;
|
||||
import org.thoughtcrime.securesms.util.LongClickMovementMethod;
|
||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
||||
|
||||
public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogFragment {
|
||||
|
@ -158,7 +158,7 @@ public final class GroupJoinBottomSheetDialogFragment extends BottomSheetDialogF
|
|||
|
||||
private void updateGroupDescription(@NonNull String name, @NonNull String description) {
|
||||
groupDescription.setVisibility(View.VISIBLE);
|
||||
groupDescription.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
groupDescription.setMovementMethod(LongClickMovementMethod.getInstance(requireContext()));
|
||||
GroupDescriptionUtil.setText(requireContext(),
|
||||
groupDescription,
|
||||
description,
|
||||
|
|
|
@ -6,7 +6,6 @@ import android.database.Cursor;
|
|||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
@ -65,6 +64,7 @@ import org.thoughtcrime.securesms.util.AsynchronousCallback;
|
|||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||
import org.thoughtcrime.securesms.util.LifecycleCursorWrapper;
|
||||
import org.thoughtcrime.securesms.util.LongClickMovementMethod;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.views.LearnMoreTextView;
|
||||
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
|
||||
|
@ -448,7 +448,7 @@ public class ManageGroupFragment extends LoggingFragment {
|
|||
private void updateGroupDescription(@NonNull ManageGroupViewModel.Description description) {
|
||||
if (!TextUtils.isEmpty(description.getDescription()) || (FeatureFlags.groupsV2Description() && description.canEditDescription())) {
|
||||
groupDescription.setVisibility(View.VISIBLE);
|
||||
groupDescription.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
groupDescription.setMovementMethod(LongClickMovementMethod.getInstance(requireContext()));
|
||||
memberCountUnderAvatar.setVisibility(View.GONE);
|
||||
} else {
|
||||
groupDescription.setVisibility(View.GONE);
|
||||
|
|
|
@ -3,10 +3,8 @@ package org.thoughtcrime.securesms.groups.ui.managegroup.dialogs;
|
|||
import android.app.Dialog;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
@ -21,6 +19,7 @@ import org.thoughtcrime.securesms.groups.GroupId;
|
|||
import org.thoughtcrime.securesms.groups.LiveGroup;
|
||||
import org.thoughtcrime.securesms.groups.ParcelableGroupId;
|
||||
import org.thoughtcrime.securesms.groups.v2.GroupDescriptionUtil;
|
||||
import org.thoughtcrime.securesms.util.LongClickMovementMethod;
|
||||
|
||||
/**
|
||||
* Dialog to show a full group description. Information regarding the description can be provided
|
||||
|
@ -68,7 +67,7 @@ public final class GroupDescriptionDialog extends DialogFragment {
|
|||
LiveGroup liveGroup = argumentGroupId != null ? new LiveGroup(argumentGroupId) : null;
|
||||
|
||||
descriptionText = dialogView.findViewById(R.id.group_description_dialog_text);
|
||||
descriptionText.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
descriptionText.setMovementMethod(LongClickMovementMethod.getInstance(requireContext()));
|
||||
|
||||
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext(), R.style.Signal_ThemeOverlay_Dialog_Rounded);
|
||||
Dialog dialog = builder.setTitle(TextUtils.isEmpty(argumentTitle) ? getString(R.string.GroupDescriptionDialog__group_description) : argumentTitle)
|
||||
|
|
|
@ -2,9 +2,7 @@ package org.thoughtcrime.securesms.groups.v2;
|
|||
|
||||
import android.content.Context;
|
||||
import android.graphics.Typeface;
|
||||
import android.text.Spannable;
|
||||
import android.text.SpannableString;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.Spanned;
|
||||
import android.text.TextPaint;
|
||||
import android.text.TextUtils;
|
||||
|
@ -21,6 +19,7 @@ import com.annimon.stream.Stream;
|
|||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiTextView;
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
|
||||
import org.thoughtcrime.securesms.util.LongClickCopySpan;
|
||||
|
||||
public final class GroupDescriptionUtil {
|
||||
|
||||
|
@ -45,6 +44,15 @@ public final class GroupDescriptionUtil {
|
|||
Stream.of(descriptionSpannable.getSpans(0, descriptionSpannable.length(), URLSpan.class))
|
||||
.filterNot(url -> LinkPreviewUtil.isLegalUrl(url.getURL()))
|
||||
.forEach(descriptionSpannable::removeSpan);
|
||||
|
||||
URLSpan[] urlSpans = descriptionSpannable.getSpans(0, descriptionSpannable.length(), URLSpan.class);
|
||||
|
||||
for (URLSpan urlSpan : urlSpans) {
|
||||
int start = descriptionSpannable.getSpanStart(urlSpan);
|
||||
int end = descriptionSpannable.getSpanEnd(urlSpan);
|
||||
URLSpan span = new LongClickCopySpan(urlSpan.getURL());
|
||||
descriptionSpannable.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue