Loading app/src/main/assets/allowed_addons.json 0 → 100644 +2782 −0 File added.Preview size limit exceeded, changes collapsed. Show changes app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt +3 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import kotlinx.coroutines.launch import mozilla.components.feature.addons.Addon import mozilla.components.feature.addons.AddonManagerException import mozilla.components.feature.addons.ui.translatedName import mozilla.components.support.webextensions.WebExtensionSupport.installedExtensions import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.components Loading Loading @@ -256,6 +257,8 @@ class InstalledAddonDetailsFragment : Fragment() { } } private fun bindRemoveButton(view: View) { val isBuiltin = installedExtensions[addon.id]?.isBuiltIn() ?: false view.remove_add_on.isVisible = !isBuiltin view.remove_add_on.setOnClickListener { setAllInteractiveViewsClickable(view, false) requireContext().components.addonManager.uninstallAddon( Loading app/src/main/java/org/mozilla/fenix/components/Components.kt +1 −13 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ import android.content.Context import android.content.Intent import androidx.core.net.toUri import mozilla.components.feature.addons.AddonManager import mozilla.components.feature.addons.amo.AddonCollectionProvider import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker import mozilla.components.feature.addons.migration.SupportedAddonsChecker import mozilla.components.feature.addons.update.AddonUpdater Loading Loading @@ -71,18 +70,7 @@ class Components(private val context: Context) { ) } val addonCollectionProvider by lazy { if (!BuildConfig.AMO_COLLECTION.isNullOrEmpty()) { AddonCollectionProvider( context, core.client, collectionName = BuildConfig.AMO_COLLECTION, maxCacheAgeInMinutes = DAY_IN_MINUTES ) } else { AddonCollectionProvider(context, core.client, maxCacheAgeInMinutes = DAY_IN_MINUTES) } } val addonCollectionProvider by lazy { TorAddonCollectionProvider(context, core.client) } val appStartupTelemetry by lazy { AppStartupTelemetry(analytics.metrics) } Loading app/src/main/java/org/mozilla/fenix/components/TorAddonCollectionProvider.kt 0 → 100644 +60 −0 Original line number Diff line number Diff line /* 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/. */ // Copyright (c) 2020, The Tor Project, Inc. package org.mozilla.fenix.components import android.content.Context import android.graphics.Bitmap import kotlinx.coroutines.withContext import mozilla.components.concept.fetch.Client import mozilla.components.feature.addons.Addon import kotlinx.coroutines.Dispatchers import mozilla.components.feature.addons.amo.AddonCollectionProvider import java.io.IOException internal const val COLLECTION_NAME = "tor_browser_collection" internal const val ALLOWED_ADDONS_PATH = "allowed_addons.json" internal const val MAX_CACHE_AGE = 1000L * 365L * 24L * 60L // 1000 years class TorAddonCollectionProvider( private val context: Context, client: Client ) : AddonCollectionProvider( context, client, serverURL = "", collectionName = COLLECTION_NAME, maxCacheAgeInMinutes = MAX_CACHE_AGE ) { private var isCacheLoaded = false @Throws(IOException::class) override suspend fun getAvailableAddons( allowCache: Boolean, readTimeoutInSeconds: Long? ): List<Addon> { ensureCache() return super.getAvailableAddons(true, readTimeoutInSeconds) } @Throws(IOException::class) override suspend fun getAddonIconBitmap(addon: Addon): Bitmap? { ensureCache() return super.getAddonIconBitmap(addon) } @Throws(IOException::class) private suspend fun ensureCache() { if (isCacheLoaded) { return } return withContext(Dispatchers.IO) { val data = context.assets.open(ALLOWED_ADDONS_PATH).bufferedReader().use { it.readText() } writeToDiskCache(data) isCacheLoaded = true } } } Loading
app/src/main/assets/allowed_addons.json 0 → 100644 +2782 −0 File added.Preview size limit exceeded, changes collapsed. Show changes
app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt +3 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import kotlinx.coroutines.launch import mozilla.components.feature.addons.Addon import mozilla.components.feature.addons.AddonManagerException import mozilla.components.feature.addons.ui.translatedName import mozilla.components.support.webextensions.WebExtensionSupport.installedExtensions import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.components Loading Loading @@ -256,6 +257,8 @@ class InstalledAddonDetailsFragment : Fragment() { } } private fun bindRemoveButton(view: View) { val isBuiltin = installedExtensions[addon.id]?.isBuiltIn() ?: false view.remove_add_on.isVisible = !isBuiltin view.remove_add_on.setOnClickListener { setAllInteractiveViewsClickable(view, false) requireContext().components.addonManager.uninstallAddon( Loading
app/src/main/java/org/mozilla/fenix/components/Components.kt +1 −13 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ import android.content.Context import android.content.Intent import androidx.core.net.toUri import mozilla.components.feature.addons.AddonManager import mozilla.components.feature.addons.amo.AddonCollectionProvider import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker import mozilla.components.feature.addons.migration.SupportedAddonsChecker import mozilla.components.feature.addons.update.AddonUpdater Loading Loading @@ -71,18 +70,7 @@ class Components(private val context: Context) { ) } val addonCollectionProvider by lazy { if (!BuildConfig.AMO_COLLECTION.isNullOrEmpty()) { AddonCollectionProvider( context, core.client, collectionName = BuildConfig.AMO_COLLECTION, maxCacheAgeInMinutes = DAY_IN_MINUTES ) } else { AddonCollectionProvider(context, core.client, maxCacheAgeInMinutes = DAY_IN_MINUTES) } } val addonCollectionProvider by lazy { TorAddonCollectionProvider(context, core.client) } val appStartupTelemetry by lazy { AppStartupTelemetry(analytics.metrics) } Loading
app/src/main/java/org/mozilla/fenix/components/TorAddonCollectionProvider.kt 0 → 100644 +60 −0 Original line number Diff line number Diff line /* 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/. */ // Copyright (c) 2020, The Tor Project, Inc. package org.mozilla.fenix.components import android.content.Context import android.graphics.Bitmap import kotlinx.coroutines.withContext import mozilla.components.concept.fetch.Client import mozilla.components.feature.addons.Addon import kotlinx.coroutines.Dispatchers import mozilla.components.feature.addons.amo.AddonCollectionProvider import java.io.IOException internal const val COLLECTION_NAME = "tor_browser_collection" internal const val ALLOWED_ADDONS_PATH = "allowed_addons.json" internal const val MAX_CACHE_AGE = 1000L * 365L * 24L * 60L // 1000 years class TorAddonCollectionProvider( private val context: Context, client: Client ) : AddonCollectionProvider( context, client, serverURL = "", collectionName = COLLECTION_NAME, maxCacheAgeInMinutes = MAX_CACHE_AGE ) { private var isCacheLoaded = false @Throws(IOException::class) override suspend fun getAvailableAddons( allowCache: Boolean, readTimeoutInSeconds: Long? ): List<Addon> { ensureCache() return super.getAvailableAddons(true, readTimeoutInSeconds) } @Throws(IOException::class) override suspend fun getAddonIconBitmap(addon: Addon): Bitmap? { ensureCache() return super.getAddonIconBitmap(addon) } @Throws(IOException::class) private suspend fun ensureCache() { if (isCacheLoaded) { return } return withContext(Dispatchers.IO) { val data = context.assets.open(ALLOWED_ADDONS_PATH).bufferedReader().use { it.readText() } writeToDiskCache(data) isCacheLoaded = true } } }