diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkDialogFragment.java
index 909b642a65..538edba88d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkDialogFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkDialogFragment.java
@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.recipients.ui.sharablegrouplink;
+import android.app.AlertDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -85,14 +86,19 @@ public final class ShareableGroupLinkDialogFragment extends DialogFragment {
viewModel.getGroupLink().observe(getViewLifecycleOwner(), groupLink -> {
shareableGroupLinkSwitch.setChecked(groupLink.isEnabled());
approveNewMembersSwitch.setChecked(groupLink.isRequiresApproval());
- shareableGroupLinkDisplay.setText(groupLink.getUrl());
+ shareableGroupLinkDisplay.setText(formatForFullWidthWrapping(groupLink.getUrl()));
});
shareRow.setOnClickListener(v -> GroupLinkBottomSheetDialogFragment.show(requireFragmentManager(), groupId));
shareableGroupLinkRow.setOnClickListener(v -> viewModel.onToggleGroupLink(requireContext()));
approveNewMembersRow.setOnClickListener(v -> viewModel.onToggleApproveMembers(requireContext()));
- resetLinkRow.setOnClickListener(v -> viewModel.onResetLink(requireContext()));
+ resetLinkRow.setOnClickListener(v ->
+ new AlertDialog.Builder(requireContext())
+ .setMessage(R.string.ShareableGroupLinkDialogFragment__are_you_sure_you_want_to_reset_the_group_link)
+ .setPositiveButton(R.string.ShareableGroupLinkDialogFragment__reset_link, (dialog, which) -> viewModel.onResetLink(requireContext()))
+ .setNegativeButton(android.R.string.cancel, null)
+ .show());
viewModel.getToasts().observe(getViewLifecycleOwner(), t -> Toast.makeText(requireContext(), t, Toast.LENGTH_SHORT).show());
@@ -109,4 +115,19 @@ public final class ShareableGroupLinkDialogFragment extends DialogFragment {
}
});
}
+
+ /**
+ * Inserts zero width space characters between each character in the original ensuring it takes
+ * the full width of the TextView.
+ */
+ private static CharSequence formatForFullWidthWrapping(@NonNull String url) {
+ char[] chars = new char[url.length() * 2];
+
+ for (int i = 0; i < url.length(); i++) {
+ chars[i * 2] = url.charAt(i);
+ chars[i * 2 + 1] = '\u200B';
+ }
+
+ return new String(chars);
+ }
}
diff --git a/app/src/main/res/layout/shareable_group_link_dialog_fragment.xml b/app/src/main/res/layout/shareable_group_link_dialog_fragment.xml
index 485872ca6f..241df3f256 100644
--- a/app/src/main/res/layout/shareable_group_link_dialog_fragment.xml
+++ b/app/src/main/res/layout/shareable_group_link_dialog_fragment.xml
@@ -69,6 +69,7 @@
android:id="@+id/shareable_group_link_display_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginEnd="60dp"
android:background="?selectableItemBackground"
android:clickable="true"
android:focusable="true"
@@ -89,7 +90,8 @@
android:text="@string/ShareableGroupLinkDialogFragment__share"
android:textAlignment="viewStart"
android:textAppearance="@style/TextAppearance.Signal.Body2"
- tools:text="https://signal.org/7836478267" />
+ android:textColor="?title_text_color_secondary"
+ tools:text="https://signal.group/#CjQKIKUBM1ER-gTjdWwktuuHJk4t-2Iujh0zkXl2VBB3bASIEhDwi34i-5OMAl5sFYt9VElW" />
@@ -118,6 +120,7 @@
android:text="@string/ShareableGroupLinkDialogFragment__share"
android:textAlignment="viewStart"
android:textAppearance="@style/TextAppearance.Signal.Body2"
+ android:textColor="?title_text_color_primary"
app:drawableStartCompat="?share_icon" />
@@ -147,6 +150,7 @@
android:text="@string/ShareableGroupLinkDialogFragment__reset_link"
android:textAlignment="viewStart"
android:textAppearance="@style/TextAppearance.Signal.Body2"
+ android:textColor="?title_text_color_primary"
app:drawableStartCompat="?reset_link_icon" />
@@ -200,4 +204,30 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cfa2c1fcd3..1669cd0e50 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -675,6 +675,8 @@
Disabled
Default
Group link reset
+ Require an admin to approve new members joining via the group link.
+ Are you sure you want to reset the group link? People will no longer be able to join the group using the current link.
QR code