1
0
Fork 0

For #12565: Don't pass contest to SortingStrategy

master
Tiger Oakes 2020-07-22 16:21:31 -07:00 committed by Emily Kager
parent aa495b4526
commit d3a07e95c9
9 changed files with 28 additions and 32 deletions

View File

@ -94,8 +94,8 @@ private fun Uri.isIpv6(): Boolean {
/**
* Trim a host's prefix and suffix
*/
fun String.urlToTrimmedHost(context: Context): String = runBlocking {
urlToTrimmedHost(context.components.publicSuffixList).await()
fun String.urlToTrimmedHost(publicSuffixList: PublicSuffixList): String = runBlocking {
urlToTrimmedHost(publicSuffixList).await()
}
/**

View File

@ -4,20 +4,19 @@
package org.mozilla.fenix.settings.logins
import android.content.Context
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
import org.mozilla.fenix.ext.urlToTrimmedHost
sealed class SortingStrategy {
abstract operator fun invoke(logins: List<SavedLogin>): List<SavedLogin>
abstract val appContext: Context
data class Alphabetically(override val appContext: Context) : SortingStrategy() {
data class Alphabetically(private val publicSuffixList: PublicSuffixList) : SortingStrategy() {
override fun invoke(logins: List<SavedLogin>): List<SavedLogin> {
return logins.sortedBy { it.origin.urlToTrimmedHost(appContext) }
return logins.sortedBy { it.origin.urlToTrimmedHost(publicSuffixList) }
}
}
data class LastUsed(override val appContext: Context) : SortingStrategy() {
object LastUsed : SortingStrategy() {
override fun invoke(logins: List<SavedLogin>): List<SavedLogin> {
return logins.sortedByDescending { it.timeLastUsed }
}

View File

@ -6,12 +6,12 @@ package org.mozilla.fenix.settings.logins.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.view.inputmethod.EditorInfo
import android.view.Menu
import android.view.MenuInflater
import android.widget.FrameLayout
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SearchView
@ -31,17 +31,18 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.components.StoreProvider
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.redirectToReAuth
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.ext.showToolbar
import org.mozilla.fenix.settings.logins.LoginsAction
import org.mozilla.fenix.settings.logins.LoginsFragmentStore
import org.mozilla.fenix.settings.logins.controller.LoginsListController
import org.mozilla.fenix.settings.logins.LoginsListState
import org.mozilla.fenix.settings.logins.interactor.SavedLoginsInteractor
import org.mozilla.fenix.settings.logins.SavedLoginsSortingStrategyMenu
import org.mozilla.fenix.settings.logins.view.SavedLoginsListView
import org.mozilla.fenix.settings.logins.SortingStrategy
import org.mozilla.fenix.settings.logins.controller.LoginsListController
import org.mozilla.fenix.settings.logins.controller.SavedLoginsStorageController
import org.mozilla.fenix.settings.logins.interactor.SavedLoginsInteractor
import org.mozilla.fenix.settings.logins.view.SavedLoginsListView
@SuppressWarnings("TooManyFunctions")
class SavedLoginsFragment : Fragment() {
@ -228,16 +229,14 @@ class SavedLoginsFragment : Fragment() {
SavedLoginsSortingStrategyMenu.Item.AlphabeticallySort -> {
savedLoginsInteractor.onSortingStrategyChanged(
SortingStrategy.Alphabetically(
requireContext().applicationContext
requireComponents.publicSuffixList
)
)
}
SavedLoginsSortingStrategyMenu.Item.LastUsedSort -> {
savedLoginsInteractor.onSortingStrategyChanged(
SortingStrategy.LastUsed(
requireContext().applicationContext
)
SortingStrategy.LastUsed
)
}
}

View File

@ -831,12 +831,10 @@ class Settings(private val appContext: Context) : PreferencesHolder {
get() {
return when (savedLoginsSortingStrategyString) {
SavedLoginsFragment.SORTING_STRATEGY_ALPHABETICALLY -> SortingStrategy.Alphabetically(
appContext
appContext.components.publicSuffixList
)
SavedLoginsFragment.SORTING_STRATEGY_LAST_USED -> SortingStrategy.LastUsed(
appContext
)
else -> SortingStrategy.Alphabetically(appContext)
SavedLoginsFragment.SORTING_STRATEGY_LAST_USED -> SortingStrategy.LastUsed
else -> SortingStrategy.Alphabetically(appContext.components.publicSuffixList)
}
}
set(value) {

View File

@ -24,7 +24,7 @@ class StringTest {
@Test
fun `Url To Trimmed Host`() {
val urlTest = "http://www.example.com:1080/docs/resource1.html"
val new = urlTest.urlToTrimmedHost(testContext)
val new = urlTest.urlToTrimmedHost(publicSuffixList)
assertEquals(new, "example")
}

View File

@ -6,7 +6,6 @@ package org.mozilla.fenix.settings.logins
import android.view.LayoutInflater
import android.view.ViewGroup
import io.mockk.mockk
import kotlinx.android.synthetic.main.fragment_login_detail.view.*
import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertEquals
@ -31,7 +30,7 @@ class LoginDetailViewTest {
timeLastUsed = 100L
),
searchedForText = null,
sortingStrategy = SortingStrategy.LastUsed(mockk()),
sortingStrategy = SortingStrategy.LastUsed,
highlightedItem = SavedLoginsSortingStrategyMenu.Item.LastUsedSort,
duplicateLogins = listOf()
)

View File

@ -29,7 +29,7 @@ class LoginsFragmentStoreTest {
loginList = emptyList(),
filteredItems = emptyList(),
searchedForText = null,
sortingStrategy = SortingStrategy.LastUsed(mockk()),
sortingStrategy = SortingStrategy.LastUsed,
highlightedItem = SavedLoginsSortingStrategyMenu.Item.LastUsedSort,
duplicateLogins = listOf()
)
@ -88,7 +88,7 @@ class LoginsFragmentStoreTest {
@Test
fun `SortLogins action`() {
val lastUsed = SortingStrategy.LastUsed(mockk())
val lastUsed = SortingStrategy.LastUsed
val store = LoginsFragmentStore(baseState.copy(
isLoading = true,
searchedForText = null,
@ -108,7 +108,7 @@ class LoginsFragmentStoreTest {
@Test
fun `SortLogins action with search text`() {
val lastUsed = SortingStrategy.LastUsed(mockk())
val lastUsed = SortingStrategy.LastUsed
val store = LoginsFragmentStore(baseState.copy(
isLoading = true,
searchedForText = "example",

View File

@ -13,6 +13,7 @@ import org.junit.runner.RunWith
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.settings.logins.controller.LoginsListController
@ -23,7 +24,8 @@ import org.mozilla.fenix.utils.Settings
class LoginsListControllerTest {
private val store: LoginsFragmentStore = mockk(relaxed = true)
private val settings: Settings = mockk(relaxed = true)
private val sortingStrategy: SortingStrategy = SortingStrategy.Alphabetically(testContext)
private val publicSuffixList = testContext.components.publicSuffixList
private val sortingStrategy: SortingStrategy = SortingStrategy.Alphabetically(publicSuffixList)
private val navController: NavController = mockk(relaxed = true)
private val browserNavigator: (String, Boolean, BrowserDirection) -> Unit = mockk(relaxed = true)
private val metrics: MetricController = mockk(relaxed = true)
@ -43,9 +45,7 @@ class LoginsListControllerTest {
verifyAll {
store.dispatch(
LoginsAction.SortLogins(
SortingStrategy.Alphabetically(
testContext
)
SortingStrategy.Alphabetically(publicSuffixList)
)
)
settings.savedLoginsSortingStrategy = sortingStrategy

View File

@ -10,6 +10,7 @@ import mozilla.components.support.test.robolectric.testContext
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.settings.logins.controller.LoginsListController
import org.mozilla.fenix.settings.logins.controller.SavedLoginsStorageController
@ -39,7 +40,7 @@ class SavedLoginsInteractorTest {
@Test
fun `GIVEN a change in sorting strategy, WHEN the interactor is called for it, THEN it should just delegate the controller`() {
val sortingStrategy: SortingStrategy = SortingStrategy.Alphabetically(testContext)
val sortingStrategy = SortingStrategy.Alphabetically(testContext.components.publicSuffixList)
interactor.onSortingStrategyChanged(sortingStrategy)