* For #11996: Open add-on homepage link in Fenix. * For #11996: Open add-on details links in Fenix.master
parent
d51faea6c5
commit
daecbd348b
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -474,6 +474,8 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
|
|||
AddSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
|
||||
BrowserDirection.FromEditCustomSearchEngineFragment ->
|
||||
EditCustomSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
|
||||
BrowserDirection.FromAddonDetailsFragment ->
|
||||
EditCustomSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
|
||||
}
|
||||
|
||||
private fun load(
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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", "<br/>")
|
||||
val text = HtmlCompat.fromHtml(parsedText, HtmlCompat.FROM_HTML_MODE_COMPACT)
|
||||
|
||||
details.text = text
|
||||
val spannableStringBuilder = SpannableStringBuilder(text)
|
||||
val links = spannableStringBuilder.getSpans<URLSpan>()
|
||||
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)!!)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue