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 * Trim a host's prefix and suffix
*/ */
fun String.urlToTrimmedHost(context: Context): String = runBlocking { fun String.urlToTrimmedHost(publicSuffixList: PublicSuffixList): String = runBlocking {
urlToTrimmedHost(context.components.publicSuffixList).await() urlToTrimmedHost(publicSuffixList).await()
} }
/** /**

View File

@ -4,20 +4,19 @@
package org.mozilla.fenix.settings.logins package org.mozilla.fenix.settings.logins
import android.content.Context import mozilla.components.lib.publicsuffixlist.PublicSuffixList
import org.mozilla.fenix.ext.urlToTrimmedHost import org.mozilla.fenix.ext.urlToTrimmedHost
sealed class SortingStrategy { sealed class SortingStrategy {
abstract operator fun invoke(logins: List<SavedLogin>): List<SavedLogin> 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> { 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> { override fun invoke(logins: List<SavedLogin>): List<SavedLogin> {
return logins.sortedByDescending { it.timeLastUsed } return logins.sortedByDescending { it.timeLastUsed }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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