* 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),
|
FromSavedLoginsFragment(R.id.savedLoginsFragment),
|
||||||
FromAddNewDeviceFragment(R.id.addNewDeviceFragment),
|
FromAddNewDeviceFragment(R.id.addNewDeviceFragment),
|
||||||
FromAddSearchEngineFragment(R.id.addSearchEngineFragment),
|
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)
|
AddSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
|
||||||
BrowserDirection.FromEditCustomSearchEngineFragment ->
|
BrowserDirection.FromEditCustomSearchEngineFragment ->
|
||||||
EditCustomSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
|
EditCustomSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
|
||||||
|
BrowserDirection.FromAddonDetailsFragment ->
|
||||||
|
EditCustomSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun load(
|
private fun load(
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
|
|
||||||
package org.mozilla.fenix.addons
|
package org.mozilla.fenix.addons
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
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.showInformationDialog
|
||||||
import mozilla.components.feature.addons.ui.translatedName
|
import mozilla.components.feature.addons.ui.translatedName
|
||||||
import mozilla.components.feature.addons.update.DefaultAddonUpdater.UpdateAttemptStorage
|
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.R
|
||||||
import org.mozilla.fenix.ext.showToolbar
|
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) {
|
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) {
|
override fun showUpdaterDialog(addon: Addon) {
|
||||||
|
|
|
@ -5,10 +5,14 @@
|
||||||
package org.mozilla.fenix.addons
|
package org.mozilla.fenix.addons
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.text.SpannableStringBuilder
|
||||||
import android.text.method.LinkMovementMethod
|
import android.text.method.LinkMovementMethod
|
||||||
|
import android.text.style.ClickableSpan
|
||||||
|
import android.text.style.URLSpan
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.core.text.HtmlCompat
|
import androidx.core.text.HtmlCompat
|
||||||
|
import androidx.core.text.getSpans
|
||||||
import kotlinx.android.extensions.LayoutContainer
|
import kotlinx.android.extensions.LayoutContainer
|
||||||
import kotlinx.android.synthetic.main.fragment_add_on_details.*
|
import kotlinx.android.synthetic.main.fragment_add_on_details.*
|
||||||
import mozilla.components.feature.addons.Addon
|
import mozilla.components.feature.addons.Addon
|
||||||
|
@ -102,10 +106,33 @@ class AddonDetailsView(
|
||||||
val parsedText = detailsText.replace("\n", "<br/>")
|
val parsedText = detailsText.replace("\n", "<br/>")
|
||||||
val text = HtmlCompat.fromHtml(parsedText, HtmlCompat.FROM_HTML_MODE_COMPACT)
|
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()
|
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 {
|
private fun formatDate(text: String): String {
|
||||||
return dateFormatter.format(dateParser.parse(text)!!)
|
return dateFormatter.format(dateParser.parse(text)!!)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue