From 32ee198128b07e449a311af24d9864a4e75657ef Mon Sep 17 00:00:00 2001 From: wch423 Date: Thu, 15 Jan 2026 16:48:13 +0100 Subject: [PATCH] Add util methods to handle RTL/LTR text concatenations; Add markers to external links --- src/main/assets/help/help.css | 4 ++++ .../securesms/InstantOnboardingActivity.java | 12 ++++++++-- .../securesms/LocalHelpActivity.java | 23 +++++++++++++++++++ .../thoughtcrime/securesms/util/TextUtil.java | 16 +++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/thoughtcrime/securesms/util/TextUtil.java diff --git a/src/main/assets/help/help.css b/src/main/assets/help/help.css index b2770e33c..5feee6c5a 100644 --- a/src/main/assets/help/help.css +++ b/src/main/assets/help/help.css @@ -6,6 +6,10 @@ a { text-decoration: none; } +a[href^='http']::after { + content: " ↗"; +} + h2, h3, h4 { margin-top: 2rem; } diff --git a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java index 614a997aa..c2e8607a3 100644 --- a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java @@ -54,6 +54,7 @@ import org.thoughtcrime.securesms.relay.RelayListActivity; import org.thoughtcrime.securesms.scribbles.ScribbleActivity; import org.thoughtcrime.securesms.util.IntentUtils; import org.thoughtcrime.securesms.util.Prefs; +import org.thoughtcrime.securesms.util.TextUtil; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.views.ProgressDialog; @@ -345,6 +346,11 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements private void showOtherOptionsDialog() { View view = View.inflate(this, R.layout.signup_options_view, null); + Button otherServerButton = view.findViewById(R.id.use_other_server); + if (otherServerButton != null) { + otherServerButton.setText( + TextUtil.markAsExternal(getString(R.string.instant_onboarding_other_server))); + } AlertDialog signUpDialog = new AlertDialog.Builder(this) .setView(view) .setTitle(R.string.instant_onboarding_show_more_instances) @@ -376,9 +382,11 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements signUpBtn.setText(R.string.instant_onboarding_create); privacyPolicyBtn.setTextColor(getResources().getColor(R.color.delta_accent)); if (DEFAULT_CHATMAIL_HOST.equals(providerHost)) { - privacyPolicyBtn.setText(getString(R.string.instant_onboarding_agree_default2, providerHost)); + privacyPolicyBtn.setText(TextUtil.markAsExternal( + getString(R.string.instant_onboarding_agree_default2, providerHost))); } else { - privacyPolicyBtn.setText(getString(R.string.instant_onboarding_agree_instance, providerHost)); + privacyPolicyBtn.setText(TextUtil.markAsExternal( + getString(R.string.instant_onboarding_agree_instance, providerHost))); } } } diff --git a/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java b/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java index f05cbc3cd..241a0f089 100644 --- a/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java @@ -5,6 +5,7 @@ import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; +import org.thoughtcrime.securesms.util.TextUtil; import org.thoughtcrime.securesms.util.Util; import java.io.InputStream; @@ -51,6 +52,28 @@ public class LocalHelpActivity extends WebViewActivity public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); this.getMenuInflater().inflate(R.menu.local_help, menu); + + // Append " ↗" to external link buttons + MenuItem item = menu.findItem(R.id.learn_more); + if (item != null) { + item.setTitle(TextUtil.markAsExternal(getString(R.string.delta_chat_homepage))); + } + + item = menu.findItem(R.id.privacy_policy); + if (item != null) { + item.setTitle(TextUtil.markAsExternal(getString(R.string.privacy_policy))); + } + + item = menu.findItem(R.id.contribute); + if (item != null) { + item.setTitle(TextUtil.markAsExternal(getString(R.string.contribute))); + } + + item = menu.findItem(R.id.report_issue); + if (item != null) { + item.setTitle(TextUtil.markAsExternal(getString(R.string.global_menu_help_report_desktop))); + } + return true; } diff --git a/src/main/java/org/thoughtcrime/securesms/util/TextUtil.java b/src/main/java/org/thoughtcrime/securesms/util/TextUtil.java new file mode 100644 index 000000000..914734011 --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/util/TextUtil.java @@ -0,0 +1,16 @@ +package org.thoughtcrime.securesms.util; + +import androidx.annotation.NonNull; +import androidx.core.text.BidiFormatter; + +public class TextUtil { + @NonNull + public static String bidiAppend(String text, String suffix) { + return BidiFormatter.getInstance().unicodeWrap(text) + suffix; + } + + @NonNull + public static String markAsExternal(String text) { + return bidiAppend(text, " ↗"); + } +}