From 800702149b0ad9e6a2d94e474c3d17c48ae6211f Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 13 Jul 2020 16:05:28 +0300 Subject: [PATCH] For #12503: Open addon permissions link in app. --- .../org/mozilla/fenix/BrowserDirection.kt | 1 + .../java/org/mozilla/fenix/HomeActivity.kt | 3 + .../addons/AddonPermissionsDetailsFragment.kt | 49 ++++---------- .../addons/AddonPermissionsDetailsView.kt | 66 +++++++++++++++++++ 4 files changed, 82 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/addons/AddonPermissionsDetailsView.kt diff --git a/app/src/main/java/org/mozilla/fenix/BrowserDirection.kt b/app/src/main/java/org/mozilla/fenix/BrowserDirection.kt index 3077e1c26..f25f3ef9f 100644 --- a/app/src/main/java/org/mozilla/fenix/BrowserDirection.kt +++ b/app/src/main/java/org/mozilla/fenix/BrowserDirection.kt @@ -29,5 +29,6 @@ enum class BrowserDirection(@IdRes val fragmentId: Int) { FromAddSearchEngineFragment(R.id.addSearchEngineFragment), FromEditCustomSearchEngineFragment(R.id.editCustomSearchEngineFragment), FromAddonDetailsFragment(R.id.addonDetailsFragment), + FromAddonPermissionsDetailsFragment(R.id.addonPermissionsDetailFragment), FromLoginDetailFragment(R.id.loginDetailFragment) } diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 73480dd96..9f77509b1 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -56,6 +56,7 @@ import mozilla.components.support.utils.toSafeIntent import mozilla.components.support.webextensions.WebExtensionPopupFeature import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.addons.AddonDetailsFragmentDirections +import org.mozilla.fenix.addons.AddonPermissionsDetailsFragmentDirections import org.mozilla.fenix.browser.UriOpenedObserver import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager @@ -514,6 +515,8 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { EditCustomSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId) BrowserDirection.FromAddonDetailsFragment -> AddonDetailsFragmentDirections.actionGlobalBrowser(customTabSessionId) + BrowserDirection.FromAddonPermissionsDetailsFragment -> + AddonPermissionsDetailsFragmentDirections.actionGlobalBrowser(customTabSessionId) BrowserDirection.FromLoginDetailFragment -> LoginDetailFragmentDirections.actionGlobalBrowser(customTabSessionId) } diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonPermissionsDetailsFragment.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonPermissionsDetailsFragment.kt index 28ef5e567..88bf2b9a3 100644 --- a/app/src/main/java/org/mozilla/fenix/addons/AddonPermissionsDetailsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/addons/AddonPermissionsDetailsFragment.kt @@ -4,61 +4,36 @@ package org.mozilla.fenix.addons -import android.content.Intent -import android.content.Intent.ACTION_VIEW +import android.net.Uri import android.os.Bundle import android.view.View -import androidx.annotation.StringRes -import androidx.core.net.toUri import androidx.fragment.app.Fragment import androidx.navigation.fragment.navArgs -import androidx.recyclerview.widget.LinearLayoutManager -import kotlinx.android.synthetic.main.fragment_add_on_permissions.view.* -import mozilla.components.feature.addons.Addon -import mozilla.components.feature.addons.ui.AddonPermissionsAdapter import mozilla.components.feature.addons.ui.translatedName +import org.mozilla.fenix.BrowserDirection +import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.showToolbar -import org.mozilla.fenix.theme.ThemeManager - -private const val LEARN_MORE_URL = - "https://support.mozilla.org/kb/permission-request-messages-firefox-extensions" /** * A fragment to show the permissions of an add-on. */ -class AddonPermissionsDetailsFragment : Fragment(R.layout.fragment_add_on_permissions) { +class AddonPermissionsDetailsFragment : Fragment(R.layout.fragment_add_on_permissions), + AddonPermissionsDetailsInteractor { private val args by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) showToolbar(args.addon.translatedName) - - bindPermissions(args.addon, view) - bindLearnMore(view) + AddonPermissionsDetailsView(view, interactor = this).bind(args.addon) } - private fun bindPermissions(addon: Addon, view: View) { - view.add_ons_permissions.apply { - layoutManager = LinearLayoutManager(requireContext()) - val sortedPermissions = addon.translatePermissions().map { - @StringRes val stringId = it - getString(stringId) - }.sorted() - adapter = AddonPermissionsAdapter( - sortedPermissions, - style = AddonPermissionsAdapter.Style( - ThemeManager.resolveAttribute(R.attr.primaryText, requireContext()) - ) - ) - } - } - - private fun bindLearnMore(view: View) { - view.learn_more_label.setOnClickListener { - val intent = Intent(ACTION_VIEW, LEARN_MORE_URL.toUri()) - startActivity(intent) - } + override fun openWebsite(addonSiteUrl: Uri) { + (activity as HomeActivity).openToBrowserAndLoad( + searchTermOrURL = addonSiteUrl.toString(), + newTab = true, + from = BrowserDirection.FromAddonPermissionsDetailsFragment + ) } } diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonPermissionsDetailsView.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonPermissionsDetailsView.kt new file mode 100644 index 000000000..e3f936df6 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/addons/AddonPermissionsDetailsView.kt @@ -0,0 +1,66 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.addons + +import android.net.Uri +import android.view.View +import androidx.annotation.StringRes +import androidx.core.net.toUri +import androidx.recyclerview.widget.LinearLayoutManager +import kotlinx.android.extensions.LayoutContainer +import kotlinx.android.synthetic.main.fragment_add_on_permissions.* +import mozilla.components.feature.addons.Addon +import mozilla.components.feature.addons.ui.AddonPermissionsAdapter +import org.mozilla.fenix.R +import org.mozilla.fenix.theme.ThemeManager + +interface AddonPermissionsDetailsInteractor { + + /** + * Open the given siteUrl in the browser. + */ + fun openWebsite(addonSiteUrl: Uri) +} + +/** + * Shows the permission details of an add-on. + */ +class AddonPermissionsDetailsView( + override val containerView: View, + private val interactor: AddonPermissionsDetailsInteractor +) : LayoutContainer { + + fun bind(addon: Addon) { + bindPermissions(addon) + bindLearnMore() + } + + private fun bindPermissions(addon: Addon) { + add_ons_permissions.apply { + layoutManager = LinearLayoutManager(context) + val sortedPermissions = addon.translatePermissions().map { + @StringRes val stringId = it + context.getString(stringId) + }.sorted() + adapter = AddonPermissionsAdapter( + sortedPermissions, + style = AddonPermissionsAdapter.Style( + ThemeManager.resolveAttribute(R.attr.primaryText, context) + ) + ) + } + } + + private fun bindLearnMore() { + learn_more_label.setOnClickListener { + interactor.openWebsite(LEARN_MORE_URL.toUri()) + } + } + + private companion object { + const val LEARN_MORE_URL = + "https://support.mozilla.org/kb/permission-request-messages-firefox-extensions" + } +}