diff --git a/app/src/main/java/org/mozilla/fenix/BrowserDirection.kt b/app/src/main/java/org/mozilla/fenix/BrowserDirection.kt
index 951d8861b2..739caf58d7 100644
--- a/app/src/main/java/org/mozilla/fenix/BrowserDirection.kt
+++ b/app/src/main/java/org/mozilla/fenix/BrowserDirection.kt
@@ -27,5 +27,6 @@ enum class BrowserDirection(@IdRes val fragmentId: Int) {
FromSavedLoginsFragment(R.id.savedLoginsFragment),
FromAddNewDeviceFragment(R.id.addNewDeviceFragment),
FromAddSearchEngineFragment(R.id.addSearchEngineFragment),
- FromEditCustomSearchEngineFragment(R.id.editCustomSearchEngineFragment)
+ FromEditCustomSearchEngineFragment(R.id.editCustomSearchEngineFragment),
+ FromAddonDetailsFragment(R.id.addonDetailsFragment)
}
diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
index db2f37b1d1..541dbf6dc9 100644
--- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
+++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
@@ -474,6 +474,8 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
AddSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
BrowserDirection.FromEditCustomSearchEngineFragment ->
EditCustomSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
+ BrowserDirection.FromAddonDetailsFragment ->
+ EditCustomSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
}
private fun load(
diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsFragment.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsFragment.kt
index 6548e311c3..38d9441ad2 100644
--- a/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsFragment.kt
@@ -4,7 +4,6 @@
package org.mozilla.fenix.addons
-import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
@@ -19,6 +18,8 @@ import mozilla.components.feature.addons.Addon
import mozilla.components.feature.addons.ui.showInformationDialog
import mozilla.components.feature.addons.ui.translatedName
import mozilla.components.feature.addons.update.DefaultAddonUpdater.UpdateAttemptStorage
+import org.mozilla.fenix.BrowserDirection
+import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.showToolbar
@@ -38,7 +39,11 @@ class AddonDetailsFragment : Fragment(R.layout.fragment_add_on_details), AddonDe
}
override fun openWebsite(addonSiteUrl: Uri) {
- startActivity(Intent(Intent.ACTION_VIEW, addonSiteUrl))
+ (activity as HomeActivity).openToBrowserAndLoad(
+ searchTermOrURL = addonSiteUrl.toString(),
+ newTab = true,
+ from = BrowserDirection.FromAddonDetailsFragment
+ )
}
override fun showUpdaterDialog(addon: Addon) {
diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsView.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsView.kt
index 372e3e8b55..d77e5c13c0 100644
--- a/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsView.kt
+++ b/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsView.kt
@@ -5,10 +5,14 @@
package org.mozilla.fenix.addons
import android.net.Uri
+import android.text.SpannableStringBuilder
import android.text.method.LinkMovementMethod
+import android.text.style.ClickableSpan
+import android.text.style.URLSpan
import android.view.View
import androidx.core.net.toUri
import androidx.core.text.HtmlCompat
+import androidx.core.text.getSpans
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.fragment_add_on_details.*
import mozilla.components.feature.addons.Addon
@@ -102,10 +106,33 @@ class AddonDetailsView(
val parsedText = detailsText.replace("\n", "
")
val text = HtmlCompat.fromHtml(parsedText, HtmlCompat.FROM_HTML_MODE_COMPACT)
- details.text = text
+ val spannableStringBuilder = SpannableStringBuilder(text)
+ val links = spannableStringBuilder.getSpans()
+ for (link in links) {
+ addActionToLinks(spannableStringBuilder, link)
+ }
+ details.text = spannableStringBuilder
details.movementMethod = LinkMovementMethod.getInstance()
}
+ private fun addActionToLinks(
+ spannableStringBuilder: SpannableStringBuilder,
+ link: URLSpan
+ ) {
+ val start = spannableStringBuilder.getSpanStart(link)
+ val end = spannableStringBuilder.getSpanEnd(link)
+ val flags = spannableStringBuilder.getSpanFlags(link)
+ val clickable: ClickableSpan = object : ClickableSpan() {
+ override fun onClick(view: View) {
+ view.setOnClickListener {
+ interactor.openWebsite(link.url.toUri())
+ }
+ }
+ }
+ spannableStringBuilder.setSpan(clickable, start, end, flags)
+ spannableStringBuilder.removeSpan(link)
+ }
+
private fun formatDate(text: String): String {
return dateFormatter.format(dateParser.parse(text)!!)
}