diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileFragment.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileFragment.java
index 3b646d2b90..46004d7701 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileFragment.java
@@ -22,6 +22,7 @@ import com.airbnb.lottie.SimpleColorFilter;
import com.bumptech.glide.Glide;
import com.google.android.material.snackbar.Snackbar;
+import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.AvatarPreviewActivity;
import org.thoughtcrime.securesms.LoggingFragment;
import org.thoughtcrime.securesms.R;
@@ -42,11 +43,16 @@ import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Optional;
public class ManageProfileFragment extends LoggingFragment {
+ private static final String TAG = Log.tag(ManageProfileFragment.class);
+
private AlertDialog avatarProgress;
private ManageProfileViewModel viewModel;
private ManageProfileFragmentBinding binding;
@@ -214,6 +220,14 @@ public class ManageProfileFragment extends LoggingFragment {
binding.manageProfileUsernameShare.setVisibility(View.GONE);
} else {
binding.manageProfileUsername.setText(username);
+
+ try {
+ binding.manageProfileUsernameSubtitle.setText(getString(R.string.signal_me_username_url_no_scheme, URLEncoder.encode(username, StandardCharsets.UTF_8.toString())));
+ } catch (UnsupportedEncodingException e) {
+ Log.w(TAG, "Could not format username link", e);
+ binding.manageProfileUsernameSubtitle.setText(R.string.ManageProfileFragment_your_username);
+ }
+
binding.manageProfileUsernameShare.setVisibility(View.VISIBLE);
}
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameShareBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameShareBottomSheet.kt
index 8ae579b1b9..5ef969ea80 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameShareBottomSheet.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameShareBottomSheet.kt
@@ -19,6 +19,8 @@ import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.FragmentResultContract
import org.thoughtcrime.securesms.util.LifecycleDisposable
import org.thoughtcrime.securesms.util.Util
+import java.net.URLEncoder
+import java.nio.charset.StandardCharsets
/**
* Allows the user to either share their username directly or to copy it to their clipboard.
@@ -69,7 +71,7 @@ class UsernameShareBottomSheet : DSLSettingsBottomSheetFragment() {
customPref(
CopyButton.Model(
- text = getString(R.string.signal_me_url, username),
+ text = getString(R.string.signal_me_username_url, URLEncoder.encode(username, StandardCharsets.UTF_8.toString())),
onClick = {
copyToClipboard(it)
}
@@ -80,7 +82,7 @@ class UsernameShareBottomSheet : DSLSettingsBottomSheetFragment() {
customPref(
ShareButton.Model(
- text = getString(R.string.signal_me_url, username),
+ text = getString(R.string.signal_me_username_url, URLEncoder.encode(username, StandardCharsets.UTF_8.toString())),
onClick = {
openShareSheet(it.text)
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 945906381a..87a31db1ba 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -11,7 +11,8 @@
https://support.signal.org/hc/articles/4408365318426
https://pay.google.com
https://support.signal.org/hc/articles/4408365318426#errors
- https://signal.me/%1$s
+ https://signal.me/#u/%1$s
+ signal.me/#u/%1$s
Yes
No