For #26706 - Change TopSite.containsQueryParameters as Uri extension function
This commit is contained in:
parent
2f1f6f3213
commit
070bf5ac24
|
@ -5,6 +5,7 @@
|
|||
package org.mozilla.fenix
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Build.VERSION.SDK_INT
|
||||
import android.os.StrictMode
|
||||
|
@ -44,7 +45,6 @@ import mozilla.components.service.fxa.manager.SyncEnginesStorage
|
|||
import mozilla.components.service.glean.Glean
|
||||
import mozilla.components.service.glean.config.Configuration
|
||||
import mozilla.components.service.glean.net.ConceptFetchHttpUploader
|
||||
import mozilla.components.support.rusterrors.initializeRustErrors
|
||||
import mozilla.components.support.base.facts.register
|
||||
import mozilla.components.support.base.log.Log
|
||||
import mozilla.components.support.base.log.logger.Logger
|
||||
|
@ -52,6 +52,7 @@ import mozilla.components.support.base.observer.Observable
|
|||
import mozilla.components.support.ktx.android.content.isMainProcess
|
||||
import mozilla.components.support.ktx.android.content.runOnlyInMainProcess
|
||||
import mozilla.components.support.locale.LocaleAwareApplication
|
||||
import mozilla.components.support.rusterrors.initializeRustErrors
|
||||
import mozilla.components.support.rusthttp.RustHttpConfig
|
||||
import mozilla.components.support.rustlog.RustLog
|
||||
import mozilla.components.support.utils.logElapsedTime
|
||||
|
@ -275,7 +276,10 @@ open class FenixApplication : LocaleAwareApplication(), Provider {
|
|||
totalSites = components.settings.topSitesMaxLimit,
|
||||
frecencyConfig = TopSitesFrecencyConfig(
|
||||
FrecencyThresholdOption.SKIP_ONE_TIME_PAGES
|
||||
) { !it.containsQueryParameters(components.settings.frecencyFilterQuery) },
|
||||
) {
|
||||
!Uri.parse(it.url)
|
||||
.containsQueryParameters(components.settings.frecencyFilterQuery)
|
||||
},
|
||||
providerConfig = TopSitesProviderConfig(
|
||||
showProviderTopSites = components.settings.showContileFeature,
|
||||
maxThreshold = TOP_SITES_PROVIDER_MAX_THRESHOLD
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
package org.mozilla.fenix.ext
|
||||
|
||||
import android.net.Uri
|
||||
import mozilla.components.feature.top.sites.TopSite
|
||||
import org.mozilla.fenix.settings.SupportUtils
|
||||
|
||||
|
@ -36,31 +35,3 @@ fun List<TopSite>.sort(): List<TopSite> {
|
|||
result
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the url contains any query parameters specified by the [searchParameters].
|
||||
*
|
||||
* @param searchParameters [String] of the following forms:
|
||||
* - "" (empty) - Don't search for any params
|
||||
* - "key" - Search param named "key" with any or no value
|
||||
* - "key=" - Search param named "key" with no value
|
||||
* - "key=value" - Search param named "key" with value "value"
|
||||
*/
|
||||
fun TopSite.containsQueryParameters(searchParameters: String): Boolean {
|
||||
if (searchParameters.isBlank()) {
|
||||
return false
|
||||
}
|
||||
val params = searchParameters.split("=")
|
||||
val uri = Uri.parse(url)
|
||||
return when (params.size) {
|
||||
1 -> {
|
||||
uri.queryParameterNames.contains(params.first()) &&
|
||||
uri.getQueryParameter(params.first()).isNullOrBlank()
|
||||
}
|
||||
2 -> {
|
||||
uri.queryParameterNames.contains(params.first()) &&
|
||||
uri.getQueryParameter(params.first()) == params.last()
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/* 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.ext
|
||||
|
||||
import android.net.Uri
|
||||
|
||||
/**
|
||||
* Returns true if the url contains any query parameters specified by the [searchParameters].
|
||||
*
|
||||
* @param searchParameters [String] of the following forms:
|
||||
* - "" (empty) - Don't search for any params
|
||||
* - "key" - Search param named "key" with any or no value
|
||||
* - "key=" - Search param named "key" with no value
|
||||
* - "key=value" - Search param named "key" with value "value"
|
||||
*/
|
||||
fun Uri.containsQueryParameters(searchParameters: String): Boolean {
|
||||
if (searchParameters.isBlank()) {
|
||||
return false
|
||||
}
|
||||
val params = searchParameters.split("=")
|
||||
return when (params.size) {
|
||||
1 -> {
|
||||
this.queryParameterNames.contains(params.first()) &&
|
||||
this.getQueryParameter(params.first()).isNullOrBlank()
|
||||
}
|
||||
2 -> {
|
||||
this.queryParameterNames.contains(params.first()) &&
|
||||
this.getQueryParameter(params.first()) == params.last()
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
}
|
|
@ -8,6 +8,7 @@ import android.annotation.SuppressLint
|
|||
import android.content.res.Configuration
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.StrictMode
|
||||
import android.view.Gravity
|
||||
|
@ -432,7 +433,7 @@ class HomeFragment : Fragment() {
|
|||
totalSites = settings.topSitesMaxLimit,
|
||||
frecencyConfig = TopSitesFrecencyConfig(
|
||||
FrecencyThresholdOption.SKIP_ONE_TIME_PAGES
|
||||
) { !it.containsQueryParameters(settings.frecencyFilterQuery) },
|
||||
) { !Uri.parse(it.url).containsQueryParameters(settings.frecencyFilterQuery) },
|
||||
providerConfig = TopSitesProviderConfig(
|
||||
showProviderTopSites = settings.showContileFeature,
|
||||
maxThreshold = TOP_SITES_PROVIDER_MAX_THRESHOLD,
|
||||
|
|
|
@ -1128,8 +1128,8 @@ class Settings(private val appContext: Context) : PreferencesHolder {
|
|||
default = ""
|
||||
)
|
||||
/**
|
||||
* URLs from the user's history that contain this search param will be hidden
|
||||
* from the top sites. The value is a string with one of the following forms:
|
||||
* URLs from the user's history that contain this search param will be hidden.
|
||||
* The value is a string with one of the following forms:
|
||||
* - "" (empty) - Disable this feature
|
||||
* - "key" - Search param named "key" with any or no value
|
||||
* - "key=" - Search param named "key" with no value
|
||||
|
@ -1137,7 +1137,7 @@ class Settings(private val appContext: Context) : PreferencesHolder {
|
|||
*/
|
||||
val frecencyFilterQuery by stringPreference(
|
||||
appContext.getPreferenceKey(R.string.pref_key_frecency_filter_query),
|
||||
default = "mfadid=adm"
|
||||
default = "mfadid=adm" // Parameter provided by adM
|
||||
)
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,8 +6,6 @@ package org.mozilla.fenix.ext
|
|||
|
||||
import mozilla.components.feature.top.sites.TopSite
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
||||
|
@ -116,43 +114,4 @@ class TopSiteTest {
|
|||
|
||||
assertEquals(topSites.sort(), expected)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `WHEN containsQueryParameters is invoked THEN the result should be true only if the url contains the search parameters`() {
|
||||
var searchParameters = ""
|
||||
val querySite = TopSite.Frecent(
|
||||
id = 1L,
|
||||
title = "Search",
|
||||
url = "test.com/?q=value",
|
||||
createdAt = 0
|
||||
)
|
||||
val blankQuerySite = TopSite.Frecent(
|
||||
id = 1L,
|
||||
title = "BlankSearch",
|
||||
url = "test.com/?q=",
|
||||
createdAt = 0
|
||||
)
|
||||
|
||||
assertFalse(defaultGoogleTopSite.containsQueryParameters(searchParameters))
|
||||
assertFalse(querySite.containsQueryParameters(searchParameters))
|
||||
assertFalse(blankQuerySite.containsQueryParameters(searchParameters))
|
||||
|
||||
searchParameters = "q"
|
||||
|
||||
assertFalse(defaultGoogleTopSite.containsQueryParameters(searchParameters))
|
||||
assertFalse(querySite.containsQueryParameters(searchParameters))
|
||||
assertTrue(blankQuerySite.containsQueryParameters(searchParameters))
|
||||
|
||||
searchParameters = "q="
|
||||
|
||||
assertFalse(defaultGoogleTopSite.containsQueryParameters(searchParameters))
|
||||
assertFalse(querySite.containsQueryParameters(searchParameters))
|
||||
assertTrue(blankQuerySite.containsQueryParameters(searchParameters))
|
||||
|
||||
searchParameters = "q=value"
|
||||
|
||||
assertFalse(defaultGoogleTopSite.containsQueryParameters(searchParameters))
|
||||
assertTrue(querySite.containsQueryParameters(searchParameters))
|
||||
assertFalse(blankQuerySite.containsQueryParameters(searchParameters))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
/* 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.ext
|
||||
|
||||
import android.net.Uri
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
||||
import org.mozilla.fenix.settings.SupportUtils
|
||||
|
||||
@RunWith(FenixRobolectricTestRunner::class)
|
||||
class UriTest {
|
||||
@Test
|
||||
fun `WHEN urlContainsQueryParameters is invoked THEN the result should be true only if the url contains the search parameters`() {
|
||||
var searchParameters = ""
|
||||
val googleSite = Uri.parse(SupportUtils.GOOGLE_URL)
|
||||
val querySite = Uri.parse("test.com/?q=value")
|
||||
val blankQuerySite = Uri.parse("test.com/?q=")
|
||||
|
||||
assertFalse(googleSite.containsQueryParameters(searchParameters))
|
||||
assertFalse(querySite.containsQueryParameters(searchParameters))
|
||||
assertFalse(blankQuerySite.containsQueryParameters(searchParameters))
|
||||
|
||||
searchParameters = "q"
|
||||
|
||||
assertFalse(googleSite.containsQueryParameters(searchParameters))
|
||||
assertFalse(querySite.containsQueryParameters(searchParameters))
|
||||
assertTrue(blankQuerySite.containsQueryParameters(searchParameters))
|
||||
|
||||
searchParameters = "q="
|
||||
|
||||
assertFalse(googleSite.containsQueryParameters(searchParameters))
|
||||
assertFalse(querySite.containsQueryParameters(searchParameters))
|
||||
assertTrue(blankQuerySite.containsQueryParameters(searchParameters))
|
||||
|
||||
searchParameters = "q=value"
|
||||
|
||||
assertFalse(googleSite.containsQueryParameters(searchParameters))
|
||||
assertTrue(querySite.containsQueryParameters(searchParameters))
|
||||
assertFalse(blankQuerySite.containsQueryParameters(searchParameters))
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue