From d3a07e95c92bcb1f455930df6850792afc84b4a1 Mon Sep 17 00:00:00 2001 From: Tiger Oakes Date: Wed, 22 Jul 2020 16:21:31 -0700 Subject: [PATCH] For #12565: Don't pass contest to SortingStrategy --- .../main/java/org/mozilla/fenix/ext/String.kt | 4 ++-- .../fenix/settings/logins/SortingStrategy.kt | 9 ++++----- .../logins/fragment/SavedLoginsFragment.kt | 17 ++++++++--------- .../java/org/mozilla/fenix/utils/Settings.kt | 8 +++----- .../java/org/mozilla/fenix/ext/StringTest.kt | 2 +- .../settings/logins/LoginDetailViewTest.kt | 3 +-- .../settings/logins/LoginsFragmentStoreTest.kt | 6 +++--- .../settings/logins/LoginsListControllerTest.kt | 8 ++++---- .../logins/SavedLoginsInteractorTest.kt | 3 ++- 9 files changed, 28 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/ext/String.kt b/app/src/main/java/org/mozilla/fenix/ext/String.kt index 56744f49e..af5656dfe 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/String.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/String.kt @@ -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() } /** diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/SortingStrategy.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/SortingStrategy.kt index 2cecfd973..eae2ff2ce 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/SortingStrategy.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/SortingStrategy.kt @@ -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): List - 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): List { - 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): List { return logins.sortedByDescending { it.timeLastUsed } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt index 16a4a8974..182a366af 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt @@ -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 ) } } diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index e5e21dbdc..180b022a2 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -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) { diff --git a/app/src/test/java/org/mozilla/fenix/ext/StringTest.kt b/app/src/test/java/org/mozilla/fenix/ext/StringTest.kt index 8cc9ad55b..1b6a39c4b 100644 --- a/app/src/test/java/org/mozilla/fenix/ext/StringTest.kt +++ b/app/src/test/java/org/mozilla/fenix/ext/StringTest.kt @@ -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") } diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginDetailViewTest.kt b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginDetailViewTest.kt index 1ba67712a..53f98c2f3 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginDetailViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginDetailViewTest.kt @@ -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() ) diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsFragmentStoreTest.kt b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsFragmentStoreTest.kt index e2044cbbf..dbf41c2bd 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsFragmentStoreTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsFragmentStoreTest.kt @@ -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", diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt index 0373b5afa..8d6cac06e 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt @@ -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 diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsInteractorTest.kt index d82e265e8..9838abb29 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsInteractorTest.kt @@ -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)