use link icon instead of emoji when showing hidden urls

This commit is contained in:
Conny Duck 2023-09-24 16:28:53 +02:00
parent fa80a0123a
commit 31ad946e1a
36 changed files with 62 additions and 67 deletions

View File

@ -34,6 +34,7 @@ import android.view.MotionEvent.ACTION_UP
import android.view.View
import android.widget.TextView
import androidx.annotation.VisibleForTesting
import androidx.appcompat.content.res.AppCompatResources
import androidx.browser.customtabs.CustomTabColorSchemeParams
import androidx.browser.customtabs.CustomTabsIntent
import androidx.core.net.toUri
@ -43,6 +44,7 @@ import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.entity.HashTag
import com.keylesspalace.tusky.entity.Status.Mention
import com.keylesspalace.tusky.interfaces.LinkListener
import java.lang.ref.WeakReference
import java.net.URI
import java.net.URISyntaxException
@ -65,7 +67,7 @@ fun getDomain(urlString: String?): String {
* @param listener to notify about particular spans that are clicked
*/
fun setClickableText(view: TextView, content: CharSequence, mentions: List<Mention>, tags: List<HashTag>?, listener: LinkListener) {
val spannableContent = markupHiddenUrls(view.context, content)
val spannableContent = markupHiddenUrls(view, content)
view.text = spannableContent.apply {
getSpans(0, spannableContent.length, URLSpan::class.java).forEach {
@ -76,7 +78,7 @@ fun setClickableText(view: TextView, content: CharSequence, mentions: List<Menti
}
@VisibleForTesting
fun markupHiddenUrls(context: Context, content: CharSequence): SpannableStringBuilder {
fun markupHiddenUrls(view: TextView, content: CharSequence): SpannableStringBuilder {
val spannableContent = SpannableStringBuilder(content)
val originalSpans = spannableContent.getSpans(0, content.length, URLSpan::class.java)
val obscuredLinkSpans = originalSpans.filter {
@ -99,8 +101,22 @@ fun markupHiddenUrls(context: Context, content: CharSequence): SpannableStringBu
val start = spannableContent.getSpanStart(span)
val end = spannableContent.getSpanEnd(span)
val originalText = spannableContent.subSequence(start, end)
val replacementText = context.getString(R.string.url_domain_notifier, originalText, getDomain(span.url))
val replacementText = view.context.getString(R.string.url_domain_notifier, originalText, getDomain(span.url))
spannableContent.replace(start, end, replacementText) // this also updates the span locations
val linkDrawable = AppCompatResources.getDrawable(view.context, R.drawable.ic_link)!!
// ImageSpan does not always align the icon correctly in the line, let's use our custom emoji span for this
val linkDrawableSpan = EmojiSpan(WeakReference(view))
linkDrawableSpan.imageDrawable = linkDrawable
val placeholderIndex = replacementText.indexOf("🔗")
spannableContent.setSpan(
linkDrawableSpan,
start + placeholderIndex,
start + placeholderIndex + "🔗".length,
0
)
}
return spannableContent

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@color/tusky_blue"
android:pathData="M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z" />
</vector>

View File

@ -625,7 +625,6 @@
<string name="description_post_language">لغة المنشور</string>
<string name="delete_scheduled_post_warning">هل تريد حذف هذا المنشور المُبَرمَج؟</string>
<string name="tips_push_notification_migration">أعد تسجيل الدخول إلى جميع الحسابات لتمكين دعم الإشعارات.</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">ضبط نقطة التركيز</string>
<string name="action_edit_image">تعديل الصورة</string>
<string name="action_add_reaction">إضافة رد فعل</string>

View File

@ -606,7 +606,6 @@
<string name="wellbeing_hide_stats_posts">Схаваць колькасную статыстыку допісаў</string>
<string name="wellbeing_hide_stats_profile">Схаваць колькасную статыстыку профіляў</string>
<string name="report_category_violation">Парушэнне правіла</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="instance_rule_title">Правілы %s</string>
<string name="language_display_name_format">%s (%s)</string>
<string name="delete_scheduled_post_warning">Выдаліць гэты запланаваны допіс\?</string>

View File

@ -591,7 +591,6 @@
<string name="action_unfollow_hashtag_format">Deixar de seguir #%s\?</string>
<string name="compose_unsaved_changes">Tens canvis no desats.</string>
<string name="set_focus_description">Toqueu o arrossegueu el cercle per triar el punt focal que sempre serà visible a les miniatures.</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="pref_title_show_self_username">Mostra el nom d\'usuari a les barres d\'eines</string>
<string name="action_set_focus">Estableix el punt d\'enfocament</string>
<string name="description_login">Funciona en la majoria dels casos. No es filtra cap dada a altres aplicacions.</string>

View File

@ -534,7 +534,6 @@
<string name="duration_14_days">14 dní</string>
<string name="duration_30_days">30 dní</string>
<string name="drafts_post_reply_removed">Příspěvek, na který jste připravili odpověď, byl odstraněn</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">Nastavit bod zaostření</string>
<string name="tips_push_notification_migration">Znovu se přihlaste ke všem účtům, abyste povolili podporu push oznámení.</string>
<string name="dialog_push_notification_migration">Aby bylo možné používat push oznámení prostřednictvím UnifiedPush, Tusky potřebuje oprávnění k odběru oznámení na vašem serveru Mastodon. To vyžaduje opětovné přihlášení ke změně rozsahů OAuth udělených aplikaci Tusky. Použitím možnosti opětovného přihlášení zde nebo v předvolbách účtu zachováte všechny vaše místní koncepty a mezipaměť.</string>

View File

@ -306,7 +306,6 @@
<string name="filter_expiration_format">%s (%s)</string>
<string name="notification_clear_text">Ydych chi\'n siŵr eich bod chi am glirio\'ch holl hysbysiadau\'n barhaol\?</string>
<string name="error_multimedia_size_limit">Ni all ffeiliau fideo a sain fod yn fwy na %s MB.</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="error_following_hashtag_format">Gwall wrth ddilyn #%s</string>
<string name="error_unfollowing_hashtag_format">Gwall wrth ddad-ddilyn #%s</string>
<string name="action_unmute_domain">Dad-dewi %s</string>

View File

@ -561,7 +561,6 @@
<string name="pref_show_self_username_never">Niemals</string>
<string name="filter_expiration_format">%s (%s)</string>
<string name="description_post_language">Sprache des Beitrags</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">Fokuspunkt setzen</string>
<string name="action_add_reaction">Reaktion hinzufügen</string>
<string name="failed_to_remove_from_list">Das Konto konnte nicht aus der Liste entfernt werden</string>

View File

@ -561,5 +561,4 @@
<string name="description_post_language">Mesaĝolingvo</string>
<string name="dialog_push_notification_migration">Por ricevi sciigoj per UnifiedPush, Tusky bezonas taŭgan permeson el Mastodon-servilo. Tio postulas re-ensaluton por ŝanĝi OAuth-rajtoj donitaj al Tusky. Se vi uzas la opcion re-ensaluti ĉi tie aŭ en la agordoj de la konto, viaj malnetoj kaj kaŝmemoroj estos konservitaj.</string>
<string name="dialog_push_notification_migration_other_accounts">Vi re-ensalutis en tiu konto por doni sciigo-permeson al Tusky. Vi havas tamen aliajn kontojn, ĉe kiuj vi devas re-sensaluti. Iru al ili, kaj re-ensalutu por ebligi ricevon de sciigoj per UnifiedPush.</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
</resources>

View File

@ -560,7 +560,6 @@
<string name="failed_to_pin">Fallo al fijar</string>
<string name="failed_to_unpin">Fallo al quitarlo</string>
<string name="pref_show_self_username_disambiguate">Cuando hay varias cuentas ingresadas</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="notification_sign_up_description">Notificaciones de nuevos usuarios</string>
<string name="notification_update_name">Ediciones de una publicación</string>
<string name="notification_update_description">Notificaciones cuando se editan publicaciones con las que has interactuado</string>

View File

@ -550,7 +550,6 @@
<string name="pref_show_self_username_disambiguate">هنگام ورود چندین حساب</string>
<string name="pref_show_self_username_never">هرگز</string>
<string name="pref_title_show_self_username">نمایش نام کاربری در نوارابزارها</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_add_reaction">افزودن واکنش</string>
<string name="action_set_focus">تنظیم نقطهٔ تمرکز</string>
<string name="duration_no_change">(بدون تغییر)</string>

View File

@ -563,7 +563,6 @@
<string name="pref_show_self_username_never">Jamais</string>
<string name="description_post_language">Langue du message</string>
<string name="duration_no_change">(Aucune modification)</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_add_reaction">ajouter une réaction</string>
<string name="instance_rule_title">%s règles</string>
<string name="a11y_label_loading_thread">Chargement du fil</string>

View File

@ -565,7 +565,6 @@
<string name="pref_show_self_username_disambiguate">Nuair a bhios iomadh cunntas air an clàradh a-steach</string>
<string name="pref_show_self_username_never">Chan ann idir</string>
<string name="filter_expiration_format">%s (%s)</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">Suidhich puing an fhòcais</string>
<string name="delete_scheduled_post_warning">A bheil thu airson am post sgeidealaichte seo a sguabadh às\?</string>
<string name="instance_rule_info">Le clàradh a-steach, bidh tu ag aontachadh ri riaghailtean %s.</string>

View File

@ -535,7 +535,6 @@
<string name="filter_expiration_format">%s (%s)</string>
<string name="error_multimedia_size_limit">Os ficheiros de vídeo e audio non poden superar os %s MB.</string>
<string name="description_post_language">Idioma de publicación</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">Establece foco</string>
<string name="error_following_hashtag_format">Erro ao seguir #%s</string>
<string name="error_unfollowing_hashtag_format">Error ao retirar seguimento de #%s</string>

View File

@ -549,7 +549,6 @@
<string name="pref_show_self_username_disambiguate">Ha több fiók is be van jelentkezve</string>
<string name="pref_show_self_username_never">Soha</string>
<string name="duration_no_change">(Nincs változás)</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">Fókuszpont beállítása</string>
<string name="error_following_hashtag_format">Hiba a #%s követésekor</string>
<string name="error_unfollowing_hashtag_format">Hiba a #%s követésének befejezésekor</string>

View File

@ -546,7 +546,6 @@
<string name="failed_to_unpin">Mistókst að losa</string>
<string name="pref_show_self_username_always">Alltaf</string>
<string name="pref_show_self_username_disambiguate">Þegar er skráð inn á mörgum aðgöngum</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">Setja virknistað</string>
<string name="pref_show_self_username_never">Aldrei</string>
<string name="pref_title_show_self_username">Birta notandanafn á verkfærastikum</string>

View File

@ -568,7 +568,6 @@
<string name="pref_show_self_username_disambiguate">Quando connesso con più account</string>
<string name="duration_no_change">(nessuna modifica)</string>
<string name="pref_title_show_self_username">Mostra nome utente nelle barre strumenti</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_add_or_remove_from_list">Aggiunti o rimuovi dalla lista</string>
<string name="failed_to_add_to_list">Aggiunta dell\'account alla lista fallita</string>
<string name="failed_to_remove_from_list">Rimozione dell\'account dalla lista fallita</string>

View File

@ -500,7 +500,6 @@
<string name="error_multimedia_size_limit">ビデオと音声ファイルのサイズは %s MB を超えることはできません。</string>
<string name="error_image_edit_failed">画像が編集できませんでした。</string>
<string name="title_login">ログイン</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_edit_image">画像の編集</string>
<string name="instance_rule_title">%s のルール</string>
<string name="error_following_hashtags_unsupported">このインスタンスはハッシュタグのフォローに対応していません。</string>

View File

@ -260,7 +260,6 @@
<string name="pref_title_http_proxy_server">HTTP starpniekserveris</string>
<string name="pref_title_http_proxy_port_message">Portam būtu jābūt starp %d un %d</string>
<string name="action_view_account_preferences">Konta iestatījumi</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="mute_domain_warning">Vai tiešām vēlaties bloķēt visu %s\? Šī domēna saturs netiks rādīts ne publiskajās laika līnijās, ne paziņojumos. Jūsu sekotāji no šī domēna tiks noņemti.</string>
<string name="send_post_notification_saved_content">Ieraksta kopija tika saglabāta tavos melnrakstos</string>
<string name="restart_emoji">Lai pielietotu šīs izmaiņas, ir jāpārstartē Tusky</string>

View File

@ -539,7 +539,6 @@
<string name="filter_expiration_format">%s (%s)</string>
<string name="duration_no_change">(Ingen endring)</string>
<string name="description_post_language">Innleggspråk</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">Sett fokuspunkt</string>
<string name="set_focus_description">Trykk eller dra sirkelen for å velge fokuspunktet som alltid skal være synlig i miniatyrbilder.</string>
<string name="pref_show_self_username_always">Alltid</string>

View File

@ -543,7 +543,6 @@
<string name="set_focus_description">Tik of sleep de cirkel naar een centraal focuspunt dat op elke thumbnail zichtbaar moet blijven.</string>
<string name="dialog_push_notification_migration">Om pushmeldingen via UnifiedPush te kunnen gebruiken, moet Tusky zich op meldingen van jouw Mastodon-server abonneren. Dit betekent dat je opnieuw moet inloggen om de OAuth-toestemmingen voor Tusky te wijzigen. Het hier of onder accountvoorkeuren opnieuw inloggen behoudt jouw lokale concepten en buffer.</string>
<string name="dialog_push_notification_migration_other_accounts">Je hebt opnieuw op jouw huidige account ingelogd om toestemming voor pushmeldingen aan Tusky te verlenen. Je hebt echter nog andere accounts die nog niet op deze manier zijn overgezet. Ga naar deze accounts en log één voor één opnieuw in om UnifiedPush-meldingen ook daar in te schakelen.</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="pref_show_self_username_always">Altijd</string>
<string name="pref_show_self_username_disambiguate">Wanneer meerdere accounts zijn ingelogd</string>
<string name="pref_show_self_username_never">Nooit</string>

View File

@ -523,7 +523,6 @@
<string name="tusky_compose_post_quicksetting_label">Compausar una publicacion</string>
<string name="account_date_joined">Arribada del %1$s</string>
<string name="saving_draft">Enregistrament del borrolhon…</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="error_image_edit_failed">Se podiá pas modificar limatge.</string>
<string name="pref_title_wellbeing_mode">Benestar</string>
<string name="duration_no_change">(Cap de modificacion)</string>

View File

@ -570,7 +570,6 @@
<string name="error_multimedia_size_limit">Pliki wideo i audio nie mogą przekraczać rozmiarem %s MB.</string>
<string name="filter_expiration_format">%s (%s)</string>
<string name="description_post_language">Język wpisu</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="duration_no_change">(bez zmian)</string>
<string name="error_following_hashtag_format">Wystąpił błąd podczas obserwowania #%s</string>
<string name="error_unfollowing_hashtag_format">Wystąpił błąd podczas odobserwowywania #%s</string>

View File

@ -566,7 +566,6 @@
<string name="report_category_violation">Violação de regra</string>
<string name="report_category_spam">Spam</string>
<string name="report_category_other">Outros</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="pref_show_self_username_disambiguate">Quando várias contas estão conectadas</string>
<string name="pref_title_http_proxy_port_message">A porta deve estar entre %d e %d</string>
<string name="status_count_one_plus">1+</string>

View File

@ -550,7 +550,6 @@
<string name="set_focus_description">Toca ou arrasta o círculo para escolher o ponto de focagem que estará sempre visível nas pré-visualizações.</string>
<string name="filter_expiration_format">%s(%s)</string>
<string name="duration_no_change">(Sem alteração)</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="pref_show_self_username_always">Sempre</string>
<string name="pref_show_self_username_disambiguate">Quando autenticado em várias contas</string>
<string name="pref_show_self_username_never">Nunca</string>

View File

@ -479,7 +479,6 @@
<string name="duration_365_days">३६५ दिनानि</string>
<string name="duration_no_change">(परिवर्तनं नास्ति)</string>
<string name="review_notifications">सूचनाः सम्दृश्यन्ताम्</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="pref_show_self_username_never">न कदापि</string>
<string name="pref_default_post_language">पूर्वनिविष्टा प्रकाशका भाषा</string>
<string name="notification_report_name">आवेदनानि</string>

View File

@ -266,5 +266,4 @@
<string name="action_links">සබැඳි</string>
<string name="pref_title_browser_settings">අතිරික්සුව</string>
<string name="abbreviated_seconds_ago">තත්. %d</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
</resources>

View File

@ -511,7 +511,6 @@
<string name="dialog_push_notification_migration_other_accounts">Du har loggat in igen på ditt konto för att ge Tusky tillgång till push-prenumeration. Dock har du andra konton som inte har migrerats såhär ännu. Växla till dem och logga in igen för att aktivera stöd för UnifiedPush-notiser.</string>
<string name="action_unsubscribe_account">Sluta prenumerera</string>
<string name="description_post_language">Inläggsspråk</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="pref_show_self_username_disambiguate">När flera konton är inloggade</string>
<string name="pref_show_self_username_never">Aldrig</string>
<string name="notification_sign_up_name">Registreringar</string>

View File

@ -517,7 +517,6 @@
<string name="duration_180_days">180 gün</string>
<string name="duration_60_days">60 gün</string>
<string name="duration_90_days">90 gün</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="pref_default_post_language">Varsayılan gönderme dili</string>
<string name="notification_report_name">Raporlar</string>
<string name="notification_report_description">Denetleme raporlarıyla ilgili bildirimler</string>

View File

@ -560,7 +560,6 @@
<string name="filter_expiration_format">%s (%s)</string>
<string name="description_post_language">Мова допису</string>
<string name="duration_no_change">(Не змінено)</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">Налаштувати точку фокусування</string>
<string name="pref_show_self_username_always">Завжди</string>
<string name="set_focus_description">Торкніться або перетягніть коло, щоб вибрати точку фокусування, яку завжди буде видно на мініатюрах.</string>

View File

@ -525,7 +525,6 @@
<string name="filter_expiration_format">%s (%s)</string>
<string name="duration_no_change">(Không đổi)</string>
<string name="description_post_language">Ngôn ngữ đăng</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">Chọn tâm điểm</string>
<string name="set_focus_description">Nhấn hoặc kéo vòng tròn để chọn tiêu điểm sẽ hiển thị trong hình thu nhỏ.</string>
<string name="pref_title_show_self_username">Hiện URL của tôi trên tab</string>

View File

@ -539,7 +539,6 @@
<string name="filter_expiration_format">%s (%s)</string>
<string name="duration_no_change">(无更改)</string>
<string name="description_post_language">嘟文语言</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="action_set_focus">设置焦点</string>
<string name="set_focus_description">轻按或拖动圆圈选择始终在缩略图中可见的焦点。</string>
<string name="pref_show_self_username_disambiguate">登录多个账户时</string>

View File

@ -524,7 +524,6 @@
<string name="filter_expiration_format">%s (%s)</string>
<string name="set_focus_description">輕按或拖動圓圈來選擇總是在縮圖中可視的關注點。</string>
<string name="description_post_language">嘟文語言</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="compose_save_draft_loses_media">是否要儲存草稿?(當你重開草稿時附檔將會被再次上傳。)</string>
<string name="tusky_compose_post_quicksetting_label">編寫嘟文</string>
<string name="failed_to_pin">釘選失敗</string>

View File

@ -252,4 +252,6 @@
<item>NEWEST_FIRST</item>
</string-array>
<string name="url_domain_notifier" translatable="false">%s (🔗 %s)</string>
</resources>

View File

@ -757,7 +757,6 @@
<string name="tips_push_notification_migration">Re-login all accounts to enable push notification support.</string>
<string name="dialog_push_notification_migration">In order to use push notifications via UnifiedPush, Tusky needs permission to subscribe to notifications on your Mastodon server. This requires a re-login to change the OAuth scopes granted to Tusky. Using the re-login option here or in "Account preferences" will preserve all of your local drafts and cache.</string>
<string name="dialog_push_notification_migration_other_accounts">You have re-logged into your current account to grant push subscription permission to Tusky. However, you still have other accounts that have not been migrated this way. Switch to them and re-login one by one in order to enable UnifiedPush notifications support.</string>
<string name="url_domain_notifier">%s (🔗 %s)</string>
<string name="delete_scheduled_post_warning">Delete this scheduled post?</string>

View File

@ -1,8 +1,8 @@
package com.keylesspalace.tusky.util
import android.content.Context
import android.text.SpannableStringBuilder
import android.text.style.URLSpan
import android.widget.TextView
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import com.keylesspalace.tusky.R
@ -33,8 +33,8 @@ class LinkHelperTest {
HashTag("mastodev", "https://example.com/Tags/mastodev")
)
private val context: Context
get() = InstrumentationRegistry.getInstrumentation().targetContext
private val textView: TextView
get() = TextView(InstrumentationRegistry.getInstrumentation().targetContext)
@Test
fun whenSettingClickableText_mentionUrlsArePreserved() {
@ -168,8 +168,8 @@ class LinkHelperTest {
content.append(displayedContent, URLSpan(maliciousUrl), 0)
val oldContent = content.toString()
Assert.assertEquals(
context.getString(R.string.url_domain_notifier, displayedContent, maliciousDomain),
markupHiddenUrls(context, content).toString()
textView.context.getString(R.string.url_domain_notifier, displayedContent, maliciousDomain),
markupHiddenUrls(textView, content).toString()
)
Assert.assertEquals(oldContent, content.toString())
}
@ -182,8 +182,8 @@ class LinkHelperTest {
val content = SpannableStringBuilder()
content.append(displayedContent, URLSpan(maliciousUrl), 0)
Assert.assertEquals(
context.getString(R.string.url_domain_notifier, displayedContent, maliciousDomain),
markupHiddenUrls(context, content).toString()
textView.context.getString(R.string.url_domain_notifier, displayedContent, maliciousDomain),
markupHiddenUrls(textView, content).toString()
)
}
@ -196,9 +196,9 @@ class LinkHelperTest {
content.append(displayedContent, URLSpan("https://$domain/foo/bar"), 0)
}
val markedUpContent = markupHiddenUrls(context, content)
val markedUpContent = markupHiddenUrls(textView, content)
for (domain in domains) {
Assert.assertTrue(markedUpContent.contains(context.getString(R.string.url_domain_notifier, displayedContent, domain)))
Assert.assertTrue(markedUpContent.contains(textView.context.getString(R.string.url_domain_notifier, displayedContent, domain)))
}
}
@ -215,7 +215,7 @@ class LinkHelperTest {
.append("$domain/", URLSpan("https://$domain"), 0)
.append("$domain/", URLSpan("https://www.$domain"), 0)
val markedUpContent = markupHiddenUrls(context, content)
val markedUpContent = markupHiddenUrls(textView, content)
Assert.assertFalse(markedUpContent.contains("🔗"))
}
@ -228,7 +228,7 @@ class LinkHelperTest {
.append("Some Place | https://some.place/", URLSpan("https://some.place/"), 0)
.append("Some Place https://some.place/path", URLSpan("https://some.place/path"), 0)
val markedUpContent = markupHiddenUrls(context, content)
val markedUpContent = markupHiddenUrls(textView, content)
Assert.assertFalse(markedUpContent.contains("🔗"))
}
@ -241,7 +241,7 @@ class LinkHelperTest {
.append("Another Place | https://another.place/", URLSpan("https://some.place/"), 0)
.append("Another Place https://another.place/path", URLSpan("https://some.place/path"), 0)
val markedUpContent = markupHiddenUrls(context, content)
val markedUpContent = markupHiddenUrls(textView, content)
val asserts = listOf(
"Another Place: another.place",
"Another Place: another.place/",
@ -250,7 +250,7 @@ class LinkHelperTest {
"Another Place https://another.place/path"
)
asserts.forEach {
Assert.assertTrue(markedUpContent.contains(context.getString(R.string.url_domain_notifier, it, "some.place")))
Assert.assertTrue(markedUpContent.contains(textView.context.getString(R.string.url_domain_notifier, it, "some.place")))
}
}
@ -262,7 +262,7 @@ class LinkHelperTest {
builder.append(" ")
}
val markedUpContent = markupHiddenUrls(context, builder)
val markedUpContent = markupHiddenUrls(textView, builder)
for (mention in mentions) {
Assert.assertFalse(markedUpContent.contains("${getDomain(mention.url)})"))
}
@ -276,7 +276,7 @@ class LinkHelperTest {
builder.append(" ")
}
val markedUpContent = markupHiddenUrls(context, builder)
val markedUpContent = markupHiddenUrls(textView, builder)
for (mention in mentions) {
Assert.assertFalse(markedUpContent.contains("${getDomain(mention.url)})"))
}
@ -290,7 +290,7 @@ class LinkHelperTest {
builder.append(" ")
}
val markedUpContent = markupHiddenUrls(context, builder)
val markedUpContent = markupHiddenUrls(textView, builder)
for (tag in tags) {
Assert.assertFalse(markedUpContent.contains("${getDomain(tag.url)})"))
}
@ -304,7 +304,7 @@ class LinkHelperTest {
builder.append(" ")
}
val markedUpContent = markupHiddenUrls(context, builder)
val markedUpContent = markupHiddenUrls(textView, builder)
for (tag in tags) {
Assert.assertFalse(markedUpContent.contains("${getDomain(tag.url)})"))
}