diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-09-17 14:24:06 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-09-17 14:24:51 +0300 |
commit | ff2cab8f5c932ce50480728c008d83d66ce37f5b (patch) | |
tree | 72212515710393cd3351afbe4f65a2fd84edad48 /app/src/main/java/it/niedermann/owncloud | |
parent | b6afb118548475fb2f44aaf562d76d7cc9019d33 (diff) |
#1348 Make translations easier by removing HTML markup from strings
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/owncloud')
4 files changed, 47 insertions, 30 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentContributingTab.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentContributingTab.java index 2e17e45d..90a9a3bc 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentContributingTab.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentContributingTab.java @@ -1,6 +1,9 @@ package it.niedermann.owncloud.notes.about; +import static it.niedermann.owncloud.notes.shared.util.SupportUtil.setTextWithURL; + import android.os.Bundle; +import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -17,9 +20,9 @@ public class AboutFragmentContributingTab extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final var binding = FragmentAboutContributionTabBinding.inflate(inflater, container, false); - SupportUtil.setHtml(binding.aboutSource, R.string.about_source, getString(R.string.url_source)); - SupportUtil.setHtml(binding.aboutIssues, R.string.about_issues, getString(R.string.url_issues)); - SupportUtil.setHtml(binding.aboutTranslate, R.string.about_translate, getString(R.string.url_translations)); + setTextWithURL(binding.aboutSource, getResources(), R.string.about_source, R.string.url_source, R.string.url_source); + setTextWithURL(binding.aboutIssues, getResources(), R.string.about_issues, R.string.url_issues, R.string.url_issues); + setTextWithURL(binding.aboutTranslate, getResources(), R.string.about_translate, R.string.url_translations, R.string.url_translations); return binding.getRoot(); } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentCreditsTab.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentCreditsTab.java index f92ca9ee..028bfa4e 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentCreditsTab.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentCreditsTab.java @@ -1,6 +1,11 @@ package it.niedermann.owncloud.notes.about; +import static it.niedermann.owncloud.notes.shared.util.SupportUtil.setTextWithURL; +import static it.niedermann.owncloud.notes.shared.util.SupportUtil.strong; +import static it.niedermann.owncloud.notes.shared.util.SupportUtil.url; + import android.os.Bundle; +import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,16 +16,16 @@ import androidx.fragment.app.Fragment; import it.niedermann.owncloud.notes.BuildConfig; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.databinding.FragmentAboutCreditsTabBinding; -import it.niedermann.owncloud.notes.shared.util.SupportUtil; public class AboutFragmentCreditsTab extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final var binding = FragmentAboutCreditsTabBinding.inflate(inflater, container, false); - SupportUtil.setHtml(binding.aboutVersion, R.string.about_version, "v" + BuildConfig.VERSION_NAME); - SupportUtil.setHtml(binding.aboutMaintainer, R.string.about_maintainer); - SupportUtil.setHtml(binding.aboutTranslators, R.string.about_translators_transifex, getString(R.string.url_translations)); + binding.aboutVersion.setText(getString(R.string.about_version, strong(BuildConfig.VERSION_NAME))); + binding.aboutMaintainer.setText(url(getString(R.string.about_maintainer), getString(R.string.url_maintainer))); + binding.aboutMaintainer.setMovementMethod(new LinkMovementMethod()); + setTextWithURL(binding.aboutTranslators, getResources(), R.string.about_translators_transifex, R.string.about_translators_transifex_label, R.string.url_translations); return binding.getRoot(); } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentLicenseTab.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentLicenseTab.java index da8cbbd4..10cc02c7 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentLicenseTab.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentLicenseTab.java @@ -1,5 +1,7 @@ package it.niedermann.owncloud.notes.about; +import static it.niedermann.owncloud.notes.shared.util.SupportUtil.setTextWithURL; + import android.content.Intent; import android.content.res.ColorStateList; import android.net.Uri; @@ -17,21 +19,17 @@ import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.branding.BrandedFragment; import it.niedermann.owncloud.notes.branding.BrandingUtil; import it.niedermann.owncloud.notes.databinding.FragmentAboutLicenseTabBinding; -import it.niedermann.owncloud.notes.shared.util.SupportUtil; public class AboutFragmentLicenseTab extends BrandedFragment { private FragmentAboutLicenseTabBinding binding; - private void openLicense() { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.url_license)))); - } - @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentAboutLicenseTabBinding.inflate(inflater, container, false); - binding.aboutAppLicenseButton.setOnClickListener((v) -> openLicense()); - SupportUtil.setHtml(binding.aboutIconsDisclaimer, R.string.about_icons_disclaimer, getString(R.string.about_app_icon_author)); + setTextWithURL(binding.aboutIconsDisclaimerAppIcon, getResources(), R.string.about_icons_disclaimer_app_icon, R.string.about_app_icon_author_link_label, R.string.url_about_icon_author); + setTextWithURL(binding.aboutIconsDisclaimerMdiIcons, getResources(), R.string.about_icons_disclaimer_mdi_icons, R.string.about_icons_disclaimer_mdi, R.string.url_about_icons_disclaimer_mdi); + binding.aboutAppLicenseButton.setOnClickListener((v) -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.url_license))))); return binding.getRoot(); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SupportUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SupportUtil.java index 27fec716..d914c13f 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SupportUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SupportUtil.java @@ -1,31 +1,42 @@ package it.niedermann.owncloud.notes.shared.util; +import android.content.res.Resources; +import android.graphics.Typeface; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.Spanned; import android.text.method.LinkMovementMethod; +import android.text.style.StyleSpan; +import android.text.style.URLSpan; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.core.text.HtmlCompat; +import androidx.annotation.StringRes; -/** - * Some helper functionality in alike the Android support library. - * Currently, it offers methods for working with HTML string resources. - */ public class SupportUtil { private SupportUtil() { throw new UnsupportedOperationException("Do not instantiate this util class."); } - /** - * Fills a {@link TextView} with HTML content and activates links in that {@link TextView}. - * - * @param view The {@link TextView} which should be filled. - * @param stringId The string resource containing HTML tags (escaped by <code><</code>) - * @param formatArgs Arguments for the string resource. - */ - public static void setHtml(@NonNull TextView view, int stringId, Object... formatArgs) { - view.setText(HtmlCompat.fromHtml( - view.getResources().getString(stringId, formatArgs), HtmlCompat.FROM_HTML_MODE_LEGACY)); - view.setMovementMethod(LinkMovementMethod.getInstance()); + public static SpannableString strong(@NonNull CharSequence text) { + final var spannable = new SpannableString(text); + spannable.setSpan(new StyleSpan(Typeface.BOLD), 0, spannable.length(), 0); + return spannable; + } + + public static SpannableString url(@NonNull CharSequence text, @NonNull String target) { + final var spannable = new SpannableString(text); + spannable.setSpan(new URLSpan(target), 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + return spannable; + } + + public static void setTextWithURL(@NonNull TextView textView, @NonNull Resources resources, @StringRes int containerTextId, @StringRes int linkLabelId, @StringRes int urlId) { + final String linkLabel = resources.getString(linkLabelId); + final String finalText = resources.getString(containerTextId, linkLabel); + final var spannable = new SpannableString(finalText); + spannable.setSpan(new URLSpan(resources.getString(urlId)), finalText.indexOf(linkLabel), finalText.indexOf(linkLabel) + linkLabel.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + textView.setText(spannable); + textView.setMovementMethod(new LinkMovementMethod()); } } |