For #12565: Don't pass contest to SortingStrategy
parent
aa495b4526
commit
d3a07e95c9
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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 }
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
)
|
)
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue